Next: , Previous: , Up: Emacs Interface   [Contents][Index]


3.12.3 Usage

A Prolog process can be started by choosing Run Prolog from the Prolog menu, by typing C-c RET, or by typing M-x run-prolog. It is however not strictly necessary to start a Prolog process manually since it is automatically done when consulting or compiling, if needed. The process can be restarted (i.e. the old one is killed and a new one is created) by typing C-u C-c RET, in this case Emacs will also prompt for a Lisp list of extra parameters to pass on the command line.

Programs are run and debugged in the normal way, with terminal I/O via the *prolog* buffer. The most common debugging predicates are available from the menu or via key-bindings.

A particularly useful feature under the Emacs interface is source-linked debugging. This is enabled or disabled using the Prolog/Source-linked debugging menu entry. It can also be enabled by setting the Emacs variable prolog-use-sicstus-sd to t in ~/.emacs. Both these methods set the Prolog flag source_info to emacs. Its value should be emacs while loading the code to be debugged and while debugging. If so, then the debugger will display the source code location of the current goal when it prompts for a debugger command, by highlighting the current line. If source_info was off when the code was loaded, or if it was asserted or loaded from user, then the current goal will still be shown but out of context.

Note that if the code has been modified since it was last loaded, then Prolog’s line number information may be invalid. If this happens, then just reload the relevant buffer.

Another useful feature which is available for code loaded with source_info switched on is that the debugger can show the variable bindings for the current goal, its ancestors, and the clauses they occur in. The bindings are shown in a separate *Prolog Bindings* buffer. This is enabled by the C-c C-g command and disabled by the C-u C-c C-g command.

Yet another feature which is available for compiled code loaded with source_info switched on is code coverage highlighting (see Coverage Analysis). Highlighting of the current buffer is refreshed by the C-c C-o command and cleared by the C-u C-c C-o command.

Consultation and compilation is either done via the menu or with the following key-bindings:

C-c C-f

Consult file.

C-c C-b

Consult buffer.

C-c C-r

Consult region.

C-c C-p

Consult predicate.

C-c C-c f

Compile file.

C-c C-c b

Compile buffer.

C-c C-c r

Compile region.

C-c C-c p

Compile predicate.

The boundaries used when consulting and compiling predicates are the first and last clauses of the predicate the cursor is currently in.

Other useful key-bindings are:

M-a

Go to beginning of clause. Go to the previous clause if already at the beginning.

M-e

Go to end of clause. Go to the next clause if already at the end.

C-M-c

Mark clause.

C-M-a

Go to beginning of predicate.

C-M-e

Go to end of predicate.

C-M-h

Mark predicate.

M-{

Go to the previous paragraph (i.e. empty line).

M-}

Go to the next paragraph (i.e. empty line).

M-h

Mark paragraph.

C-M-n

Go to matching right parenthesis.

C-M-p

Go to matching left parenthesis.

M-;

Creates a comment at comment-column. This comment will always stay at this position when the line is indented, regardless of changes in the text earlier on the line, provided that prolog-align-comments-flag is set to t.

C-c C-t
C-u C-c C-t

Enable and disable creeping, respectively.

C-c C-d
C-u C-c C-d

Enable and disable leaping, respectively.

C-c C-z
C-u C-c C-z

Enable and disable zipping, respectively.

C-c C-g   since release 4.2
C-u C-c C-g   since release 4.2

Enable and disable bindings window, respectively. When enabled, SICStus will endeavor to show the variable bindings of the clause containing the current goal. C-c C-g splits the *prolog* window vertically and inserts the *Prolog Bindings* window, which shows the bindings and is updated upon every debugger command. C-u C-c C-g deletes the *Prolog Bindings* window.

C-c <   since release 4.3.2

Set the print depth for the bindings window as well as for the top level. Prompts for an integer value. Equivalent to the < top-level command; see Queries.

C-c C-o   since release 4.2
C-u C-c C-o   since release 4.2

Refresh and clear coverage highlighting for the current buffer, respectively. Lines containing coverage sites (see Coverage Analysis) will be highlighted in face pltrace-face-reached-det (defaults to green) if they were hit at least once and made no nondet calls with the execution profiler switched on; in face pltrace-face-reached-nondet (defaults to yellow) if they were hit at least once and made one or more nondet calls with the execution profiler switched on; otherwise, they will be highlighted in face pltrace-face-reached-not (defaults to red). Lines not containing coverage sites are not highlighted.

C-x SPC
C-u C-x SPC

Set and remove a line breakpoint. This uses the advanced debugger features; see Advanced Debugging.

C-c C-s

Insert the PredSpec of the current predicate into the code.

C-c C-n

Insert the template of the current predicate (name, parentheses, commas) into the code.

M-RET   since release 4.2

Insert a line break followed by the template of the current predicate into the code. This can be useful when writing recursive predicates or predicates with several clauses. See also the prolog-electric-dot-flag variable below.

C-c C-v a

Convert all variables in a region to anonymous variables. See also the prolog-electric-underscore-flag Emacs variable.

C-c ?

Help on predicate. This requires the SICStus info files to be installed. If the SICStus info files are installed in a nonstandard way, then you may have to change the Emacs variable prolog-info-predicate-index.

C-c RET   since release 4.2
C-u C-c RET   since release 4.2

Run Prolog. With the second variant, Emacs will prompt for a Lisp list of extra parameters to pass on the command line.

C-c C-c   since release 4.2

Interrupt Prolog. The same as typing ^C in a shell.

C-c C-\   since release 4.2

Kill Prolog. Immediately kills the process.



Send feedback on this subject.