24
|
1 ;;; tex-info.el - Support for editing TeXinfo source.
|
|
2 ;;
|
|
3 ;; Maintainer: Per Abrahamsen <auc-tex@sunsite.auc.dk>
|
26
|
4 ;; Version: 9.7k
|
24
|
5
|
|
6 ;; Copyright (C) 1993, 1994, 1997 Per Abrahamsen
|
|
7 ;;
|
|
8 ;; This program is free software; you can redistribute it and/or modify
|
|
9 ;; it under the terms of the GNU General Public License as published by
|
|
10 ;; the Free Software Foundation; either version 2, or (at your option)
|
|
11 ;; any later version.
|
|
12 ;;
|
|
13 ;; This program is distributed in the hope that it will be useful,
|
|
14 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16 ;; GNU General Public License for more details.
|
|
17 ;;
|
|
18 ;; You should have received a copy of the GNU General Public License
|
|
19 ;; along with this program; if not, write to the Free Software
|
|
20 ;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
21
|
|
22 ;;; Code:
|
|
23
|
|
24 (require 'tex)
|
|
25 (condition-case nil ;Lucid is not providing.
|
|
26 (require 'texinfo)
|
|
27 (error))
|
|
28
|
|
29 ;;; Environments:
|
|
30
|
|
31 (defvar TeXinfo-environment-list
|
|
32 '(("cartouche")
|
|
33 ("defcv")
|
|
34 ("deffn") ("defivar") ("defmac")
|
|
35 ("defmethod") ("defop") ("defopt") ("defspec") ("deftp")
|
|
36 ("deftypefn") ("deftypefun") ("deftypevar") ("deftypevr")
|
|
37 ("defun") ("defvar") ("defvr") ("description") ("display")
|
|
38 ("enumerate") ("example") ("ifset") ("ifclear") ("flushleft")
|
|
39 ("flushright") ("format") ("ftable") ("iftex") ("itemize")
|
|
40 ("lisp") ("quotation") ("smallexample") ("smalllisp") ("table")
|
|
41 ("tex") ("titlepage") ("vtable"))
|
|
42 "Alist of TeXinfo environments.")
|
|
43
|
|
44 (defconst texinfo-environment-regexp
|
|
45 ;; Overwrite version from `texinfo.el'.
|
|
46 (concat "^@\\("
|
|
47 (mapconcat 'car TeXinfo-environment-list "\\|")
|
|
48 "\\|end\\)")
|
|
49 "Regexp for environment-like TeXinfo list commands.
|
|
50 Subexpression 1 is what goes into the corresponding `@end' statement.")
|
|
51
|
|
52 (defun TeXinfo-insert-environment (env)
|
|
53 "Insert TeXinfo environment ENV.
|
|
54 When called interactively, prompt for an environment."
|
|
55 (interactive (list (completing-read "Environment: "
|
|
56 TeXinfo-environment-list)))
|
|
57 (insert "@" env "\n\n@end " env "\n")
|
|
58 (if (null (cdr-safe (assoc "defcv" TeXinfo-environment-list)))
|
|
59 (forward-line -2)
|
|
60 ;; apply arguments
|
|
61 ))
|
|
62
|
|
63 ;;; Keymap:
|
|
64
|
|
65 (defvar TeXinfo-mode-map nil
|
|
66 "Keymap for TeXinfo mode.")
|
|
67
|
|
68 (if TeXinfo-mode-map
|
|
69 ()
|
|
70 (setq TeXinfo-mode-map (make-sparse-keymap))
|
|
71
|
|
72 ;; From texinfo.el
|
|
73
|
|
74 ;; bindings for updating nodes and menus
|
|
75 (define-key TeXinfo-mode-map "\C-c\C-um" 'texinfo-master-menu)
|
|
76 (define-key TeXinfo-mode-map "\C-c\C-u\C-m" 'texinfo-make-menu)
|
|
77 (define-key TeXinfo-mode-map "\C-c\C-u\C-n" 'texinfo-update-node)
|
|
78 (define-key TeXinfo-mode-map "\C-c\C-u\C-e" 'texinfo-every-node-update)
|
|
79 (define-key TeXinfo-mode-map "\C-c\C-u\C-a" 'texinfo-all-menus-update)
|
|
80
|
|
81 ;; From TeX-mode
|
|
82
|
|
83 ;; Standard
|
|
84 (define-key TeXinfo-mode-map "\177" 'backward-delete-char-untabify)
|
|
85 (define-key TeXinfo-mode-map "\C-c}" 'up-list)
|
|
86 (define-key TeXinfo-mode-map "\C-c#" 'TeX-normal-mode)
|
|
87 (define-key TeXinfo-mode-map "\C-c\C-n" 'TeX-normal-mode)
|
|
88 (define-key TeXinfo-mode-map "\C-c?" 'describe-mode)
|
|
89
|
|
90 ;; From tex.el
|
|
91 (define-key TeXinfo-mode-map "\C-c{" 'TeX-insert-braces)
|
|
92 (define-key TeXinfo-mode-map "\C-c\C-f" 'TeX-font)
|
|
93 (define-key TeXinfo-mode-map "\C-c\C-m" 'TeX-insert-macro)
|
|
94 (define-key TeXinfo-mode-map "\e\t" 'TeX-complete-symbol)
|
|
95
|
|
96 (define-key TeXinfo-mode-map "\C-c;" 'TeX-comment-region)
|
|
97 (define-key TeXinfo-mode-map "\C-c%" 'TeX-comment-paragraph)
|
|
98 (define-key TeXinfo-mode-map "\C-c'" 'TeX-comment-paragraph) ;*** Old way
|
|
99 (define-key TeXinfo-mode-map "\C-c:" 'TeX-un-comment-region) ;*** Old way
|
|
100 (define-key TeXinfo-mode-map "\C-c\"" 'TeX-un-comment) ;*** Old way
|
|
101
|
|
102 ;; From tex-buf.el
|
|
103 (define-key TeXinfo-mode-map "\C-c\C-c" 'TeX-command-master)
|
|
104 (define-key TeXinfo-mode-map "\C-c\C-k" 'TeX-kill-job)
|
|
105 (define-key TeXinfo-mode-map "\C-c\C-l" 'TeX-recenter-output-buffer)
|
|
106 (define-key TeXinfo-mode-map "\C-c^" 'TeX-home-buffer)
|
|
107 (define-key TeXinfo-mode-map "\C-c`" 'TeX-next-error)
|
|
108 (define-key TeXinfo-mode-map "\C-c\C-w" 'TeX-toggle-debug-boxes)
|
|
109
|
|
110 ;; From tex.cpl.el
|
|
111
|
|
112 ;; Simulating LaTeX-mode
|
|
113
|
|
114 (define-key TeXinfo-mode-map "\C-c\C-e" 'TeXinfo-insert-environment)
|
|
115 (define-key TeXinfo-mode-map "\C-c\n" 'texinfo-insert-@item)
|
|
116 (define-key TeXinfo-mode-map "\C-c\C-s" 'texinfo-insert-@node)
|
|
117 (define-key TeXinfo-mode-map "\C-c]" 'texinfo-insert-@end))
|
|
118
|
|
119 (easy-menu-define TeXinfo-mode-menu
|
|
120 TeXinfo-mode-map
|
|
121 "Menu used in TeXinfo mode."
|
|
122 (list "TeXinfo"
|
|
123 ["Environment..." TeXinfo-insert-environment t]
|
|
124 ["Node..." texinfo-insert-@node t]
|
|
125 ["Macro..." TeX-insert-macro t]
|
|
126 ["Complete" TeX-complete-symbol t]
|
|
127 ["Item" texinfo-insert-@item t]
|
|
128 (list "Insert Font"
|
|
129 ["Emphasize" (TeX-font nil ?\C-e) :keys "C-c C-f C-e"]
|
|
130 ["Bold" (TeX-font nil ?\C-b) :keys "C-c C-f C-b"]
|
|
131 ["Typewriter" (TeX-font nil ?\C-t) :keys "C-c C-f C-t"]
|
|
132 ["Small Caps" (TeX-font nil ?\C-c) :keys "C-c C-f C-c"]
|
|
133 ["Italic" (TeX-font nil ?\C-i) :keys "C-c C-f C-i"]
|
|
134 ["Sample" (TeX-font nil ?\C-s) :keys "C-c C-f C-s"]
|
|
135 ["Roman" (TeX-font nil ?\C-r) :keys "C-c C-f C-r"])
|
|
136 (list "Change Font"
|
|
137 ["Emphasize" (TeX-font t ?\C-e) :keys "C-u C-c C-f C-e"]
|
|
138 ["Bold" (TeX-font t ?\C-b) :keys "C-u C-c C-f C-b"]
|
|
139 ["Typewriter" (TeX-font t ?\C-t) :keys "C-u C-c C-f C-t"]
|
|
140 ["Small Caps" (TeX-font t ?\C-c) :keys "C-u C-c C-f C-c"]
|
|
141 ["Italic" (TeX-font t ?\C-i) :keys "C-u C-c C-f C-i"]
|
|
142 ["Sample" (TeX-font t ?\C-s) :keys "C-u C-c C-f C-s"]
|
|
143 ["Roman" (TeX-font t ?\C-r) :keys "C-u C-c C-f C-r"])
|
|
144 "-"
|
|
145 ["Save Document" TeX-save-document t]
|
|
146 ["Next Error" TeX-next-error t]
|
|
147 (list "TeX Output"
|
|
148 ["Kill Job" TeX-kill-job t]
|
|
149 ["Debug Bad Boxes" TeX-toggle-debug-boxes
|
|
150 :style toggle :selected TeX-debug-bad-boxes ]
|
|
151 ["Switch to original file" TeX-home-buffer t]
|
|
152 ["Recenter Output Buffer" TeX-recenter-output-buffer t])
|
|
153 "--"
|
|
154 ["Create Master Menu" texinfo-master-menu t]
|
|
155 ["Create Menu" texinfo-make-menu t]
|
|
156 ["Update Node" texinfo-update-node t]
|
|
157 ["Update Every Node" texinfo-every-node-update t]
|
|
158 ["Update All Menus" texinfo-all-menus-update t]
|
|
159 ["Uncomment Region" TeX-un-comment-region t]
|
|
160 ["Comment Region" TeX-comment-region t]
|
|
161 ["Switch to Master file" TeX-home-buffer t]
|
|
162 ["Submit bug report" TeX-submit-bug-report t]
|
|
163 ["Reset Buffer" TeX-normal-mode t]
|
|
164 ["Reset AUC TeX" (TeX-normal-mode t) :keys "C-u C-c C-n"]))
|
|
165
|
|
166 (easy-menu-define TeXinfo-command-menu
|
|
167 TeXinfo-mode-map
|
|
168 "Menu used in TeXinfo mode for external commands."
|
|
169 (append '("Command")
|
|
170 (mapcar 'TeX-command-menu-entry TeX-command-list)))
|
|
171
|
|
172 (defvar TeXinfo-font-list
|
|
173 '((?\C-b "@b{" "}")
|
|
174 (?\C-c "@sc{" "}")
|
|
175 (?\C-e "@emph{" "}")
|
|
176 (?\C-i "@i{" "}")
|
|
177 (?\C-r "@r{" "}")
|
|
178 (?\C-s "@samp{" "}")
|
|
179 (?\C-t "@t{" "}")
|
|
180 (?s "@strong{" "}")
|
|
181 (?\C-f "@file{" "}")
|
|
182 (?\C-d "@dfn{" "}")
|
|
183 (?\C-v "@var{" "}")
|
|
184 (?k "@key{" "}")
|
|
185 (?\C-k "@kbd{" "}")
|
|
186 (?c "@code{" "}")
|
|
187 (?C "@cite{" "}"))
|
|
188 "Font commands used in TeXinfo mode. See `TeX-font-list'.")
|
|
189
|
|
190 ;;; Mode:
|
|
191
|
|
192 ;;; Do not ;;;###autoload because of conflict with standard tex-mode.el.
|
|
193 (defun texinfo-mode ()
|
|
194 "Major mode for editing files of input for TeXinfo.
|
|
195
|
|
196 Special commands:
|
|
197 \\{TeXinfo-mode-map}
|
|
198
|
|
199 Entering TeXinfo mode calls the value of text-mode-hook,
|
|
200 then the value of TeX-mode-hook, and then the value of
|
|
201 TeXinfo-mode-hook."
|
|
202 (interactive)
|
|
203 ;; Mostly stolen from texinfo.el
|
|
204 (setq mode-name "TeXinfo")
|
|
205 (setq major-mode 'texinfo-mode)
|
|
206 (use-local-map TeXinfo-mode-map)
|
|
207 (set-syntax-table texinfo-mode-syntax-table)
|
|
208 (make-local-variable 'page-delimiter)
|
|
209 (setq page-delimiter
|
|
210 (concat
|
|
211 "^@node [ \t]*[Tt]op\\|^@\\("
|
|
212 texinfo-chapter-level-regexp
|
|
213 "\\)"))
|
|
214 (make-local-variable 'require-final-newline)
|
|
215 (setq require-final-newline t)
|
|
216 (make-local-variable 'indent-tabs-mode)
|
|
217 (setq indent-tabs-mode nil)
|
|
218 (make-local-variable 'paragraph-separate)
|
|
219 (setq paragraph-separate
|
|
220 (concat "\b\\|^@[a-zA-Z]*[ \n]\\|" paragraph-separate))
|
|
221 (make-local-variable 'paragraph-start)
|
|
222 (setq paragraph-start
|
|
223 (concat "\b\\|^@[a-zA-Z]*[ \n]\\|" paragraph-start))
|
|
224 (make-local-variable 'fill-column)
|
|
225 (setq fill-column 72)
|
|
226 (make-local-variable 'comment-start)
|
|
227 (setq comment-start "@c ")
|
|
228 (make-local-variable 'comment-start-skip)
|
|
229 (setq comment-start-skip "@c +\\|@comment +")
|
|
230 (make-local-variable 'words-include-escapes)
|
|
231 (setq words-include-escapes t)
|
|
232 (if (not (boundp 'texinfo-imenu-generic-expression))
|
|
233 ;; This was introduced in 19.30.
|
|
234 ()
|
|
235 (make-local-variable 'imenu-generic-expression)
|
|
236 (setq imenu-generic-expression texinfo-imenu-generic-expression))
|
|
237 (make-local-variable 'font-lock-defaults)
|
|
238 (setq font-lock-defaults '(texinfo-font-lock-keywords t))
|
|
239 (if (not (boundp 'texinfo-section-list))
|
|
240 ;; This was included in 19.31.
|
|
241 ()
|
|
242 (make-local-variable 'outline-regexp)
|
|
243 (setq outline-regexp
|
|
244 (concat "@\\("
|
|
245 (mapconcat 'car texinfo-section-list "\\>\\|")
|
|
246 "\\>\\)"))
|
|
247 (make-local-variable 'outline-level)
|
|
248 (setq outline-level 'texinfo-outline-level))
|
|
249
|
|
250 ;; Mostly AUC TeX stuff
|
|
251 (easy-menu-add TeXinfo-command-menu TeXinfo-mode-map)
|
|
252 (easy-menu-add TeXinfo-mode-menu TeXinfo-mode-map)
|
|
253 (make-local-variable 'TeX-command-current)
|
|
254 (setq TeX-command-current 'TeX-command-master)
|
|
255
|
|
256 (setq TeX-default-extension "texi")
|
|
257 (make-local-variable 'TeX-esc)
|
|
258 (setq TeX-esc "@")
|
|
259
|
|
260 (make-local-variable 'TeX-auto-regexp-list)
|
|
261 (setq TeX-auto-regexp-list 'TeX-auto-empty-regexp-list)
|
|
262 (make-local-variable 'TeX-auto-update)
|
|
263 (setq TeX-auto-update t)
|
|
264
|
|
265 (setq TeX-command-default "TeX")
|
|
266 (setq TeX-header-end "%**end")
|
|
267 (setq TeX-trailer-start (regexp-quote (concat TeX-esc "bye")))
|
|
268
|
|
269 (make-local-variable 'TeX-complete-list)
|
|
270 (setq TeX-complete-list
|
|
271 (list (list "@\\([a-zA-Z]*\\)" 1 'TeX-symbol-list nil)
|
|
272 (list "" TeX-complete-word)))
|
|
273
|
|
274 (make-local-variable 'TeX-font-list)
|
|
275 (setq TeX-font-list TeXinfo-font-list)
|
|
276
|
|
277 (TeX-add-symbols
|
|
278 '("appendix" "Title")
|
|
279 '("appendixsec" "Title")
|
|
280 '("appendixsection" "Title")
|
|
281 '("appendixsubsec" "Title")
|
|
282 '("appendixsubsubsec" "Title")
|
|
283 '("asis")
|
|
284 '("author" "Author")
|
|
285 '("b" "Text")
|
|
286 '("bullet")
|
|
287 '("bye")
|
|
288 '("c" "Comment")
|
|
289 '("center" "Line-of-text")
|
|
290 '("chapheading" "Title")
|
|
291 '("chapter" "Title")
|
|
292 '("cindex" "Entry")
|
|
293 '("cite" "Reference")
|
|
294 '("clear" "Flag")
|
|
295 '("code" "Sample-code")
|
|
296 '("comment" "Comment")
|
|
297 '("contents")
|
|
298 '("copyright")
|
|
299 '("defcodeindex" "Index-name")
|
|
300 '("defindex" "Index-name")
|
|
301 '("dfn" "Term")
|
|
302 '("dmn" "Dimension")
|
|
303 '("dots")
|
|
304 '("emph" "Text")
|
|
305 '("equiv")
|
|
306 '("error")
|
|
307 '("evenfooting" TeXinfo-lrc-argument-hook)
|
|
308 '("evenheading" TeXinfo-lrc-argument-hook)
|
|
309 '("everyfooting" TeXinfo-lrc-argument-hook)
|
|
310 '("everyheading" TeXinfo-lrc-argument-hook)
|
|
311 '("exdent" "Line-of-text")
|
|
312 '("expansion")
|
|
313 '("file" "Filename")
|
|
314 '("finalout")
|
|
315 '("findex" "Entry")
|
|
316 '("footnote" "Text-of-footnote")
|
|
317 '("footnotestyle" "Style")
|
|
318 '("group")
|
|
319 '("heading" "Title")
|
|
320 '("headings" "On-off-single-double")
|
|
321 '("i" "Text")
|
|
322 '("ignore")
|
|
323 '("include" "Filename")
|
|
324 '("inforef" "Node-name" "Info-file-name")
|
|
325 '("item")
|
|
326 '("itemx")
|
|
327 '("kbd" "Keyboard-characters")
|
|
328 '("key" "Key-name")
|
|
329 '("kindex" "Entry")
|
|
330 '("majorheading" "Title")
|
|
331 '("menu")
|
|
332 '("minus")
|
|
333 '("need" "N")
|
|
334 '("node" "Name" "Next" "Previous" "Up")
|
|
335 '("noindent")
|
|
336 '("oddfooting" TeXinfo-lrc-argument-hook)
|
|
337 '("oddheading" TeXinfo-lrc-argument-hook)
|
|
338 '("page")
|
|
339 '("paragraphindent" "Indent")
|
|
340 '("pindex" "Entry")
|
|
341 '("point")
|
|
342 '("print")
|
|
343 '("printindex" "Index-name")
|
|
344 '("pxref" "Node-name")
|
|
345 '("r" "Text")
|
|
346 '("ref" "Node-name")
|
|
347 '("refill")
|
|
348 '("result")
|
|
349 '("samp" "Text")
|
|
350 '("sc" "Text")
|
|
351 '("section" "Title")
|
|
352 '("set" "Flag")
|
|
353 '("setchapternewpage" "On-off-odd")
|
|
354 '("setfilename" "Info-file-name")
|
|
355 '("settitle" "Title")
|
|
356 '("shortcontents")
|
|
357 '("smallbook")
|
|
358 '("sp" "N")
|
|
359 '("strong" "Text")
|
|
360 '("subheading" "Title")
|
|
361 '("subsection" "Title")
|
|
362 '("subsubheading" "Title")
|
|
363 '("subsubsection" "Title")
|
|
364 '("subtitle" "Title")
|
|
365 '("summarycontents")
|
|
366 '("syncodeindex" "From-index" "Into-index")
|
|
367 '("synindex" "From-index" "Into-index")
|
|
368 '("t" "Text")
|
|
369 '("TeX")
|
|
370 '("thischapter")
|
|
371 '("thischaptername")
|
|
372 '("thisfile")
|
|
373 '("thispage")
|
|
374 '("tindex" "Entry")
|
|
375 '("title" "Title")
|
|
376 '("titlefont" "Text")
|
|
377 '("titlepage")
|
|
378 '("today")
|
|
379 '("top" "Title")
|
|
380 '("unnumbered" "Title")
|
|
381 '("unnumberedsec" "Title")
|
|
382 '("unnumberedsubsec" "Title")
|
|
383 '("unnumberedsubsubsec" "Title")
|
|
384 '("value" "Flag")
|
|
385 '("var" "Metasyntactic-variable")
|
|
386 '("vindex" "Entry")
|
|
387 '("vskip" "Amount")
|
|
388 '("w" "Text"))
|
|
389
|
|
390 (run-hooks 'text-mode-hook 'TeXinfo-mode-hook))
|
|
391
|
|
392 (provide 'tex-info)
|
|
393
|
|
394 ;;; tex-info.el ends here
|