Commit e2019526 authored by Stefan Bruda's avatar Stefan Bruda Committed by Stefan Monnier

* lisp/progmodes/prolog.el: Replace by a whole new file.

parent 3fa173b4
2011-01-11 Stefan Bruda <stefan@bruda.ca>
* progmodes/prolog.el: Replace by a whole new file.
2011-01-11 Stefan Monnier <monnier@iro.umontreal.ca>
* subr.el (eval-after-load): Fix timing for features (bug#7769).
......
;;; prolog.el --- major mode for editing and running Prolog under Emacs
;; prolog.el --- major mode for editing and running Prolog (and Mercury) code
;; Copyright (C) 1986, 1987, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
;; 2008, 2009, 2010 Free Software Foundation, Inc.
;; Copyright (C) 1986, 1987, 1997, 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
;; Keywords: languages
;; Authors: Emil Åström <emil_astrom(at)hotmail(dot)com>
;; Milan Zamazal <pdm(at)freesoft(dot)cz>
;; Stefan Bruda <stefan(at)bruda(dot)ca> (current maintainer)
;; * See below for more details
;; Keywords: prolog major mode sicstus swi mercury
;; This file is part of GNU Emacs.
(defvar prolog-mode-version "1.22"
"Prolog mode version number")
;; GNU Emacs is free software: you can redistribute it and/or modify
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;; Original author: Masanobu UMEDA <umerin(at)mse(dot)kyutech(dot)ac(dot)jp>
;; Parts of this file was taken from a modified version of the original
;; by Johan Andersson, Peter Olin, Mats Carlsson, Johan Bevemyr, Stefan
;; Andersson, and Per Danielsson (all SICS people), and Henrik Båkman
;; at Uppsala University, Sweden.
;;
;; Some ideas and also a few lines of code have been borrowed (not stolen ;-)
;; from Oz.el, the Emacs major mode for the Oz programming language,
;; Copyright (C) 1993 DFKI GmbH, Germany, with permission.
;; Authors: Ralf Scheidhauer and Michael Mehl ([scheidhr|mehl](at)dfki(dot)uni-sb(dot)de)
;;
;; More ideas and code have been taken from the SICStus debugger mode
;; (http://www.csd.uu.se/~perm/source_debug/index.shtml -- broken link
;; as of Mon May 5 08:23:48 EDT 2003) by Per Mildner.
;;
;; Additions for ECLiPSe and other helpful suggestions: Stephan Heuel
;; <heuel(at)ipb(dot)uni-bonn(dot)de>
;;; 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.
;;
;; The code requires the comint, easymenu, info, imenu, and font-lock
;; libraries. These are normally distributed with GNU Emacs and
;; XEmacs.
;;; Installation:
;;
;; Insert the following lines in your init file--typically ~/.emacs
;; (GNU Emacs and XEmacs <21.4), or ~/.xemacs/init.el (XEmacs
;; 21.4)--to use this mode when editing Prolog files under Emacs:
;;
;; (setq load-path (cons "/usr/lib/xemacs/site-lisp" load-path))
;; (autoload 'run-prolog "prolog" "Start a Prolog sub-process." t)
;; (autoload 'prolog-mode "prolog" "Major mode for editing Prolog programs." t)
;; (autoload 'mercury-mode "prolog" "Major mode for editing Mercury programs." t)
;; (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))
;;
;; where the path in the first line is the file system path to this file.
;; MSDOS paths can be written like "d:/programs/emacs-19.34/site-lisp".
;; Note: In XEmacs, either `/usr/lib/xemacs/site-lisp' (RPM default in
;; Red Hat-based distributions) or `/usr/local/lib/xemacs/site-lisp'
;; (default when compiling from sources) are automatically added to
;; `load-path', so the first line is not necessary provided that you
;; put this file in the appropriate place.
;;
;; The last s-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. In XEmacs
;; and Emacs 20+ 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.
;; This package provides a major mode for editing Prolog. It knows
;; about Prolog syntax and comments, and can send regions to an inferior
;; Prolog interpreter process. Font locking is tuned towards GNU Prolog.
;; 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 coloured 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 commata
;; (`prolog-electric-dot-full-predicate-template', defaults to t
;; since it seems quicker to me to just type those commata). A
;; trivial adaptation of a patch by Markus Triska.
;; o Improved the behaviour 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
;; unitialized 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 prblems 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 code here> % 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.
;;; Code:
(defvar comint-prompt-regexp)
(defvar comint-process-echoes)
(require 'smie)
(eval-when-compile
(require 'compile)
(require 'font-lock)
;; We need imenu everywhere because of the predicate index!
(require 'imenu)
;)
(require 'info)
(require 'shell)
)
(require 'comint)
(require 'easymenu)
(require 'align)
(defgroup prolog nil
"Major mode for editing and running Prolog under Emacs."
:link '(custom-group-link :tag "Font Lock Faces group" font-lock-faces)
"Major modes for editing and running Prolog and Mercury files."
:group 'languages)
(defgroup prolog-faces nil
"Prolog mode specific faces."
:group 'font-lock)
(defcustom prolog-program-name
(let ((names '("prolog" "gprolog" "swipl")))
(while (and names
(not (executable-find (car names))))
(setq names (cdr names)))
(or (car names) "prolog"))
"Program name for invoking an inferior Prolog with `run-prolog'."
:type 'string
(defgroup prolog-indentation nil
"Prolog mode indentation configuration."
:group 'prolog)
(defcustom prolog-consult-string "reconsult(user).\n"
"(Re)Consult mode (for C-Prolog and Quintus Prolog). "
:type 'string
(defgroup prolog-font-lock nil
"Prolog mode font locking patterns."
:group 'prolog)
(defcustom prolog-compile-string "compile(user).\n"
"Compile mode (for Quintus Prolog)."
:type 'string
(defgroup prolog-keyboard nil
"Prolog mode keyboard flags."
:group 'prolog)
(defcustom prolog-eof-string "end_of_file.\n"
"String that represents end of file for Prolog.
When nil, send actual operating system end of file."
:type 'string
(defgroup prolog-inferior nil
"Inferior Prolog mode options."
:group 'prolog)
(defgroup prolog-other nil
"Other Prolog mode options."
:group 'prolog)
(defcustom prolog-indent-width 4
"Level of indentation in Prolog buffers."
:type 'integer
;;-------------------------------------------------------------------
;; User configurable variables
;;-------------------------------------------------------------------
;; General configuration
(defcustom prolog-system nil
"*Prolog interpreter/compiler used.
The value of this variable is nil or a symbol.
If it is a symbol, it determines default values of other configuration
variables with respect to properties of the specified Prolog
interpreter/compiler.
Currently recognized symbol values are:
eclipse - Eclipse Prolog
mercury - Mercury
sicstus - SICStus Prolog
swi - SWI Prolog
gnu - GNU Prolog"
:group 'prolog
:type '(choice (const :tag "SICStus" :value sicstus)
(const :tag "SWI Prolog" :value swi)
(const :tag "Default" :value nil)))
(make-variable-buffer-local 'prolog-system)
;; NB: This alist can not be processed in prolog-mode-variables to
;; create a prolog-system-version-i variable since it is needed
;; prior to the call to prolog-mode-variables.
(defcustom prolog-system-version
'((sicstus (3 . 6))
(swi (0 . 0))
(mercury (0 . 0))
(eclipse (3 . 7))
(gnu (0 . 0)))
"*Alist of Prolog system versions.
The version numbers are of the format (Major . Minor)."
:group 'prolog)
(defvar prolog-font-lock-keywords
'(("\\(#[<=]=>\\|:-\\)\\|\\(#=\\)\\|\\(#[#<>\\/][=\\/]*\\|!\\)"
0 font-lock-keyword-face)
("\\<\\(is\\|write\\|nl\\|read_\\sw+\\)\\>"
1 font-lock-keyword-face)
("^\\(\\sw+\\)\\s-*\\((\\(.+\\))\\)*"
(1 font-lock-function-name-face)
(3 font-lock-variable-name-face)))
"Font-lock keywords for Prolog mode.")
(defvar prolog-mode-syntax-table
;; Indentation
(defcustom prolog-indent-width tab-width
"*The indentation width used by the editing buffer."
:group 'prolog-indentation
:type 'integer)
(defcustom prolog-align-comments-flag t
"*Non-nil means automatically align comments when indenting."
:group 'prolog-indentation
:type 'boolean)
(defcustom prolog-indent-mline-comments-flag t
"*Non-nil means indent contents of /* */ comments.
Otherwise leave such lines as they are."
:group 'prolog-indentation
:type 'boolean)
(defcustom prolog-object-end-to-0-flag t
"*Non-nil means indent closing '}' in SICStus object definitions to level 0.
Otherwise indent to `prolog-indent-width'."
:group 'prolog-indentation
:type 'boolean)
(defcustom prolog-left-indent-regexp "\\(;\\|\\*?->\\)"
"*Regexp for character sequences after which next line is indented.
Next line after such a regexp is indented to the opening paranthesis level."
:group 'prolog-indentation
:type 'regexp)
(defcustom prolog-paren-indent-p nil
"*If non-nil, increase indentation for parenthesis expressions.
The second and subsequent line in a parenthesis expression other than
a compound term can either be indented `prolog-paren-indent' to the
right (if this variable is non-nil) or in the same way as for compound
terms (if this variable is nil, default)."
:group 'prolog-indentation
:type 'boolean)
(defcustom prolog-paren-indent 4
"*The indentation increase for parenthesis expressions.
Only used in ( If -> Then ; Else) and ( Disj1 ; Disj2 ) style expressions."
:group 'prolog-indentation
:type 'integer)
(defcustom prolog-parse-mode 'beg-of-clause
"*The parse mode used (decides from which point parsing is done).
Legal values:
'beg-of-line - starts parsing at the beginning of a line, unless the
previous line ends with a backslash. Fast, but has
problems detecting multiline /* */ comments.
'beg-of-clause - starts parsing at the beginning of the current clause.
Slow, but copes better with /* */ comments."
:group 'prolog-indentation
:type '(choice (const :value beg-of-line)
(const :value beg-of-clause)))
;; Font locking
(defcustom prolog-keywords
'((eclipse
("use_module" "begin_module" "module_interface" "dynamic"
"external" "export" "dbgcomp" "nodbgcomp" "compile"))
(mercury
("all" "else" "end_module" "equality" "external" "fail" "func" "if"
"implementation" "import_module" "include_module" "inst" "instance"
"interface" "mode" "module" "not" "pragma" "pred" "some" "then" "true"
"type" "typeclass" "use_module" "where"))
(sicstus
("block" "dynamic" "mode" "module" "multifile" "meta_predicate"
"parallel" "public" "sequential" "volatile"))
(swi
("discontiguous" "dynamic" "ensure_loaded" "export" "export_list" "import"
"meta_predicate" "module" "module_transparent" "multifile" "require"
"use_module" "volatile"))
(gnu
("built_in" "char_conversion" "discontiguous" "dynamic" "ensure_linked"
"ensure_loaded" "foreign" "include" "initialization" "multifile" "op"
"public" "set_prolog_flag"))
(t
("dynamic" "module")))
"*Alist of Prolog keywords which is used for font locking of directives."
:group 'prolog-font-lock
:type 'sexp)
(defcustom prolog-types
'((mercury
("char" "float" "int" "io__state" "string" "univ"))
(t nil))
"*Alist of Prolog types used by font locking."
:group 'prolog-font-lock
:type 'sexp)
(defcustom prolog-mode-specificators
'((mercury
("bound" "di" "free" "ground" "in" "mdi" "mui" "muo" "out" "ui" "uo"))
(t nil))
"*Alist of Prolog mode specificators used by font locking."
:group 'prolog-font-lock
:type 'sexp)
(defcustom prolog-determinism-specificators
'((mercury
("cc_multi" "cc_nondet" "det" "erroneous" "failure" "multi" "nondet"
"semidet"))
(t nil))
"*Alist of Prolog determinism specificators used by font locking."
:group 'prolog-font-lock
:type 'sexp)
(defcustom prolog-directives
'((mercury
("^#[0-9]+"))
(t nil))
"*Alist of Prolog source code directives used by font locking."
:group 'prolog-font-lock
:type 'sexp)
;; Keyboard
(defcustom prolog-electric-newline-flag t
"*Non-nil means automatically indent the next line when the user types RET."
:group 'prolog-keyboard
:type 'boolean)
(defcustom prolog-hungry-delete-key-flag nil
"*Non-nil means delete key consumes all preceding spaces."
:group 'prolog-keyboard
:type 'boolean)
(defcustom prolog-electric-dot-flag nil
"*Non-nil means make dot key electric.
Electric dot appends newline or inserts head of a new clause.
If dot is pressed at the end of a line where at least one white space
precedes the point, it inserts a recursive call to the current predicate.
If dot is pressed at the beginning of an empty line, it inserts the head
of a new clause for the current predicate. It does not apply in strings
and comments.
It does not apply in strings and comments."
:group 'prolog-keyboard
:type 'boolean)
(defcustom prolog-electric-dot-full-predicate-template nil
"*If nil, electric dot inserts only the current predicate's name and `('
for recursive calls or new clause heads. Non-nil means to also
insert enough commata to cover the predicate's arity and `)',
and dot and newline for recursive calls."
:group 'prolog-keyboard
:type 'boolean)
(defcustom prolog-electric-underscore-flag nil
"*Non-nil means make underscore key electric.
Electric underscore replaces the current variable with underscore.
If underscore is pressed not on a variable then it behaves as usual."
:group 'prolog-keyboard
:type 'boolean)
(defcustom prolog-electric-tab-flag nil
"*Non-nil means make TAB key electric.
Electric TAB inserts spaces after parentheses, ->, and ;
in ( If -> Then ; Else) and ( Disj1 ; Disj2 ) style expressions."
:group 'prolog-keyboard
:type 'boolean)
(defcustom prolog-electric-if-then-else-flag nil
"*Non-nil makes `(', `>' and `;' electric
to automatically indent if-then-else constructs."
:group 'prolog-keyboard
:type 'boolean)
(defcustom prolog-electric-colon-flag nil
"*Makes `:' electric (inserts `:-' on a new line).
If non-nil, pressing `:' at the end of a line that starts in
the first column (i.e., clause heads) inserts ` :-' and newline."
:group 'prolog-keyboard
:type 'boolean)
(defcustom prolog-electric-dash-flag nil
"*Makes `-' electric (inserts a `-->' on a new line).
If non-nil, pressing `-' at the end of a line that starts in
the first column (i.e., DCG heads) inserts ` -->' and newline."
:group 'prolog-keyboard
:type 'boolean)
(defcustom prolog-old-sicstus-keys-flag nil
"*Non-nil means old SICStus Prolog mode keybindings are used."
:group 'prolog-keyboard
:type 'boolean)
;; Inferior mode
(defcustom prolog-program-name
`(((getenv "EPROLOG") (eval (getenv "EPROLOG")))
(eclipse "eclipse")
(mercury nil)
(sicstus "sicstus")
(swi ,(if (not (executable-find "swipl")) "pl" "swipl"))
(gnu "gprolog")
(t ,(let ((names '("prolog" "gprolog" "swipl" "pl")))
(while (and names
(not (executable-find (car names))))
(setq names (cdr names)))
(or (car names) "prolog"))))
"*Alist of program names for invoking an inferior Prolog with `run-prolog'."
:group 'prolog-inferior
:type 'sexp)
(defcustom prolog-program-switches
'((sicstus ("-i"))
(t nil))
"*Alist of switches given to inferior Prolog run with `run-prolog'."
:group 'prolog-inferior
:type 'sexp)
(defcustom prolog-consult-string
'((eclipse "[%f].")
(mercury nil)