annotate lisp/progmodes/prolog.el @ 1631:9c52fcf232bf

Fri Nov 20 05:24:16 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu) * config.sub: Added machines and operating systems for Emacs ports, since Emacs now uses config.sub for its configuration. New manufacturers recognized not to be operating systems: High Level Hardware (highlevel, defaults to using BSD), Gould (gould, defaults to System V), Commodore (cbm, defaults to amigados), National Semiconductor (ns, defaults to Genix), and Masscomp (masscomp, defaults to RTU). Recognize the NS1600 (ns16k) and the Clipper (clipper) as processors. Recognize these processors with default manufacturers: the Cydra (cydra) from Cydrome (cydrome), the XPS100 (xps100) from Honeywell (honeywell), and the Orion (orion) and Orion 1/05 (orion105) from High Level Hardware (highlevel). If the ISC operating system is given with a version number, don't kill it and set it to 2.2; just have it default to 2.2 if omitted. Make Irix SGI's default operating system, not SYSV. Make BSD Encore's default, so it applies for all Encore machines, not just the umax and mmax abbreviations. All of Encore's machines use BSD, not just the ns32k-based ones. Make it the manufacturer's default. Make it possible to specify an operating system for a Gould machine. Make sysv the manufacturer's default, so it applies when we specify the manufacturer as well as when we omit it. Add Uniplus (uniplus), Iris (iris), Xenix (xenix), and RTU (rtu) as recognized operating system names.
author Jim Blandy <jimb@redhat.com>
date Fri, 20 Nov 1992 17:14:50 +0000
parents 213978acbc1e
children 10e417efb12a
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
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 814
diff changeset
3 ;; Copyright (C) 1986, 1987 Free Software Foundation, Inc.
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 814
diff changeset
4
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
5 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
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
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
22 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
23
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
24 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
25
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
26 (defvar prolog-mode-syntax-table nil)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
27 (defvar prolog-mode-abbrev-table nil)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
28 (defvar prolog-mode-map nil)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
29
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
30 (defvar prolog-program-name "prolog"
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
31 "*Program name for invoking an inferior Prolog with `run-prolog'.")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
32
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
33 (defvar prolog-consult-string "reconsult(user).\n"
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
34 "*(Re)Consult mode (for C-Prolog and Quintus Prolog). ")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
35
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
36 (defvar prolog-compile-string "compile(user).\n"
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
37 "*Compile mode (for Quintus Prolog).")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
38
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
39 (defvar prolog-eof-string "end_of_file.\n"
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
40 "*String that represents end of file for prolog.
242
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
41 nil means send actual operating system end of file.")
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
42
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
43 (defvar prolog-indent-width 4)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
44
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
45 (if prolog-mode-syntax-table
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
46 ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
47 (let ((table (make-syntax-table)))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
48 (modify-syntax-entry ?_ "w" table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
49 (modify-syntax-entry ?\\ "\\" table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
50 (modify-syntax-entry ?/ "." table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
51 (modify-syntax-entry ?* "." table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
52 (modify-syntax-entry ?+ "." table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
53 (modify-syntax-entry ?- "." table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
54 (modify-syntax-entry ?= "." table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
55 (modify-syntax-entry ?% "<" table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
56 (modify-syntax-entry ?< "." table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
57 (modify-syntax-entry ?> "." table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
58 (modify-syntax-entry ?\' "\"" table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
59 (setq prolog-mode-syntax-table table)))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
60
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
61 (define-abbrev-table 'prolog-mode-abbrev-table ())
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
62
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
63 (defun prolog-mode-variables ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
64 (set-syntax-table prolog-mode-syntax-table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
65 (setq local-abbrev-table prolog-mode-abbrev-table)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
66 (make-local-variable 'paragraph-start)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
67 (setq paragraph-start (concat "^%%\\|^$\\|" page-delimiter)) ;'%%..'
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
68 (make-local-variable 'paragraph-separate)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
69 (setq paragraph-separate paragraph-start)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
70 (make-local-variable 'paragraph-ignore-fill-prefix)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
71 (setq paragraph-ignore-fill-prefix t)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
72 (make-local-variable 'indent-line-function)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
73 (setq indent-line-function 'prolog-indent-line)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
74 (make-local-variable 'comment-start)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
75 (setq comment-start "%")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
76 (make-local-variable 'comment-start-skip)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
77 (setq comment-start-skip "%+ *")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
78 (make-local-variable 'comment-column)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
79 (setq comment-column 48)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
80 (make-local-variable 'comment-indent-hook)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
81 (setq comment-indent-hook 'prolog-comment-indent))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
82
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
83 (defun prolog-mode-commands (map)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
84 (define-key map "\t" 'prolog-indent-line)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
85 (define-key map "\e\C-x" 'prolog-consult-region))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
86
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
87 (if prolog-mode-map
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
88 nil
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
89 (setq prolog-mode-map (make-sparse-keymap))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
90 (prolog-mode-commands prolog-mode-map))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
91
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 242
diff changeset
92 ;;;###autoload
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
93 (defun prolog-mode ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
94 "Major mode for editing Prolog code for Prologs.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
95 Blank lines and `%%...' separate paragraphs. `%'s start comments.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
96 Commands:
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
97 \\{prolog-mode-map}
242
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
98 Entry to this mode calls the value of `prolog-mode-hook'
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
99 if that value is non-nil."
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
100 (interactive)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
101 (kill-all-local-variables)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
102 (use-local-map prolog-mode-map)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
103 (setq major-mode 'prolog-mode)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
104 (setq mode-name "Prolog")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
105 (prolog-mode-variables)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
106 (run-hooks 'prolog-mode-hook))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
107
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
108 (defun prolog-indent-line (&optional whole-exp)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
109 "Indent current line as Prolog code.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
110 With argument, indent any additional lines of the same clause
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
111 rigidly along with this one (not yet)."
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
112 (interactive "p")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
113 (let ((indent (prolog-indent-level))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
114 (pos (- (point-max) (point))) beg)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
115 (beginning-of-line)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
116 (setq beg (point))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
117 (skip-chars-forward " \t")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
118 (if (zerop (- indent (current-column)))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
119 nil
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
120 (delete-region beg (point))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
121 (indent-to indent))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
122 (if (> (- (point-max) pos) (point))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
123 (goto-char (- (point-max) pos)))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
124 ))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
125
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
126 (defun prolog-indent-level ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
127 "Compute prolog indentation level."
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
128 (save-excursion
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
129 (beginning-of-line)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
130 (skip-chars-forward " \t")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
131 (cond
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
132 ((looking-at "%%%") 0) ;Large comment starts
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
133 ((looking-at "%[^%]") comment-column) ;Small comment starts
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
134 ((bobp) 0) ;Beginning of buffer
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
135 (t
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
136 (let ((empty t) ind more less)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
137 (if (looking-at ")")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
138 (setq less t) ;Find close
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
139 (setq less nil))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
140 ;; See previous indentation
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
141 (while empty
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
142 (forward-line -1)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
143 (beginning-of-line)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
144 (if (bobp)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
145 (setq empty nil)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
146 (skip-chars-forward " \t")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
147 (if (not (or (looking-at "%[^%]") (looking-at "\n")))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
148 (setq empty nil))))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
149 (if (bobp)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
150 (setq ind 0) ;Beginning of buffer
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
151 (setq ind (current-column))) ;Beginning of clause
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
152 ;; See its beginning
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
153 (if (looking-at "%%[^%]")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
154 ind
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
155 ;; Real prolog code
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
156 (if (looking-at "(")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
157 (setq more t) ;Find open
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
158 (setq more nil))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
159 ;; See its tail
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
160 (end-of-prolog-clause)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
161 (or (bobp) (forward-char -1))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
162 (cond ((looking-at "[,(;>]")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
163 (if (and more (looking-at "[^,]"))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
164 (+ ind prolog-indent-width) ;More indentation
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
165 (max tab-width ind))) ;Same indentation
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
166 ((looking-at "-") tab-width) ;TAB
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
167 ((or less (looking-at "[^.]"))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
168 (max (- ind prolog-indent-width) 0)) ;Less indentation
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
169 (t 0)) ;No indentation
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
170 )))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
171 )))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
172
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
173 (defun end-of-prolog-clause ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
174 "Go to end of clause in this line."
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
175 (beginning-of-line 1)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
176 (let* ((eolpos (save-excursion (end-of-line) (point))))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
177 (if (re-search-forward comment-start-skip eolpos 'move)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
178 (goto-char (match-beginning 0)))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
179 (skip-chars-backward " \t")))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
180
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
181 (defun prolog-comment-indent ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
182 "Compute prolog comment indentation."
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
183 (cond ((looking-at "%%%") 0)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
184 ((looking-at "%%") (prolog-indent-level))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
185 (t
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
186 (save-excursion
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
187 (skip-chars-backward " \t")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
188 ;; Insert one space at least, except at left margin.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
189 (max (+ (current-column) (if (bolp) 0 1))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
190 comment-column)))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
191 ))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
192
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
193
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
194 ;;;
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
195 ;;; Inferior prolog mode
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
196 ;;;
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
197 (defvar inferior-prolog-mode-map nil)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
198
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
199 (defun inferior-prolog-mode ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
200 "Major mode for interacting with an inferior Prolog process.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
201
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
202 The following commands are available:
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
203 \\{inferior-prolog-mode-map}
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
204
242
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
205 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
206 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
207 `prolog-mode-hook' is called after `comint-mode-hook'.
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
208
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
209 You can send text to the inferior Prolog from other buffers
242
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
210 using the commands `send-region', `send-string' and \\[prolog-consult-region].
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
211
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
212 Commands:
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
213 Tab indents for Prolog; with argument, shifts rest
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
214 of expression rigidly with the current line.
242
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
215 Paragraphs are separated only by blank lines and '%%'.
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
216 '%'s start comments.
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
217
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
218 Return at end of buffer sends line as input.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
219 Return not at end copies rest of line to end and sends it.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
220 \\[comint-kill-input] and \\[backward-kill-word] are kill commands, imitating normal Unix input editing.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
221 \\[comint-interrupt-subjob] interrupts the shell or its current subjob if any.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
222 \\[comint-stop-subjob] stops. \\[comint-quit-subjob] sends quit signal."
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
223 (interactive)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
224 (require 'comint)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
225 (comint-mode)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
226 (setq major-mode 'inferior-prolog-mode
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
227 mode-name "Inferior Prolog"
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
228 comint-prompt-regexp "^| [ ?][- ] *")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
229 (prolog-mode-variables)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
230 (if inferior-prolog-mode-map nil
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
231 (setq inferior-prolog-mode-map (copy-keymap comint-mode-map))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
232 (prolog-mode-commands inferior-prolog-mode-map))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
233 (use-local-map inferior-prolog-mode-map)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
234 (run-hooks 'prolog-mode-hook))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
235
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 242
diff changeset
236 ;;;###autoload
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
237 (defun run-prolog ()
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
238 "Run an inferior Prolog process, input and output via buffer *prolog*."
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
239 (interactive)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
240 (require 'comint)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
241 (switch-to-buffer (make-comint "prolog" prolog-program-name))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
242 (inferior-prolog-mode))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
243
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
244 (defun prolog-consult-region (compile beg end)
242
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 41
diff changeset
245 "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
246 If COMPILE (prefix arg) is not nil, use compile mode rather than consult mode."
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
247 (interactive "P\nr")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
248 (save-excursion
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
249 (if compile
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
250 (send-string "prolog" prolog-compile-string)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
251 (send-string "prolog" prolog-consult-string))
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
252 (send-region "prolog" beg end)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
253 (send-string "prolog" "\n") ;May be unnecessary
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
254 (if prolog-eof-string
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
255 (send-string "prolog" prolog-eof-string)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
256 (process-send-eof "prolog")))) ;Send eof to prolog process.
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
257
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
258 (defun prolog-consult-region-and-go (compile beg end)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
259 "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
260 If COMPILE (prefix arg) is not nil, use compile mode rather than consult mode."
41
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
261 (interactive "P\nr")
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
262 (prolog-consult-region compile beg end)
467ee6fe6503 Initial revision
root <root>
parents:
diff changeset
263 (switch-to-buffer "*prolog*"))
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 258
diff changeset
264
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 258
diff changeset
265 ;;; prolog.el ends here