Using Caml Light under Emacs

This chapter describes how Caml Light can be used in conjunction with Gnu Emacs version 19 (version 18 is also partially supported).

Unix:
The Emacs Lisp files implementing the Caml/Emacs interface are in contrib/camlmode in the distribution.

Mac:
The Caml/Emacs interface is not available.

PC:
The Caml/Emacs interface is not available.

Updating your .emacs

The following initializations must be added to your .emacs file:

(setq auto-mode-alist (cons '("\\.ml[iylp]?" . caml-mode) auto-mode-alist))
(autoload 'caml-mode "caml" "Major mode for editing Caml code." t)
(autoload 'run-caml "inf-caml" "Run an inferior Caml process." t)
(autoload 'camldebug "camldebug" "Run the Caml debugger." t)

The caml editing mode

The caml-mode function is a major editing mode for Caml source files. It provides the correct syntax tables, comment syntax, ... for the Caml language. An extremely crude indentation facility is provided, as well as a slightly enhanced next-error command (to display the location of a compilation error). The following key bindings are performed:

TAB (function caml-indent-command)
At the beginning of a line, indent that line like the line above. Successive TABs increase the indentation level by 2 spaces (by default; can be set with the caml-mode-indentation variable).

M-TAB (function caml-unindent-command)
Decrease the indentation level of the current phrase.

C-x ` (function caml-next-error)
Display the next compilation error, just as next-error does. In addition, it puts the point and the mark around the exact location of the error (the subexpression that caused the error). Under Emacs 19, that subexpression is also highlighted.

M-C-h (function caml-mark-phrase)
Mark the Caml phrase that contains the point: the point is put at the beginning of the phrase and the mark at the end. Phrases are delimited by ;; (the final double-semicolon). This function does not properly ignore ;; inside string literals or comments.

C-x SPC
When the Caml debugger is running as an inferior process (section 12.4 below), set a breakpoint at the current position of the point.

M-C-x or C-c C-e (function caml-eval-phrase)
When a Caml toplevel is running as an inferior process (section 12.3 below), send it the the Caml phrase that contains the point. The phrase will then be evaluated by the inferior toplevel as usual. The phrase is delimited by ;; as described for the caml-mark-phrase command.

C-c C-r (function caml-eval-region)
Send the region to a Caml toplevel running in an inferior process.

Running the toplevel as an inferior process

M-x run-caml starts a Caml toplevel with input and output in an Emacs buffer named *inferior-caml*. This gives you the full power of Emacs to edit the input to the Caml toplevel. An history of input lines is maintained, as in Shell mode. This includes the following commands (see the function comint-mode for a complete description):

RET
Send the current line to the toplevel.
M-n and M-p
Move to the next or previous line in the history.
M-r and M-s
Regexp search in the history.
C-c C-c
Send a break (interrupt signal) to the Caml toplevel.

Phrases can also be sent to the Caml toplevel for evaluation from any buffer in Caml mode, using M-C-x, C-c C-e or C-c C-r.

Running the debugger as an inferior process

The Caml debugger is started by the command M-x camldebug, with argument the name of the executable file progname to debug. Communication with the debugger takes place in an Emacs buffer named *camldebug-progname*. The editing and history facilities of Shell mode are available for interacting with the debugger.

In addition, Emacs displays the source files containing the current event (the current position in the program execution) and highlights the location of the event. This display is updated synchronously with the debugger action.

The following bindings for the most common debugger commands are available in the *camldebug-progname* buffer (see section 10.3 for a full explanation of the commands):

M-r
run command: execute the program forward.
M-s
step command: execute the program one step forward.
M-b
back command: execute the program one step backward.
M-l
last command: go back one step in the command history.
C-c >
down command: select the stack frame below the current frame.
C-c <
up command: select the stack frame above the current frame.
C-c C-f
finish command: run till the current function returns.

In a buffer in Caml editing mode, C-x SPC sets a breakpoint at the current position of the point.