add UTop.smart_accept
Ignore-this: 77af81a81ba18fbc0c16f34873f0dd5a darcs-hash:20110804143651-c41ad-307965f2bea7c3665165c968096404589a15968e
This commit is contained in:
parent
e541018eac
commit
1e561069cf
|
@ -49,6 +49,8 @@ type profile = Dark | Light
|
||||||
|
|
||||||
let profile, set_profile = S.create Dark
|
let profile, set_profile = S.create Dark
|
||||||
|
|
||||||
|
let smart_accept = ref true
|
||||||
|
|
||||||
let size = UTop_private.size
|
let size = UTop_private.size
|
||||||
|
|
||||||
let key_sequence = UTop_private.key_sequence
|
let key_sequence = UTop_private.key_sequence
|
||||||
|
|
|
@ -30,6 +30,11 @@ val profile : profile React.signal
|
||||||
val set_profile : profile -> unit
|
val set_profile : profile -> unit
|
||||||
(** Sets the profile of the terminal. *)
|
(** Sets the profile of the terminal. *)
|
||||||
|
|
||||||
|
val smart_accept : bool ref
|
||||||
|
(** If [true], then only lines terminated with ";;" will be sent to
|
||||||
|
ocaml, otherwise the input will always be sent to ocaml when the
|
||||||
|
user press Enter. It default to [true]. *)
|
||||||
|
|
||||||
val size : LTerm_geom.size React.signal
|
val size : LTerm_geom.size React.signal
|
||||||
(** The current size of the terminal. *)
|
(** The current size of the terminal. *)
|
||||||
|
|
||||||
|
|
|
@ -111,6 +111,11 @@ let rbrace = UChar.of_char '}'
|
||||||
let lbracket = UChar.of_char '['
|
let lbracket = UChar.of_char '['
|
||||||
let rbracket = UChar.of_char ']'
|
let rbracket = UChar.of_char ']'
|
||||||
|
|
||||||
|
let rec last = function
|
||||||
|
| [] -> None
|
||||||
|
| [x] -> Some x
|
||||||
|
| _ :: l -> last l
|
||||||
|
|
||||||
class read_line ~term ~prompt =
|
class read_line ~term ~prompt =
|
||||||
let pending =
|
let pending =
|
||||||
match !pending with
|
match !pending with
|
||||||
|
@ -120,7 +125,21 @@ class read_line ~term ~prompt =
|
||||||
let pending_length = Zed_utf8.length pending in
|
let pending_length = Zed_utf8.length pending in
|
||||||
object(self)
|
object(self)
|
||||||
inherit LTerm_read_line.read_line ~history:!history () as super
|
inherit LTerm_read_line.read_line ~history:!history () as super
|
||||||
inherit [Zed_utf8.t] LTerm_read_line.term term
|
inherit [Zed_utf8.t] LTerm_read_line.term term as super_term
|
||||||
|
|
||||||
|
method exec = function
|
||||||
|
| LTerm_read_line.Accept :: actions -> begin
|
||||||
|
Zed_macro.add self#macro LTerm_read_line.Accept;
|
||||||
|
let tokens = UTop_lexer.lex_string (pending ^ Zed_rope.to_string (Zed_edit.text self#edit)) in
|
||||||
|
match last tokens with
|
||||||
|
| Some (Symbol, _, _, ";;") ->
|
||||||
|
return self#eval
|
||||||
|
| _ ->
|
||||||
|
self#insert (UChar.of_char '\n');
|
||||||
|
self#exec actions
|
||||||
|
end
|
||||||
|
| actions ->
|
||||||
|
super_term#exec actions
|
||||||
|
|
||||||
method stylise last =
|
method stylise last =
|
||||||
let styled, position = super#stylise last in
|
let styled, position = super#stylise last in
|
||||||
|
|
Loading…
Reference in New Issue