This is an automated email from the git hooks/post-receive script. bengen pushed a commit to branch master in repository lambda-term.
commit 31e78036e9354c74cf32a8eb428b2ac2a2609295 Author: Hilko Bengen <ben...@debian.org> Date: Thu Sep 15 00:18:14 2016 +0200 New upstream version 1.10.1 --- CHANGES.md | 6 ++ Makefile | 2 + _oasis | 24 ++++++- myocamlbuild.ml | 174 ++++++++++++++++++++++++++++++++++++++++++-- setup.ml | 191 ++++++++++++++++++++++++++++++++++++++----------- src/META | 4 +- src/lTerm_read_line.ml | 18 +++-- 7 files changed, 360 insertions(+), 59 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 16ee542..aecba97 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +1.10.1 (2016-08-15) +------------------- + +* fix a race condition in `LTerm_read_line`. The race would often + appear when copy&pasting + 1.10 (2016-04-07) ----------------- diff --git a/Makefile b/Makefile index 7fe7e5a..2421874 100644 --- a/Makefile +++ b/Makefile @@ -36,12 +36,14 @@ all: $(SETUP) ./$(SETUP) -all $(ALLFLAGS) install: $(SETUP) setup.data + ocamlfind remove lambda-term 2>/dev/null || true ./$(SETUP) -install $(INSTALLFLAGS) uninstall: $(SETUP) setup.data ./$(SETUP) -uninstall $(UNINSTALLFLAGS) reinstall: $(SETUP) setup.data + ocamlfind remove lambda-term 2>/dev/null || true ./$(SETUP) -reinstall $(REINSTALLFLAGS) clean: $(SETUP) diff --git a/_oasis b/_oasis index be6432d..be61580 100644 --- a/_oasis +++ b/_oasis @@ -5,7 +5,7 @@ OASISFormat: 0.4 OCamlVersion: >= 3.12 Name: lambda-term -Version: 1.10 +Version: 1.10.1 LicenseFile: LICENSE License: BSD-3-CLAUSE Authors: Jeremie Dimino @@ -30,6 +30,10 @@ Description: FilesAB: src/lTerm_config.h.ab +Flag examples + Description: build examples + Default: true + # +-------------------------------------------------------------------+ # | The library | # +-------------------------------------------------------------------+ @@ -91,6 +95,7 @@ Executable events CompiledObject: best MainIs: events.ml BuildDepends: lambda-term + Build$: flag(examples) Executable colors Path: examples @@ -98,6 +103,7 @@ Executable colors CompiledObject: best MainIs: colors.ml BuildDepends: lambda-term + Build$: flag(examples) Executable colors_256 Path: examples @@ -105,6 +111,7 @@ Executable colors_256 CompiledObject: best MainIs: colors_256.ml BuildDepends: lambda-term + Build$: flag(examples) Executable rgb Path: examples @@ -112,6 +119,7 @@ Executable rgb CompiledObject: best MainIs: rgb.ml BuildDepends: lambda-term + Build$: flag(examples) Executable move Path: examples @@ -119,6 +127,7 @@ Executable move CompiledObject: best MainIs: move.ml BuildDepends: lambda-term + Build$: flag(examples) Executable hello Path: examples @@ -126,6 +135,7 @@ Executable hello CompiledObject: best MainIs: hello.ml BuildDepends: lambda-term + Build$: flag(examples) Executable clock Path: examples @@ -133,6 +143,7 @@ Executable clock CompiledObject: best MainIs: clock.ml BuildDepends: lambda-term + Build$: flag(examples) Executable buttons Path: examples @@ -140,6 +151,7 @@ Executable buttons CompiledObject: best MainIs: buttons.ml BuildDepends: lambda-term + Build$: flag(examples) Executable focus Path: examples @@ -147,6 +159,7 @@ Executable focus CompiledObject: best MainIs: focus.ml BuildDepends: lambda-term + Build$: flag(examples) Executable checkbuttons Path: examples @@ -154,6 +167,7 @@ Executable checkbuttons CompiledObject: best MainIs: checkbuttons.ml BuildDepends: lambda-term + Build$: flag(examples) Executable radiobuttons Path: examples @@ -161,6 +175,7 @@ Executable radiobuttons CompiledObject: best MainIs: radiobuttons.ml BuildDepends: lambda-term + Build$: flag(examples) Executable shell Path: examples @@ -168,6 +183,7 @@ Executable shell CompiledObject: best MainIs: shell.ml BuildDepends: lambda-term, str + Build$: flag(examples) Executable repl Path: examples @@ -175,6 +191,7 @@ Executable repl CompiledObject: best MainIs: repl.ml BuildDepends: lambda-term + Build$: flag(examples) Executable modal Path: examples @@ -182,6 +199,7 @@ Executable modal CompiledObject: best MainIs: modal.ml BuildDepends: lambda-term + Build$: flag(examples) Executable "read-password" Path: examples @@ -189,6 +207,7 @@ Executable "read-password" CompiledObject: best MainIs: read_password.ml BuildDepends: lambda-term + Build$: flag(examples) Executable "read-yes-no" Path: examples @@ -196,6 +215,7 @@ Executable "read-yes-no" CompiledObject: best MainIs: read_yes_no.ml BuildDepends: lambda-term + Build$: flag(examples) Executable "editor" Path: examples @@ -203,6 +223,7 @@ Executable "editor" CompiledObject: best MainIs: editor.ml BuildDepends: lambda-term + Build$: flag(examples) # +-------------------------------------------------------------------+ # | Utils | @@ -225,6 +246,7 @@ Executable "history-stress-test" CompiledObject: best MainIs: history_stress_test.ml BuildDepends: lambda-term + Build$: flag(tests) # +-------------------------------------------------------------------+ # | Doc | diff --git a/myocamlbuild.ml b/myocamlbuild.ml index c51628c..7576995 100644 --- a/myocamlbuild.ml +++ b/myocamlbuild.ml @@ -1,5 +1,5 @@ (* OASIS_START *) -(* DO NOT EDIT (digest: 2123244a57a4fbf637450a114eabed6a) *) +(* DO NOT EDIT (digest: 688fea53affad41b244065fe8932cbf7) *) module OASISGettext = struct (* # 22 "src/oasis/OASISGettext.ml" *) @@ -29,6 +29,166 @@ module OASISGettext = struct end +module OASISString = struct +(* # 22 "src/oasis/OASISString.ml" *) + + + (** Various string utilities. + + Mostly inspired by extlib and batteries ExtString and BatString libraries. + + @author Sylvain Le Gall + *) + + + let nsplitf str f = + if str = "" then + [] + else + let buf = Buffer.create 13 in + let lst = ref [] in + let push () = + lst := Buffer.contents buf :: !lst; + Buffer.clear buf + in + let str_len = String.length str in + for i = 0 to str_len - 1 do + if f str.[i] then + push () + else + Buffer.add_char buf str.[i] + done; + push (); + List.rev !lst + + + (** [nsplit c s] Split the string [s] at char [c]. It doesn't include the + separator. + *) + let nsplit str c = + nsplitf str ((=) c) + + + let find ~what ?(offset=0) str = + let what_idx = ref 0 in + let str_idx = ref offset in + while !str_idx < String.length str && + !what_idx < String.length what do + if str.[!str_idx] = what.[!what_idx] then + incr what_idx + else + what_idx := 0; + incr str_idx + done; + if !what_idx <> String.length what then + raise Not_found + else + !str_idx - !what_idx + + + let sub_start str len = + let str_len = String.length str in + if len >= str_len then + "" + else + String.sub str len (str_len - len) + + + let sub_end ?(offset=0) str len = + let str_len = String.length str in + if len >= str_len then + "" + else + String.sub str 0 (str_len - len) + + + let starts_with ~what ?(offset=0) str = + let what_idx = ref 0 in + let str_idx = ref offset in + let ok = ref true in + while !ok && + !str_idx < String.length str && + !what_idx < String.length what do + if str.[!str_idx] = what.[!what_idx] then + incr what_idx + else + ok := false; + incr str_idx + done; + if !what_idx = String.length what then + true + else + false + + + let strip_starts_with ~what str = + if starts_with ~what str then + sub_start str (String.length what) + else + raise Not_found + + + let ends_with ~what ?(offset=0) str = + let what_idx = ref ((String.length what) - 1) in + let str_idx = ref ((String.length str) - 1) in + let ok = ref true in + while !ok && + offset <= !str_idx && + 0 <= !what_idx do + if str.[!str_idx] = what.[!what_idx] then + decr what_idx + else + ok := false; + decr str_idx + done; + if !what_idx = -1 then + true + else + false + + + let strip_ends_with ~what str = + if ends_with ~what str then + sub_end str (String.length what) + else + raise Not_found + + + let replace_chars f s = + let buf = Buffer.create (String.length s) in + String.iter (fun c -> Buffer.add_char buf (f c)) s; + Buffer.contents buf + + let lowercase_ascii = + replace_chars + (fun c -> + if (c >= 'A' && c <= 'Z') then + Char.chr (Char.code c + 32) + else + c) + + let uncapitalize_ascii s = + if s <> "" then + (lowercase_ascii (String.sub s 0 1)) ^ (String.sub s 1 ((String.length s) - 1)) + else + s + + let uppercase_ascii = + replace_chars + (fun c -> + if (c >= 'a' && c <= 'z') then + Char.chr (Char.code c - 32) + else + c) + + let capitalize_ascii s = + if s <> "" then + (uppercase_ascii (String.sub s 0 1)) ^ (String.sub s 1 ((String.length s) - 1)) + else + s + +end + module OASISExpr = struct (* # 22 "src/oasis/OASISExpr.ml" *) @@ -129,7 +289,7 @@ module OASISExpr = struct end -# 132 "myocamlbuild.ml" +# 292 "myocamlbuild.ml" module BaseEnvLight = struct (* # 22 "src/base/BaseEnvLight.ml" *) @@ -234,7 +394,7 @@ module BaseEnvLight = struct end -# 237 "myocamlbuild.ml" +# 397 "myocamlbuild.ml" module MyOCamlbuildFindlib = struct (* # 22 "src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml" *) @@ -516,7 +676,7 @@ module MyOCamlbuildBase = struct | nm, [], intf_modules -> ocaml_lib nm; let cmis = - List.map (fun m -> (String.uncapitalize m) ^ ".cmi") + List.map (fun m -> (OASISString.uncapitalize_ascii m) ^ ".cmi") intf_modules in dep ["ocaml"; "link"; "library"; "file:"^nm^".cma"] cmis | nm, dir :: tl, intf_modules -> @@ -529,7 +689,7 @@ module MyOCamlbuildBase = struct ["compile"; "infer_interface"; "doc"]) tl; let cmis = - List.map (fun m -> dir^"/"^(String.uncapitalize m)^".cmi") + List.map (fun m -> dir^"/"^(OASISString.uncapitalize_ascii m)^".cmi") intf_modules in dep ["ocaml"; "link"; "library"; "file:"^dir^"/"^nm^".cma"] cmis) @@ -603,7 +763,7 @@ module MyOCamlbuildBase = struct end -# 606 "myocamlbuild.ml" +# 766 "myocamlbuild.ml" open Ocamlbuild_plugin;; let package_default = { @@ -657,6 +817,6 @@ let conf = {MyOCamlbuildFindlib.no_automatic_syntax = false} let dispatch_default = MyOCamlbuildBase.dispatch_default conf package_default;; -# 661 "myocamlbuild.ml" +# 821 "myocamlbuild.ml" (* OASIS_STOP *) Ocamlbuild_plugin.dispatch dispatch_default;; diff --git a/setup.ml b/setup.ml index c0f159c..f66e59a 100644 --- a/setup.ml +++ b/setup.ml @@ -8,9 +8,9 @@ *) (* OASIS_START *) -(* DO NOT EDIT (digest: 316bb32f794203be5e3c389026b214cc) *) +(* DO NOT EDIT (digest: 7acc2e09d993c274275f66ffd44ae5f2) *) (* - Regenerated by OASIS v0.4.5 + Regenerated by OASIS v0.4.6 Visit http://oasis.forge.ocamlcore.org for more information and documentation about functions used in this file. *) @@ -253,6 +253,33 @@ module OASISString = struct String.iter (fun c -> Buffer.add_char buf (f c)) s; Buffer.contents buf + let lowercase_ascii = + replace_chars + (fun c -> + if (c >= 'A' && c <= 'Z') then + Char.chr (Char.code c + 32) + else + c) + + let uncapitalize_ascii s = + if s <> "" then + (lowercase_ascii (String.sub s 0 1)) ^ (String.sub s 1 ((String.length s) - 1)) + else + s + + let uppercase_ascii = + replace_chars + (fun c -> + if (c >= 'a' && c <= 'z') then + Char.chr (Char.code c - 32) + else + c) + + let capitalize_ascii s = + if s <> "" then + (uppercase_ascii (String.sub s 0 1)) ^ (String.sub s 1 ((String.length s) - 1)) + else + s end @@ -322,19 +349,15 @@ module OASISUtils = struct let compare_csl s1 s2 = - String.compare (String.lowercase s1) (String.lowercase s2) + String.compare (OASISString.lowercase_ascii s1) (OASISString.lowercase_ascii s2) module HashStringCsl = Hashtbl.Make (struct type t = string - - let equal s1 s2 = - (String.lowercase s1) = (String.lowercase s2) - - let hash s = - Hashtbl.hash (String.lowercase s) + let equal s1 s2 = (compare_csl s1 s2) = 0 + let hash s = Hashtbl.hash (OASISString.lowercase_ascii s) end) module SetStringCsl = @@ -372,7 +395,7 @@ module OASISUtils = struct else buf in - String.lowercase buf + OASISString.lowercase_ascii buf end @@ -478,7 +501,7 @@ module PropList = struct order = Queue.create (); name_norm = (if case_insensitive then - String.lowercase + OASISString.lowercase_ascii else fun s -> s); } @@ -1829,13 +1852,13 @@ module OASISUnixPath = struct let capitalize_file f = let dir = dirname f in let base = basename f in - concat dir (String.capitalize base) + concat dir (OASISString.capitalize_ascii base) let uncapitalize_file f = let dir = dirname f in let base = basename f in - concat dir (String.uncapitalize base) + concat dir (OASISString.uncapitalize_ascii base) end @@ -2897,7 +2920,7 @@ module OASISFileUtil = struct end -# 2893 "setup.ml" +# 2916 "setup.ml" module BaseEnvLight = struct (* # 22 "src/base/BaseEnvLight.ml" *) @@ -3002,7 +3025,7 @@ module BaseEnvLight = struct end -# 2998 "setup.ml" +# 3021 "setup.ml" module BaseContext = struct (* # 22 "src/base/BaseContext.ml" *) @@ -5413,7 +5436,7 @@ module BaseSetup = struct end -# 5409 "setup.ml" +# 5432 "setup.ml" module InternalConfigurePlugin = struct (* # 22 "src/plugins/internal/InternalConfigurePlugin.ml" *) @@ -5852,8 +5875,8 @@ module InternalInstallPlugin = struct let make_fnames modul sufx = List.fold_right begin fun sufx accu -> - (String.capitalize modul ^ sufx) :: - (String.uncapitalize modul ^ sufx) :: + (OASISString.capitalize_ascii modul ^ sufx) :: + (OASISString.uncapitalize_ascii modul ^ sufx) :: accu end sufx @@ -6277,7 +6300,7 @@ module InternalInstallPlugin = struct end -# 6273 "setup.ml" +# 6296 "setup.ml" module OCamlbuildCommon = struct (* # 22 "src/plugins/ocamlbuild/OCamlbuildCommon.ml" *) @@ -6655,7 +6678,7 @@ module OCamlbuildDocPlugin = struct end -# 6651 "setup.ml" +# 6674 "setup.ml" module CustomPlugin = struct (* # 22 "src/plugins/custom/CustomPlugin.ml" *) @@ -6803,7 +6826,7 @@ module CustomPlugin = struct end -# 6799 "setup.ml" +# 6822 "setup.ml" open OASISTypes;; let setup_t = @@ -7014,7 +7037,7 @@ let setup_t = alpha_features = []; beta_features = []; name = "lambda-term"; - version = "1.10"; + version = "1.10.1"; license = OASISLicense.DEP5License (OASISLicense.DEP5Unit @@ -7076,6 +7099,16 @@ let setup_t = files_ab = ["src/lTerm_config.h.ab"]; sections = [ + Flag + ({ + cs_name = "examples"; + cs_data = PropList.Data.create (); + cs_plugin_data = [] + }, + { + flag_description = Some "build examples"; + flag_default = [(OASISExpr.EBool true, true)] + }); Library ({ cs_name = "lambda-term"; @@ -7167,7 +7200,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7190,7 +7227,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7213,7 +7254,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7236,7 +7281,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7259,7 +7308,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7282,7 +7335,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7305,7 +7362,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7328,7 +7389,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7351,7 +7416,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7374,7 +7443,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7397,7 +7470,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7420,7 +7497,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7447,7 +7528,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7470,7 +7555,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7493,7 +7582,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7516,7 +7609,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7539,7 +7636,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "examples", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "examples"; bs_compiled_object = Best; @@ -7588,7 +7689,11 @@ let setup_t = cs_plugin_data = [] }, { - bs_build = [(OASISExpr.EBool true, true)]; + bs_build = + [ + (OASISExpr.EBool true, false); + (OASISExpr.EFlag "tests", true) + ]; bs_install = [(OASISExpr.EBool true, false)]; bs_path = "tests"; bs_compiled_object = Best; @@ -7772,8 +7877,8 @@ let setup_t = plugin_data = [] }; oasis_fn = Some "_oasis"; - oasis_version = "0.4.5"; - oasis_digest = Some "\215\237\227S\214\n~]A\203\157\216\129\2342\028"; + oasis_version = "0.4.6"; + oasis_digest = Some "\025\160a\161ZQ\147,\231\024\180\017\021\216B;"; oasis_exec = None; oasis_setup_args = []; setup_update = false @@ -7781,7 +7886,7 @@ let setup_t = let setup () = BaseSetup.setup setup_t;; -# 7778 "setup.ml" +# 7883 "setup.ml" (* OASIS_STOP *) let () = setup ();; diff --git a/src/META b/src/META index 99046b9..9ce1bf9 100644 --- a/src/META +++ b/src/META @@ -1,6 +1,6 @@ # OASIS_START -# DO NOT EDIT (digest: 429f8dca3746dd89ef69ccc4e019bb30) -version = "1.10" +# DO NOT EDIT (digest: e377397d05c6a35b858fec2efbec65e4) +version = "1.10.1" description = "Cross-platform library for terminal manipulation" requires = "lwt lwt.unix lwt.react zed" archive(byte) = "lambda-term.cma" diff --git a/src/lTerm_read_line.ml b/src/lTerm_read_line.ml index 3644e7a..d35a060 100644 --- a/src/lTerm_read_line.ml +++ b/src/lTerm_read_line.ml @@ -787,7 +787,9 @@ object(self) (* The height of the displayed material. *) val mutable resolver = None - (* The current resolver for resolving input sequences. *) + (* The current resolver for resolving input sequences. *) + + val mutable running = true initializer completion_start <- ( @@ -826,7 +828,11 @@ object(self) draw_queued <- true; Lwt.pause () >>= fun () -> draw_queued <- false; - Lwt_mutex.with_lock draw_mutex (fun () -> self#draw_update) + Lwt_mutex.with_lock draw_mutex (fun () -> + if running then + self#draw_update + else + return ()) end method draw_update = @@ -1221,12 +1227,12 @@ object(self) (* Update the size with the current size. *) set_size (LTerm.size term); - let running = ref true in + running <- true; (* Redraw everything when needed. *) let event = E.map_p - (fun () -> if !running then self#queue_draw_update else return ()) + (fun () -> if running then self#queue_draw_update else return ()) (E.select [ E.stamp (S.changes size) (); Zed_edit.update self#edit [Zed_edit.cursor self#context]; @@ -1257,7 +1263,7 @@ object(self) self#queue_draw_update >>= fun () -> self#loop) (fun exn -> - running := false; + running <- false; E.stop event; Lwt_mutex.with_lock draw_mutex (fun () -> self#draw_failure) >>= fun () -> Lwt.fail exn)) @@ -1268,7 +1274,7 @@ object(self) | None -> return ()) end >>= fun result -> - running := false; + running <- false; E.stop event; Lwt_mutex.with_lock draw_mutex (fun () -> self#draw_success) >>= fun () -> return result -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/lambda-term.git _______________________________________________ Pkg-ocaml-maint-commits mailing list Pkg-ocaml-maint-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-ocaml-maint-commits