utop/src/lib/uTop.mli

310 lines
9.5 KiB
OCaml

(*
* uTop.mli
* --------
* Copyright : (c) 2011, Jeremie Dimino <jeremie@dimino.org>
* 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. *)
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 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}. *)
(** Syntax. *)
type syntax =
| Normal
(** No camlp4. *)
| Camlp4o
(** Camlp4, original syntax. *)
| Camlp4r
(** Camlp4, revised syntax. *)
val syntax : syntax signal
(** The syntax in use. If it is {!Camlp4o} or {!Camlp4r} quotations
are recognized. It is modified when you type [#camlp4o] or
[#camlp4r]. At the beginning it is {!Normal}. *)
val get_syntax : unit -> syntax
(** Returns the current value of {!syntax}. *)
val set_syntax : syntax -> unit
(** Changes the syntax used in utop. If the syntax is the same as
the current one, it does nothing. Otherwise it loads camlp4 and
setup several configuration variables.
Notes:
- the syntax can only be changed once. Once you set it to
{!Camlp4o} or {!Camlp4r} you cannot change it again.
- Typing [#camlp4o] is the same as calling [set_syntax Camlp4o].
- Typing [#camlp4r] is the same as calling [set_syntax Camlp4r]. *)
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}. *)
(** {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. *)
(** {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) Lwt_sequence.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 -> ((Camlp4.PreCast.Syntax.Ast.str_item list * Camlp4.PreCast.Syntax.Loc.t option) Camlp4.PreCast.Syntax.Gram.Entry.t) result) ref*)
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]. *)
(**/**)
(* 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) Lwt_sequence.t
val at_new_prompt : (unit -> unit) -> unit