package ecaml

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

A typeful interface for calling Elisp, as external does for C. E.g.,

module F = struct

  let not : bool -> bool = Q.not <: bool @-> return bool

  let about_emacs : unit -> unit = Q.about_emacs <: nullary @-> return nil

end

let non f = Fn.compose F.not f

let about_emacs = F.about_emacs

The F convention is borrowed from the Emacs C source.

type 'a t
val return : 'a Ecaml_value.Value.Type.t -> 'a t
val nullary : unit Ecaml_value.Value.Type.t
val (<:) : Symbol.t -> 'a t -> 'a

Q.foo <: ... types an Elisp function, like how foo :> t types an OCaml value.

val (@->) : 'a Ecaml_value.Value.Type.t -> 'b t -> ('a -> 'b) t
include Ecaml_value.Value.Type.S
val with_of_value_exn : 'a Ecaml_value.Value.Type.t -> (Ecaml_value.Value.t -> 'a) -> 'a Ecaml_value.Value.Type.t
val bool : bool Ecaml_value.Value.Type.t
val float : float Ecaml_value.Value.Type.t
val ignored : unit Ecaml_value.Value.Type.t
val string : string Ecaml_value.Value.Type.t
val string_cached : string Ecaml_value.Value.Type.t

string_cached is like string, except it uses of_utf8_bytes_cached.

val unit : unit Ecaml_value.Value.Type.t
val option : ?wrapped:bool -> 'a Ecaml_value.Value.Type.t -> 'a option Ecaml_value.Value.Type.t

The representation of an option type's values in Elisp can be "wrapped" or "unwrapped". In either case, None is represented as nil. The unrwapped representation of Some v is the representation of v, whereas the wrapped representation is cons v nil. Wrapping is necessary if nil is a representation of some value v_nil, in order to distinguish between the representation of None and Some v_nil.

Represent a tuple (a,b) as the elisp cons cell (a . b)

Represent a tuple (a,b) as the elisp list '(a b)

val sexpable : (module Core_kernel.Sexpable with type t = 'a) -> name:Core_kernel.Sexp.t -> 'a Ecaml_value.Value.Type.t

Embed a sexpable ocaml type, so we can save values of the type in emacs, e.g. as buffer local variables

Embed values of type 'a. Note that unlike other functions above, the values are not transformed, so this can be used to preserve state in emacs. More precisely, this following returns true:

let var = Var.create (Value.Type.caml_embed type_id) in
Current_buffer.set_value var v;
phys_equal v (Current_buffer.value_exn var)
val path_list : string list Ecaml_value.Value.Type.t

A list of directories. Each element is a string (directory name) or nil (try default directory). nil values are converted to ".", which has the same meaning.

module Private : sig ... end