prolog

Homepage: https://www.gnu.org/software/emacs

Author: * See below for more details

Summary

Major mode for Prolog (and Mercury)

Commentary

This package provides a major mode for editing Prolog code, with
all the bells and whistles one would expect, including syntax
highlighting and auto indentation.  It can also send regions to an
inferior Prolog process.

Some settings you may wish to use:

(setq prolog-system 'swi)  ; optional, the system you are using;
                           ; see `prolog-system' below for possible values
(setq auto-mode-alist (append '(("\\.pl\\'" . prolog-mode)
                                ("\\.m\\'" . mercury-mode))
                               auto-mode-alist))

The last expression above makes sure that files ending with .pl
are assumed to be Prolog files and not Perl, which is the default
Emacs setting.  If this is not wanted, remove this line.  It is then
necessary to either

 o  insert in your Prolog files the following comment as the first line:

      % -*- Mode: Prolog -*-

    and then the file will be open in Prolog mode no matter its
    extension, or

 o  manually switch to prolog mode after opening a Prolog file, by typing
    M-x prolog-mode.

If the command to start the prolog process ('sicstus', 'pl' or
'swipl' for SWI prolog, etc.) is not available in the default path,
then it is necessary to set the value of the environment variable
EPROLOG to a shell command to invoke the prolog process.
You can also customize the variable
`prolog-program-name' (in the group `prolog-inferior') and provide
a full path for your Prolog system (swi, scitus, etc.).

Note: I (Stefan, the current maintainer) work under XEmacs.  Future
  developments will thus be biased towards XEmacs (OK, I admit it,
  I am biased towards XEmacs in general), though I will do my best
  to keep the GNU Emacs compatibility.  So if you work under Emacs
  and see something that does not work do drop me a line, as I have
  a smaller chance to notice this kind of bugs otherwise.
 [The above comment dates from 2011.]

Changelog:

Version 1.22:
 o  Allowed both 'swipl' and 'pl' as names for the SWI Prolog
    interpreter.
 o  Atoms that start a line are not blindly colored as
    predicates.  Instead we check that they are followed by ( or
    :- first.  Patch suggested by Guy Wiener.
Version 1.21:
 o  Cleaned up the code that defines faces.  The missing face
    warnings on some Emacsen should disappear.
Version 1.20:
 o  Improved the handling of clause start detection and multi-line
    comments: `prolog-clause-start' no longer finds non-predicate
    (e.g., capitalized strings) beginning of clauses.
    `prolog-tokenize' recognizes when the end point is within a
    multi-line comment.
Version 1.19:
 o  Minimal changes for Aquamacs inclusion and in general for
    better coping with finding the Prolog executable.  Patch
    provided by David Reitter
Version 1.18:
 o  Fixed syntax highlighting for clause heads that do not begin at
    the beginning of the line.
 o  Fixed compilation warnings under Emacs.
 o  Updated the email address of the current maintainer.
Version 1.17:
 o  Minor indentation fix (patch by Markus Triska)
 o  `prolog-underscore-wordchar-flag' defaults now to nil (more
    consistent to other Emacs modes)
Version 1.16:
 o  Eliminated a possible compilation warning.
Version 1.15:
 o  Introduced three new customizable variables: electric colon
    (`prolog-electric-colon-flag', default nil), electric dash
    (`prolog-electric-dash-flag', default nil), and a possibility
    to prevent the predicate template insertion from adding commas
    (`prolog-electric-dot-full-predicate-template', defaults to t
    since it seems quicker to me to just type those commas).  A
    trivial adaptation of a patch by Markus Triska.
 o  Improved the behavior of electric if-then-else to only skip
    forward if the parenthesis/semicolon is preceded by
    whitespace.  Once more a trivial adaptation of a patch by
    Markus Triska.
Version 1.14:
 o  Cleaned up align code.  `prolog-align-flag' is eliminated (since
    on a second thought it does not do anything useful).  Added key
    binding (C-c C-a) and menu entry for alignment.
 o  Condensed regular expressions for lower and upper case
    characters (GNU Emacs seems to go over the regexp length limit
    with the original form).  My code on the matter was improved
    considerably by Markus Triska.
 o  Fixed `prolog-insert-spaces-after-paren' (which used an
    uninitialized variable).
 o  Minor changes to clean up the code and avoid some implicit
    package requirements.
Version 1.13:
 o  Removed the use of `map-char-table' in `prolog-build-case-strings'
    which appears to cause problems in (at least) Emacs 23.0.0.1.
 o  Added if-then-else indentation + corresponding electric
    characters.  New customization: `prolog-electric-if-then-else-flag'
 o  Align support (requires `align').  New customization:
    `prolog-align-flag'.
 o  Temporary consult files have now the same name throughout the
    session.  This prevents issues with reconsulting a buffer
    (this event is no longer passed to Prolog as a request to
    consult a new file).
 o  Adaptive fill mode is now turned on.  Comment indentation is
    still worse than it could be though, I am working on it.
 o  Improved filling and auto-filling capabilities.  Now block
    comments should be [auto-]filled correctly most of the time;
    the following pattern in particular is worth noting as being
    filled correctly:
         % some comment here that goes beyond the
                         % rightmost column, possibly combined with
                         % subsequent comment lines
 o  `prolog-char-quote-workaround' now defaults to nil.
 o  Note: Many of the above improvements have been suggested by
    Markus Triska, who also provided useful patches on the matter
    when he realized that I was slow in responding.  Many thanks.
Version 1.11 / 1.12
 o  GNU Emacs compatibility fix for paragraph filling (fixed
    incorrectly in 1.11, fix fixed in 1.12).
Version 1.10
 o  Added paragraph filling in comment blocks and also correct auto
    filling for comments.
 o  Fixed the possible "Regular expression too big" error in
    `prolog-electric-dot'.
Version 1.9
 o  Parenthesis expressions are now indented by default so that
    components go one underneath the other, just as for compound
    terms.  You can use the old style (the second and subsequent
    lines being indented to the right in a parenthesis expression)
    by setting the customizable variable `prolog-paren-indent-p'
    (group "Prolog Indentation") to t.
 o  (Somehow awkward) handling of the 0' character escape
    sequence.  I am looking into a better way of doing it but
    prospects look bleak.  If this breaks things for you please let
    me know and also set the `prolog-char-quote-workaround' (group
    "Prolog Other") to nil.
Version 1.8
 o  Key binding fix.
Version 1.7
 o  Fixed a number of issues with the syntax of single quotes,
    including Debian bug #324520.
Version 1.6
 o  Fixed mercury mode menu initialization (Debian bug #226121).
 o  Fixed (i.e., eliminated) Delete remapping (Debian bug #229636).
 o  Corrected indentation for clauses defining quoted atoms.
Version 1.5:
 o  Keywords fontifying should work in console mode so this is
    enabled everywhere.
Version 1.4:
 o  Now supports GNU Prolog--minor adaptation of a patch by Stefan
    Moeding.
Version 1.3:
 o  Info-follow-nearest-node now called correctly under Emacs too
    (thanks to Nicolas Pelletier).  Should be implemented more
    elegantly (i.e., without compilation warnings) in the future.
Version 1.2:
 o  Another prompt fix, still in SWI mode (people seem to have
    changed the prompt of SWI Prolog).
Version 1.1:
 o  Fixed dots in the end of line comments causing indentation
    problems.  The following code is now correctly indented (note
    the dot terminating the comment):
       a(X) :- b(X),
           c(X).                  % comment here.
       a(X).
    and so is this (and variants):
       a(X) :- b(X),
           c(X).                  /* comment here.  */
       a(X).
Version 1.0:
 o  Revamped the menu system.
 o  Yet another prompt recognition fix (SWI mode).
 o  This is more of a renumbering than a new edition.  I promoted
    the mode to version 1.0 to emphasize the fact that it is now
    mature and stable enough to be considered production (in my
    opinion anyway).
Version 0.1.41:
 o  GNU Emacs compatibility fixes.
Version 0.1.40:
 o  prolog-get-predspec is now suitable to be called as
    imenu-extract-index-name-function.  The predicate index works.
 o  Since imenu works now as advertised, prolog-imenu-flag is t
    by default.
 o  Eliminated prolog-create-predicate-index since the imenu
    utilities now work well.  Actually, this function is also
    buggy, and I see no reason to fix it since we do not need it
    anyway.
 o  Fixed prolog-pred-start, prolog-clause-start, prolog-clause-info.
 o  Fix for prolog-build-case-strings; now prolog-upper-case-string
    and prolog-lower-case-string are correctly initialized,
 o  Various font-lock changes; most importantly, block comments (/*
    ... */) are now correctly fontified in XEmacs even when they
    extend on multiple lines.
Version 0.1.36:
 o  The debug prompt of SWI Prolog is now correctly recognized.
Version 0.1.35:
 o  Minor font-lock bug fixes.

Dependencies

Reverse dependencies