annotate lisp/progmodes/prolog.el @ 63308:51d38cfbe542

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents 3321bf6b1f4d
children 6182d0adade2 f042e7c0fe20
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 258
diff changeset
1 ;;; prolog.el --- major mode for editing and running Prolog under Emacs
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 258
diff changeset
2
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
3 ;; Copyright (C) 1986, 1987, 2003, 2004 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 814
diff changeset
4
17977
727cf56647a4 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17414
diff changeset
5 ;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
814
38b2499cb3e9 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
6 ;; Keywords: languages
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
7
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
9
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
13 ;; any later version.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
14
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
18 ;; GNU General Public License for more details.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
19
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 10890
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 10890
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 10890
diff changeset
23 ;; Boston, MA 02111-1307, USA.
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
24
2308
f287613dfc28 Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
25 ;;; Commentary:
f287613dfc28 Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
26
f287613dfc28 Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
27 ;; This package provides a major mode for editing Prolog. It knows
f287613dfc28 Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
28 ;; about Prolog syntax and comments, and can send regions to an inferior
45608
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
29 ;; Prolog interpreter process. Font locking is tuned towards GNU Prolog.
2308
f287613dfc28 Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
30
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
31 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
32
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
33 (defgroup prolog nil
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
34 "Major mode for editing and running Prolog under Emacs"
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
35 :group 'languages)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
36
45608
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
37
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
38 (defcustom prolog-program-name
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
39 (let ((names '("prolog" "gprolog")))
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
40 (while (and names
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
41 (not (executable-find (car names))))
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
42 (setq names (cdr names)))
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
43 (or (car names) "prolog"))
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
44 "*Program name for invoking an inferior Prolog with `run-prolog'."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
45 :type 'string
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
46 :group 'prolog)
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
47
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
48 (defcustom prolog-consult-string "reconsult(user).\n"
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
49 "*(Re)Consult mode (for C-Prolog and Quintus Prolog). "
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
50 :type 'string
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
51 :group 'prolog)
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
52
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
53 (defcustom prolog-compile-string "compile(user).\n"
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
54 "*Compile mode (for Quintus Prolog)."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
55 :type 'string
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
56 :group 'prolog)
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
57
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
58 (defcustom prolog-eof-string "end_of_file.\n"
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
59 "*String that represents end of file for prolog.
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
60 nil means send actual operating system end of file."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
61 :type 'string
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
62 :group 'prolog)
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
63
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
64 (defcustom prolog-indent-width 4
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
65 "Level of indentation in Prolog buffers."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
66 :type 'integer
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
67 :group 'prolog)
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
68
45608
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
69 (defvar prolog-font-lock-keywords
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
70 '(("\\(#[<=]=>\\|:-\\)\\|\\(#=\\)\\|\\(#[#<>\\/][=\\/]*\\|!\\)"
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
71 0 font-lock-keyword-face)
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
72 ("\\<\\(is\\|write\\|nl\\|read_\\sw+\\)\\>"
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
73 1 font-lock-keyword-face)
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
74 ("^\\(\\sw+\\)\\s-*\\((\\(.+\\))\\)*"
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
75 (1 font-lock-function-name-face)
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
76 (3 font-lock-variable-name-face)))
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
77 "Font-lock keywords for Prolog mode.")
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
78
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
79 (defvar prolog-mode-syntax-table
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
80 (let ((table (make-syntax-table)))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
81 (modify-syntax-entry ?_ "w" table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
82 (modify-syntax-entry ?\\ "\\" table)
45608
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
83 (modify-syntax-entry ?/ ". 14" table)
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
84 (modify-syntax-entry ?* ". 23" table)
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
85 (modify-syntax-entry ?+ "." table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
86 (modify-syntax-entry ?- "." table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
87 (modify-syntax-entry ?= "." table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
88 (modify-syntax-entry ?% "<" table)
8217
a09642334f69 (prolog-mode-syntax-table): Make newline end comments.
Richard M. Stallman <rms@gnu.org>
parents: 2308
diff changeset
89 (modify-syntax-entry ?\n ">" table)
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
90 (modify-syntax-entry ?< "." table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
91 (modify-syntax-entry ?> "." table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
92 (modify-syntax-entry ?\' "\"" table)
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
93 table))
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
94
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
95 (defvar prolog-mode-abbrev-table nil)
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
96 (define-abbrev-table 'prolog-mode-abbrev-table ())
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
97
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
98 (defun prolog-mode-variables ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
99 (make-local-variable 'paragraph-separate)
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
100 (setq paragraph-separate (concat "%%\\|$\\|" page-delimiter)) ;'%%..'
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
101 (make-local-variable 'paragraph-ignore-fill-prefix)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
102 (setq paragraph-ignore-fill-prefix t)
20396
ba46225fd687 (prolog-mode-variables):
Karl Heuer <kwzh@gnu.org>
parents: 18383
diff changeset
103 (make-local-variable 'imenu-generic-expression)
58713
75d6f143fced (prolog-mode-variables): Fix imenu-generic-expression.
Juri Linkov <juri@jurta.org>
parents: 53891
diff changeset
104 (setq imenu-generic-expression '((nil "^\\sw+" 0)))
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
105 (make-local-variable 'indent-line-function)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
106 (setq indent-line-function 'prolog-indent-line)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
107 (make-local-variable 'comment-start)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
108 (setq comment-start "%")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
109 (make-local-variable 'comment-start-skip)
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
110 (setq comment-start-skip "\\(?:%+\\|/\\*+\\)[ \t]*")
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
111 (make-local-variable 'comment-end-skip)
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
112 (setq comment-end-skip "[ \t]*\\(\n\\|\\*+/\\)")
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
113 (make-local-variable 'comment-column)
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
114 (setq comment-column 48))
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
115
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
116 (defvar prolog-mode-map
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
117 (let ((map (make-sparse-keymap)))
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
118 (define-key map "\e\C-x" 'prolog-consult-region)
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
119 map))
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
120
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 242
diff changeset
121 ;;;###autoload
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
122 (defun prolog-mode ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
123 "Major mode for editing Prolog code for Prologs.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
124 Blank lines and `%%...' separate paragraphs. `%'s start comments.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
125 Commands:
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
126 \\{prolog-mode-map}
242
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
127 Entry to this mode calls the value of `prolog-mode-hook'
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
128 if that value is non-nil."
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
129 (interactive)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
130 (kill-all-local-variables)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
131 (use-local-map prolog-mode-map)
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
132 (set-syntax-table prolog-mode-syntax-table)
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
133 (setq major-mode 'prolog-mode)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
134 (setq mode-name "Prolog")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
135 (prolog-mode-variables)
45608
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
136 ;; font lock
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
137 (setq font-lock-defaults '(prolog-font-lock-keywords
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
138 nil nil nil
706ae7fb4033 (prolog-mode-syntax-table): Add flags to ?/ and ?* entries
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 20396
diff changeset
139 beginning-of-line))
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
140 (run-mode-hooks 'prolog-mode-hook))
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
141
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
142 (defun prolog-indent-line (&optional whole-exp)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
143 "Indent current line as Prolog code.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
144 With argument, indent any additional lines of the same clause
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
145 rigidly along with this one (not yet)."
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
146 (interactive "p")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
147 (let ((indent (prolog-indent-level))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
148 (pos (- (point-max) (point))) beg)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
149 (beginning-of-line)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
150 (setq beg (point))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
151 (skip-chars-forward " \t")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
152 (if (zerop (- indent (current-column)))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
153 nil
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
154 (delete-region beg (point))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
155 (indent-to indent))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
156 (if (> (- (point-max) pos) (point))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
157 (goto-char (- (point-max) pos)))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
158 ))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
159
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
160 (defun prolog-indent-level ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
161 "Compute prolog indentation level."
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
162 (save-excursion
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
163 (beginning-of-line)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
164 (skip-chars-forward " \t")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
165 (cond
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
166 ((looking-at "%%%") 0) ;Large comment starts
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
167 ((looking-at "%[^%]") comment-column) ;Small comment starts
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
168 ((bobp) 0) ;Beginning of buffer
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
169 (t
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
170 (let ((empty t) ind more less)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
171 (if (looking-at ")")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
172 (setq less t) ;Find close
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
173 (setq less nil))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
174 ;; See previous indentation
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
175 (while empty
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
176 (forward-line -1)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
177 (beginning-of-line)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
178 (if (bobp)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
179 (setq empty nil)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
180 (skip-chars-forward " \t")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
181 (if (not (or (looking-at "%[^%]") (looking-at "\n")))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
182 (setq empty nil))))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
183 (if (bobp)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
184 (setq ind 0) ;Beginning of buffer
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
185 (setq ind (current-column))) ;Beginning of clause
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
186 ;; See its beginning
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
187 (if (looking-at "%%[^%]")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
188 ind
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
189 ;; Real prolog code
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
190 (if (looking-at "(")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
191 (setq more t) ;Find open
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
192 (setq more nil))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
193 ;; See its tail
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
194 (end-of-prolog-clause)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
195 (or (bobp) (forward-char -1))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
196 (cond ((looking-at "[,(;>]")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
197 (if (and more (looking-at "[^,]"))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
198 (+ ind prolog-indent-width) ;More indentation
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
199 (max tab-width ind))) ;Same indentation
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
200 ((looking-at "-") tab-width) ;TAB
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
201 ((or less (looking-at "[^.]"))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
202 (max (- ind prolog-indent-width) 0)) ;Less indentation
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
203 (t 0)) ;No indentation
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
204 )))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
205 )))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
206
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
207 (defun end-of-prolog-clause ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
208 "Go to end of clause in this line."
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
209 (beginning-of-line 1)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
210 (let* ((eolpos (save-excursion (end-of-line) (point))))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
211 (if (re-search-forward comment-start-skip eolpos 'move)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
212 (goto-char (match-beginning 0)))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
213 (skip-chars-backward " \t")))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
214
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
215 ;;;
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
216 ;;; Inferior prolog mode
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
217 ;;;
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
218 (defvar inferior-prolog-mode-map
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
219 (let ((map (make-sparse-keymap)))
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
220 ;; This map will inherit from `comint-mode-map' when entering
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
221 ;; inferior-prolog-mode.
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
222 map))
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
223
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
224 (defvar inferior-prolog-mode-syntax-table prolog-mode-syntax-table)
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
225 (defvar inferior-prolog-mode-abbrev-table prolog-mode-abbrev-table)
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
226
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
227 (define-derived-mode inferior-prolog-mode comint-mode "Inferior Prolog"
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
228 "Major mode for interacting with an inferior Prolog process.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
229
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
230 The following commands are available:
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
231 \\{inferior-prolog-mode-map}
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
232
242
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
233 Entry to this mode calls the value of `prolog-mode-hook' with no arguments,
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
234 if that value is non-nil. Likewise with the value of `comint-mode-hook'.
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
235 `prolog-mode-hook' is called after `comint-mode-hook'.
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
236
62461
3321bf6b1f4d Replace `send-string' by `process-send-string'; replace `send-region' by `process-send-region'.
Juanma Barranquero <lekktu@gmail.com>
parents: 58713
diff changeset
237 You can send text to the inferior Prolog from other buffers using the commands
3321bf6b1f4d Replace `send-string' by `process-send-string'; replace `send-region' by `process-send-region'.
Juanma Barranquero <lekktu@gmail.com>
parents: 58713
diff changeset
238 `process-send-region', `process-send-string' and \\[prolog-consult-region].
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
239
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
240 Commands:
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
241 Tab indents for Prolog; with argument, shifts rest
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
242 of expression rigidly with the current line.
242
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
243 Paragraphs are separated only by blank lines and '%%'.
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
244 '%'s start comments.
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
245
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
246 Return at end of buffer sends line as input.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
247 Return not at end copies rest of line to end and sends it.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
248 \\[comint-kill-input] and \\[backward-kill-word] are kill commands, imitating normal Unix input editing.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
249 \\[comint-interrupt-subjob] interrupts the shell or its current subjob if any.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
250 \\[comint-stop-subjob] stops. \\[comint-quit-subjob] sends quit signal."
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
251 (setq comint-prompt-regexp "^| [ ?][- ] *")
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
252 (prolog-mode-variables))
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
253
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 242
diff changeset
254 ;;;###autoload
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
255 (defun run-prolog ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
256 "Run an inferior Prolog process, input and output via buffer *prolog*."
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
257 (interactive)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
258 (require 'comint)
53891
4b85b1e3d610 (prolog-program-name): Use gprolog if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
259 (pop-to-buffer (make-comint "prolog" prolog-program-name))
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
260 (inferior-prolog-mode))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
261
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
262 (defun prolog-consult-region (compile beg end)
242
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
263 "Send the region to the Prolog process made by \"M-x run-prolog\".
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
264 If COMPILE (prefix arg) is not nil, use compile mode rather than consult mode."
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
265 (interactive "P\nr")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
266 (save-excursion
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
267 (if compile
62461
3321bf6b1f4d Replace `send-string' by `process-send-string'; replace `send-region' by `process-send-region'.
Juanma Barranquero <lekktu@gmail.com>
parents: 58713
diff changeset
268 (process-send-string "prolog" prolog-compile-string)
3321bf6b1f4d Replace `send-string' by `process-send-string'; replace `send-region' by `process-send-region'.
Juanma Barranquero <lekktu@gmail.com>
parents: 58713
diff changeset
269 (process-send-string "prolog" prolog-consult-string))
3321bf6b1f4d Replace `send-string' by `process-send-string'; replace `send-region' by `process-send-region'.
Juanma Barranquero <lekktu@gmail.com>
parents: 58713
diff changeset
270 (process-send-region "prolog" beg end)
3321bf6b1f4d Replace `send-string' by `process-send-string'; replace `send-region' by `process-send-region'.
Juanma Barranquero <lekktu@gmail.com>
parents: 58713
diff changeset
271 (process-send-string "prolog" "\n") ;May be unnecessary
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
272 (if prolog-eof-string
62461
3321bf6b1f4d Replace `send-string' by `process-send-string'; replace `send-region' by `process-send-region'.
Juanma Barranquero <lekktu@gmail.com>
parents: 58713
diff changeset
273 (process-send-string "prolog" prolog-eof-string)
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
274 (process-send-eof "prolog")))) ;Send eof to prolog process.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
275
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
276 (defun prolog-consult-region-and-go (compile beg end)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
277 "Send the region to the inferior Prolog, and switch to *prolog* buffer.
242
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
278 If COMPILE (prefix arg) is not nil, use compile mode rather than consult mode."
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
279 (interactive "P\nr")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
280 (prolog-consult-region compile beg end)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
281 (switch-to-buffer "*prolog*"))
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 258
diff changeset
282
18383
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 17977
diff changeset
283 (provide 'prolog)
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 17977
diff changeset
284
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 45608
diff changeset
285 ;;; arch-tag: f3ec6748-1272-4ab6-8826-c50cb1607636
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 258
diff changeset
286 ;;; prolog.el ends here