(* * uTop.mli * -------- * Copyright : (c) 2011, Jeremie Dimino * Licence : BSD3 * * This file is a part of utop. *) (** UTop configuration. *) open React val version : string (** Version of utop. *) val count : int React.signal (** The number of commands already executed. *) val keywords : Set.Make(String).t ref (** The set of OCaml keywords. *) val add_keyword : string -> unit (** Add a new OCaml keyword. *) val require : string list -> unit (** Load all the given findlib packages *) type ui = Console | Emacs (** The user interface in use. *) val get_ui : unit -> ui (** Returns the user interface in use. *) val hide_reserved : bool signal (** If [true] (the default) identifiers starting with a '_' will be hidden from the output. i.e. the following phrase won't produces any output: {[ let _x = 1 ]} This is for hidding variables created by code generators for internal use. It can also be set/unset by the command line options [-hide-reserved] and [-show-reserved]. *) val get_hide_reserved : unit -> bool (** Returns the value of {!hide_reserved}. *) val set_hide_reserved : bool -> unit (** Modifies {!hide_reserved}. *) val create_implicits : bool signal (** If [true] (not the default) expressions entered in the toplevel are automatically bound, for example: {[ # 3 + 4;; _0 : int = 7 # _0 + 10;; _1 : int = 17 ]} *) val get_create_implicits : unit -> bool (** Returns the value of {!create_implicits}. *) val set_create_implicits : bool -> unit (** Modifies {!create_implicits}. *) val topfind_verbose : bool signal (** If [false] (the default) messages from findlib are hidden. This is only effective with findlib >= 1.4. *) val get_topfind_verbose : unit -> bool (** Returns the value of {!topfind_verbose}. *) val set_topfind_verbose : bool -> unit (** Modifies {!topfind_verbose}. *) val topfind_log : string list signal (** List of messages logged by findlib since the beginning of the session. This requires findlib >= 1.4. *) val show_box : bool signal (** If [true] (the default) the completion bar is displayed. *) val get_show_box : unit -> bool (** Returns the value of {!show_box}. *) val set_show_box : bool -> unit (** Modifies {!show_box}. *) val set_margin_function : (LTerm_geom.size -> int option) -> unit (** Margin of the standard and error formatters as a function of the screen size. The default is: {[ fun size -> Some (min 80 size.cols) ]} *) val phrase_terminator : string signal (** The phrase terminator. It is ";;" by default and ";" when you use revised syntax. *) val get_phrase_terminator : unit -> string (** Returns the value of {!phrase_terminator}. *) val set_phrase_terminator : string -> unit (** Modifies {!phrase_terminator}. *) val auto_run_lwt : bool signal (** If [true] (the default) toplevel lwt expressions are automatically run with [Lwt_main.run]. i.e. if you type: {[ Lwt_io.printl "Hello, world" ]} this will be replaced by: {[ Lwt_main.run (Lwt_io.printl "Hello, world") ]} *) val get_auto_run_lwt : unit -> bool (** Returns the value of {!auto_run_lwt}. *) val set_auto_run_lwt : bool -> unit (** Modifies {!auto_run_lwt}. *) val auto_run_async : bool signal (** If [true] (the default) toplevel Async expressions are automatically run with in a separate thread with [Thread_safe.block_on_async_exn]. i.e. if you type: {[ after (Time.Span.of_s 1.0) ]} this will be replaced by: {[ Thread_safe.block_on_async_exn (fun () -> after (Time.Span.of_s 1.0)) ]} *) val get_auto_run_async : unit -> bool (** Returns the value of {!auto_run_async}. *) val set_auto_run_async : bool -> unit (** Modifies {!auto_run_async}. *) val end_and_accept_current_phrase : LTerm_read_line.action (** Action that add the phrase terminator at the end of the current phrase and accepts it. For instance to avoid typing [;;], add this to your ~/.ocamlinit: {[ #require "lambda-term";; LTerm_read_line.bind [ { control = false; meta = false; shift = false; code = Enter } ] [ UTop.end_and_accept_current_phrase ] ]} *) (** External editor command. [None] for default. *) val external_editor : string signal val set_external_editor : string -> unit val get_external_editor : unit -> string (** {6 History} *) val history : LTerm_history.t (** The history used by utop. You can configure limits using the [LTerm_history] module. For example if you want to limit the history to 1000 line, add these lines to your ~/.ocamlinit file: {[ #require "lambda-term";; LTerm_history.set_max_entries UTop.history 1000;; ]} *) val history_file_name : string option ref (** Name of the history file. If [None], no history will be loaded or saved. *) val history_file_max_size : int option ref (** Maximum size of the history file. If [None] (the default) the maximum size of [history] will be used. *) val history_file_max_entries : int option ref (** Maximum entries to store in the history file. If [None] (the default) the maximum number of entries if [history] will be used. *) val stashable_session_history : UTop_history.t (** A history consisting of inputs and resulting values or errors of the current session. Because stashing is supposed to produce a valid OCaml file which will behave roughly the same as the console, it is best if this history never gets truncated. While this will certainly lead to a slight memory leaking problem, UTop sessions are rarely long enough to make it a serious issue. *) (** {6 Console specific configuration} *) type profile = Dark | Light (** Profile for colors. *) val profile : profile React.signal (** The color profile. It defaults to {!Dark}. This is used by the default prompt to choose colors. *) val set_profile : profile -> unit (** Sets the color profile. *) val size : LTerm_geom.size React.signal (** The current size of the terminal. This is used only in the console UI. *) val key_sequence : LTerm_key.t list React.signal (** The current key sequence entered by the user. This is used only in the console UI. *) val time : float ref (** The time of the beginning of the current command. *) val prompt : LTerm_text.t React.signal ref (** The prompt. *) (** {6 Hooks} *) val new_command_hooks : (unit -> unit) LTerm_dlist.t (** Functions called before each new command. *) val at_new_command : (unit -> unit) -> unit (** [at_new_command f] adds [f] to the hooks executed before each new commands. *) (** {6 Parsing} *) type location = int * int (** Type of a string-location. It is composed of a start and stop offsets (in bytes). *) (** Result of a function processing a programx. *) type 'a result = | Value of 'a (** The function succeeded and returned this value. *) | Error of location list * string (** The function failed. Arguments are a list of locations to highlight in the source and an error message. *) exception Need_more (** Exception raised by a parser when it need more data. *) val parse_use_file : (string -> bool -> Parsetree.toplevel_phrase list result) ref val parse_use_file_default : string -> bool -> Parsetree.toplevel_phrase list result (** The default parser for toplevel regions. It uses the standard ocaml parser. *) val parse_toplevel_phrase : (string -> bool -> Parsetree.toplevel_phrase result) ref (** [parse_toplevel_phrase] is the function used to parse a phrase typed in the toplevel. Its arguments are: - [input]: the string to parse - [eos_is_error] If [eos_is_error] is [true] and the parser reach the end of input, then {!Parse_failure} should be returned. If [eos_is_error] is [false] and the parser reach the end of input, the exception {!Need_more} must be thrown. Except for {!Need_more}, the function must not raise any exception. *) val parse_toplevel_phrase_default : string -> bool -> Parsetree.toplevel_phrase result (** The default parser for toplevel phrases. It uses the standard ocaml parser. *) val parse_default : (Lexing.lexbuf -> 'a) -> string -> bool -> 'a result (** The default parser. It uses the standard ocaml parser. *) val input_name : string (** The name you must use in location to let ocaml know that it is from the toplevel. *) val lexbuf_of_string : bool ref -> string -> Lexing.lexbuf (** [lexbuf_of_string eof str] is the same as [Lexing.from_string str] except that if the lexer reach the end of [str] then [eof] is set to [true]. *) (** {6 Helpers} *) val get_message : (Format.formatter -> 'a -> unit) -> 'a -> string (** [get_message printer x] applies [printer] on [x] and returns everything it prints as a string. *) val get_ocaml_error_message : exn -> location * string (** [get_ocaml_error_message exn] returns the location and error message for the exception [exn] which must be an exception from the compiler. *) val check_phrase : Parsetree.toplevel_phrase -> (location list * string) option (** [check_phrase phrase] checks that [phrase] can be executed without typing or compilation errors. It returns [None] if [phrase] is OK and an error message otherwise. If the result is [None] it is guaranteed that [Toploop.execute_phrase] won't raise any exception. *) val collect_formatters : Buffer.t -> Format.formatter list -> (unit -> 'a) -> 'a (** [collect_formatters buf pps f] executes [f] and redirect everything it prints on [pps] to [buf]. *) val discard_formatters : Format.formatter list -> (unit -> 'a) -> 'a (** [discard_formatters pps f] executes [f], dropping everything it prints on [pps]. *) val split_words : string -> string list (** {6 compiler-libs reexports} *) val get_load_path : unit -> string list val set_load_path : string list -> unit (** [get_load_path] and [set_load_path] manage the include directories. The internal variable contains the list of directories added by findlib-required packages and [#directory] directives. *) (**/**) (* These variables are not used and deprecated: *) val prompt_continue : LTerm_text.t React.signal ref val prompt_comment : LTerm_text.t React.signal ref val smart_accept : bool ref val new_prompt_hooks : (unit -> unit) LTerm_dlist.t val at_new_prompt : (unit -> unit) -> unit