Mercurial > emacs
annotate lisp/textmodes/tex-mode.el @ 2576:48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
to be applied manually. It's not worth trying to integrate this with
the rest of the mode more tightly until we decide whether and how
compile's interface is going to change away from a closed subsystem.
author | Eric S. Raymond <esr@snark.thyrsus.com> |
---|---|
date | Sun, 25 Apr 1993 06:14:10 +0000 |
parents | b65cf676a09b |
children | b0a1846fe3b8 |
rev | line source |
---|---|
657
fec3f9a1e3e5
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
1 ;;; tex-mode.el --- TeX, LaTeX, and SliTeX mode commands. |
fec3f9a1e3e5
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
2 |
840
113281b361ec
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
814
diff
changeset
|
3 ;; Copyright (C) 1985, 1986, 1989, 1992 Free Software Foundation, Inc. |
113281b361ec
*** empty log message ***
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:
758
diff
changeset
|
5 ;; Maintainer: Edward M. Reingold <reingold@cs.uiuc.edu> |
814
38b2499cb3e9
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
807
diff
changeset
|
6 ;; Keywords: tex |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
758
diff
changeset
|
7 |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
8 ;; Contributions over the years by William F. Schelter, Dick King, |
2576
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
9 ;; Stephen Gildea, Michael Prange, and Jacob Gore. |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
10 |
85 | 11 ;; This file is part of GNU Emacs. |
12 | |
13 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
14 ;; 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:
758
diff
changeset
|
15 ;; the Free Software Foundation; either version 2, or (at your option) |
85 | 16 ;; any later version. |
17 | |
18 ;; GNU Emacs is distributed in the hope that it will be useful, | |
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 ;; GNU General Public License for more details. | |
22 | |
23 ;; You should have received a copy of the GNU General Public License | |
24 ;; along with GNU Emacs; see the file COPYING. If not, write to | |
25 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
26 | |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
758
diff
changeset
|
27 ;;; Code: |
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
758
diff
changeset
|
28 |
870
1b3af6ad85be
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
840
diff
changeset
|
29 ;; This was a pain. Now, make-comint should autoload comint. |
1b3af6ad85be
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
840
diff
changeset
|
30 ;; (require 'comint) |
2576
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
31 (require 'compile) |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
32 |
957 | 33 ;;;###autoload |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
34 (defvar tex-shell-file-name nil |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
35 "*If non-nil, is file name to use for the subshell in which TeX is run.") |
85 | 36 |
957 | 37 ;;;###autoload |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
38 (defvar tex-directory "." |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
39 "*Directory in which temporary files are left. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
40 You can make this /tmp if your TEXINPUTS has no relative directories in it |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
41 and you don't try to apply \\[tex-region] or \\[tex-buffer] when there are |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
42 \\input commands with relative directories.") |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
43 |
957 | 44 ;;;###autoload |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
45 (defvar tex-offer-save t |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
46 "*If non-nil, ask about saving modified buffers before \\[tex-file] is run.") |
85 | 47 |
957 | 48 ;;;###autoload |
85 | 49 (defvar tex-run-command "tex" |
50 "*Command used to run TeX subjob. | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
51 If this string contains an asterisk (*), it will be replaced by the |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
52 filename; if not, the name of the file, preceded by blank, will be added to |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
53 this string.") |
85 | 54 |
957 | 55 ;;;###autoload |
85 | 56 (defvar latex-run-command "latex" |
57 "*Command used to run LaTeX subjob. | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
58 If this string contains an asterisk (*), it will be replaced by the |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
59 filename; if not, the name of the file, preceded by blank, will be added to |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
60 this string.") |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
61 |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
62 (defvar standard-latex-block-names |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
63 '("abstract" "array" "center" "description" |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
64 "displaymath" "document" "enumerate" "eqnarray" |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
65 "eqnarray*" "equation" "figure" "figure*" |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
66 "flushleft" "flushright" "itemize" "letter" |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
67 "list" "minipage" "picture" "quotation" |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
68 "quote" "slide" "sloppypar" "tabbing" |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
69 "table" "table*" "tabular" "tabular*" |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
70 "thebibliography" "theindex*" "titlepage" "trivlist" |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
71 "verbatim" "verbatim*" "verse") |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
72 "Standard LaTeX block names.") |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
73 |
957 | 74 ;;;###autoload |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
75 (defvar latex-block-names nil |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
76 "*User defined LaTeX block names. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
77 Combined with `standard-latex-block-names' for minibuffer completion.") |
85 | 78 |
957 | 79 ;;;###autoload |
85 | 80 (defvar slitex-run-command "slitex" |
81 "*Command used to run SliTeX subjob. | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
82 If this string contains an asterisk (*), it will be replaced by the |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
83 filename; if not, the name of the file, preceded by blank, will be added to |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
84 this string.") |
85 | 85 |
957 | 86 ;;;###autoload |
85 | 87 (defvar tex-bibtex-command "bibtex" |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
88 "*Command used by `tex-bibtex-file' to gather bibliographic data. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
89 If this string contains an asterisk (*), it will be replaced by the |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
90 filename; if not, the name of the file, preceded by blank, will be added to |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
91 this string.") |
85 | 92 |
957 | 93 ;;;###autoload |
85 | 94 (defvar tex-dvi-print-command "lpr -d" |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
95 "*Command used by \\[tex-print] to print a .dvi file. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
96 If this string contains an asterisk (*), it will be replaced by the |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
97 filename; if not, the name of the file, preceded by blank, will be added to |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
98 this string.") |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
99 |
957 | 100 ;;;###autoload |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
101 (defvar tex-alt-dvi-print-command "lpr -d" |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
102 "*Command used by \\[tex-print] with a prefix arg to print a .dvi file. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
103 If this string contains an asterisk (*), it will be replaced by the |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
104 filename; if not, the name of the file, preceded by blank, will be added to |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
105 this string. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
106 |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
107 If two printers are not enough of a choice, you can define the value |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
108 of tex-alt-dvi-print-command to be an expression that asks what you want; |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
109 for example, |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
110 |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
111 (setq tex-alt-dvi-print-command |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
112 '(format \"lpr -P%s\" (read-string \"Use printer: \"))) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
113 |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
114 would tell \\[tex-print] with a prefix argument to ask you which printer to |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
115 use.") |
85 | 116 |
957 | 117 ;;;###autoload |
85 | 118 (defvar tex-dvi-view-command nil |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
119 "*Command used by \\[tex-view] to display a .dvi file. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
120 If this string contains an asterisk (*), it will be replaced by the |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
121 filename; if not, the name of the file, preceded by blank, will be added to |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
122 this string. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
123 |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
124 This can be set conditionally so that the previewer used is suitable for the |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
125 window system being used. For example, |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
126 |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
127 (setq tex-dvi-view-command |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
128 (if (eq window-system 'x) \"xdvi\" \"dvi2tty * | cat -s\")) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
129 |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
130 would tell \\[tex-view] use xdvi under X windows and to use dvi2tty |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
131 otherwise.") |
85 | 132 |
957 | 133 ;;;###autoload |
85 | 134 (defvar tex-show-queue-command "lpq" |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
135 "*Command used by \\[tex-show-print-queue] to show the print queue. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
136 Should show the queue(s) that \\[tex-print] puts jobs on.") |
85 | 137 |
957 | 138 ;;;###autoload |
85 | 139 (defvar tex-default-mode 'plain-tex-mode |
140 "*Mode to enter for a new file that might be either TeX or LaTeX. | |
141 This variable is used when it can't be determined whether the file | |
142 is plain TeX or LaTeX or what because the file contains no commands. | |
143 Normally set to either 'plain-tex-mode or 'latex-mode.") | |
144 | |
957 | 145 ;;;###autoload |
85 | 146 (defvar tex-open-quote "``" |
147 "*String inserted by typing \\[tex-insert-quote] to open a quotation.") | |
148 | |
957 | 149 ;;;###autoload |
85 | 150 (defvar tex-close-quote "''" |
151 "*String inserted by typing \\[tex-insert-quote] to close a quotation.") | |
152 | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
153 (defvar tex-last-temp-file nil |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
154 "Latest temporary file generated by \\[tex-region] and \\[tex-buffer]. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
155 Deleted when the \\[tex-region] or \\[tex-buffer] is next run, or when the |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
156 tex-shell goes away.") |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
157 |
85 | 158 (defvar tex-command nil |
159 "Command to run TeX. | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
160 The name of the file, preceded by a blank, will be added to this string.") |
85 | 161 |
162 (defvar tex-trailer nil | |
163 "String appended after the end of a region sent to TeX by \\[tex-region].") | |
164 | |
165 (defvar tex-start-of-header nil | |
166 "String used by \\[tex-region] to delimit the start of the file's header.") | |
167 | |
168 (defvar tex-end-of-header nil | |
169 "String used by \\[tex-region] to delimit the end of the file's header.") | |
170 | |
171 (defvar tex-shell-cd-command "cd" | |
172 "Command to give to shell running TeX to change directory. | |
173 The value of tex-directory will be appended to this, separated by a space.") | |
174 | |
175 (defvar tex-zap-file nil | |
176 "Temporary file name used for text being sent as input to TeX. | |
177 Should be a simple file name with no extension or directory specification.") | |
178 | |
179 (defvar tex-last-buffer-texed nil | |
180 "Buffer which was last TeXed.") | |
181 | |
182 (defvar tex-print-file nil | |
183 "File name that \\[tex-print] prints. | |
184 Set by \\[tex-region], \\[tex-buffer], and \\[tex-file].") | |
185 | |
186 (defvar tex-mode-syntax-table nil | |
187 "Syntax table used while in TeX mode.") | |
188 | |
189 (defun tex-define-common-keys (keymap) | |
190 "Define the keys that we want defined both in TeX mode and in the tex-shell." | |
191 (define-key keymap "\C-c\C-k" 'tex-kill-job) | |
192 (define-key keymap "\C-c\C-l" 'tex-recenter-output-buffer) | |
193 (define-key keymap "\C-c\C-q" 'tex-show-print-queue) | |
194 (define-key keymap "\C-c\C-p" 'tex-print) | |
195 (define-key keymap "\C-c\C-v" 'tex-view) | |
196 ) | |
197 | |
198 (defvar tex-mode-map nil "Keymap for TeX mode.") | |
199 | |
200 (if tex-mode-map | |
201 nil | |
202 (setq tex-mode-map (make-sparse-keymap)) | |
203 (tex-define-common-keys tex-mode-map) | |
204 (define-key tex-mode-map "\"" 'tex-insert-quote) | |
205 (define-key tex-mode-map "\n" 'tex-terminate-paragraph) | |
206 (define-key tex-mode-map "\C-c}" 'up-list) | |
207 (define-key tex-mode-map "\C-c{" 'tex-insert-braces) | |
208 (define-key tex-mode-map "\C-c\C-r" 'tex-region) | |
209 (define-key tex-mode-map "\C-c\C-b" 'tex-buffer) | |
210 (define-key tex-mode-map "\C-c\C-f" 'tex-file) | |
211 (define-key tex-mode-map "\C-c\C-i" 'tex-bibtex-file) | |
212 (define-key tex-mode-map "\C-c\C-o" 'tex-latex-block) | |
213 (define-key tex-mode-map "\C-c\C-e" 'tex-close-latex-block)) | |
214 | |
215 (defvar tex-shell-map nil | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
216 "Keymap for the tex-shell. A comint-mode-map with a few additions.") |
85 | 217 |
2571
b65cf676a09b
All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
218 ;(defalias 'TeX-mode 'tex-mode) ;in loaddefs. |
85 | 219 |
220 ;;; This would be a lot simpler if we just used a regexp search, | |
221 ;;; but then it would be too slow. | |
256 | 222 ;;;###autoload |
85 | 223 (defun tex-mode () |
224 "Major mode for editing files of input for TeX, LaTeX, or SliTeX. | |
225 Tries to determine (by looking at the beginning of the file) whether | |
226 this file is for plain TeX, LaTeX, or SliTeX and calls plain-tex-mode, | |
227 latex-mode, or slitex-mode, respectively. If it cannot be determined, | |
228 such as if there are no commands in the file, the value of tex-default-mode | |
229 is used." | |
230 (interactive) | |
231 (let (mode slash comment) | |
232 (save-excursion | |
233 (goto-char (point-min)) | |
234 (while (and (setq slash (search-forward "\\" nil t)) | |
235 (setq comment (let ((search-end (point))) | |
236 (save-excursion | |
237 (beginning-of-line) | |
238 (search-forward "%" search-end t)))))) | |
239 (if (and slash (not comment)) | |
240 (setq mode (if (looking-at "documentstyle") | |
241 (if (looking-at "documentstyle{slides}") | |
242 'slitex-mode | |
243 'latex-mode) | |
244 'plain-tex-mode)))) | |
245 (if mode (funcall mode) | |
246 (funcall tex-default-mode)))) | |
269 | 247 ;;;###autoload |
2571
b65cf676a09b
All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
248 (defalias 'TeX-mode 'tex-mode) |
269 | 249 ;;;###autoload |
2571
b65cf676a09b
All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
250 (defalias 'LaTeX-mode 'latex-mode) |
85 | 251 |
256 | 252 ;;;###autoload |
85 | 253 (defun plain-tex-mode () |
254 "Major mode for editing files of input for plain TeX. | |
255 Makes $ and } display the characters they match. | |
256 Makes \" insert `` when it seems to be the beginning of a quotation, | |
257 and '' when it appears to be the end; it inserts \" only after a \\. | |
258 | |
259 Use \\[tex-region] to run TeX on the current region, plus a \"header\" | |
260 copied from the top of the file (containing macro definitions, etc.), | |
261 running TeX under a special subshell. \\[tex-buffer] does the whole buffer. | |
262 \\[tex-file] saves the buffer and then processes the file. | |
263 \\[tex-print] prints the .dvi file made by any of these. | |
264 \\[tex-view] previews the .dvi file made by any of these. | |
265 \\[tex-bibtex-file] runs bibtex on the file of the current buffer. | |
266 | |
267 Use \\[validate-tex-buffer] to check buffer for paragraphs containing | |
268 mismatched $'s or braces. | |
269 | |
270 Special commands: | |
271 \\{tex-mode-map} | |
272 | |
273 Mode variables: | |
274 tex-run-command | |
275 Command string used by \\[tex-region] or \\[tex-buffer]. | |
276 tex-directory | |
277 Directory in which to create temporary files for TeX jobs | |
278 run by \\[tex-region] or \\[tex-buffer]. | |
279 tex-dvi-print-command | |
280 Command string used by \\[tex-print] to print a .dvi file. | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
281 tex-alt-dvi-print-command |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
282 Alternative command string used by \\[tex-print] (when given a prefix |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
283 argument) to print a .dvi file. |
85 | 284 tex-dvi-view-command |
285 Command string used by \\[tex-view] to preview a .dvi file. | |
286 tex-show-queue-command | |
287 Command string used by \\[tex-show-print-queue] to show the print | |
288 queue that \\[tex-print] put your job on. | |
289 | |
290 Entering Plain-tex mode calls the value of text-mode-hook, then the value of | |
291 tex-mode-hook, and then the value of plain-tex-mode-hook. When the special | |
292 subshell is initiated, the value of tex-shell-hook is called." | |
293 (interactive) | |
294 (tex-common-initialization) | |
295 (setq mode-name "TeX") | |
296 (setq major-mode 'plain-tex-mode) | |
297 (setq tex-command tex-run-command) | |
298 (setq tex-start-of-header "%**start of header") | |
299 (setq tex-end-of-header "%**end of header") | |
300 (setq tex-trailer "\\bye\n") | |
301 (run-hooks 'text-mode-hook 'tex-mode-hook 'plain-tex-mode-hook)) | |
269 | 302 ;;;###autoload |
2571
b65cf676a09b
All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
303 (defalias 'plain-TeX-mode 'plain-tex-mode) |
85 | 304 |
256 | 305 ;;;###autoload |
85 | 306 (defun latex-mode () |
307 "Major mode for editing files of input for LaTeX. | |
308 Makes $ and } display the characters they match. | |
309 Makes \" insert `` when it seems to be the beginning of a quotation, | |
310 and '' when it appears to be the end; it inserts \" only after a \\. | |
311 | |
312 Use \\[tex-region] to run LaTeX on the current region, plus the preamble | |
313 copied from the top of the file (containing \\documentstyle, etc.), | |
314 running LaTeX under a special subshell. \\[tex-buffer] does the whole buffer. | |
315 \\[tex-file] saves the buffer and then processes the file. | |
316 \\[tex-print] prints the .dvi file made by any of these. | |
317 \\[tex-view] previews the .dvi file made by any of these. | |
318 \\[tex-bibtex-file] runs bibtex on the file of the current buffer. | |
319 | |
320 Use \\[validate-tex-buffer] to check buffer for paragraphs containing | |
321 mismatched $'s or braces. | |
322 | |
323 Special commands: | |
324 \\{tex-mode-map} | |
325 | |
326 Mode variables: | |
327 latex-run-command | |
328 Command string used by \\[tex-region] or \\[tex-buffer]. | |
329 tex-directory | |
330 Directory in which to create temporary files for LaTeX jobs | |
331 run by \\[tex-region] or \\[tex-buffer]. | |
332 tex-dvi-print-command | |
333 Command string used by \\[tex-print] to print a .dvi file. | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
334 tex-alt-dvi-print-command |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
335 Alternative command string used by \\[tex-print] (when given a prefix |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
336 argument) to print a .dvi file. |
85 | 337 tex-dvi-view-command |
338 Command string used by \\[tex-view] to preview a .dvi file. | |
339 tex-show-queue-command | |
340 Command string used by \\[tex-show-print-queue] to show the print | |
341 queue that \\[tex-print] put your job on. | |
342 | |
343 Entering Latex mode calls the value of text-mode-hook, then the value of | |
344 tex-mode-hook, and then the value of latex-mode-hook. When the special | |
345 subshell is initiated, the value of tex-shell-hook is called." | |
346 (interactive) | |
347 (tex-common-initialization) | |
348 (setq mode-name "LaTeX") | |
349 (setq major-mode 'latex-mode) | |
350 (setq tex-command latex-run-command) | |
351 (setq tex-start-of-header "\\documentstyle") | |
352 (setq tex-end-of-header "\\begin{document}") | |
353 (setq tex-trailer "\\end{document}\n") | |
354 (run-hooks 'text-mode-hook 'tex-mode-hook 'latex-mode-hook)) | |
355 | |
356 (defun slitex-mode () | |
357 "Major mode for editing files of input for SliTeX. | |
358 Makes $ and } display the characters they match. | |
359 Makes \" insert `` when it seems to be the beginning of a quotation, | |
360 and '' when it appears to be the end; it inserts \" only after a \\. | |
361 | |
362 Use \\[tex-region] to run SliTeX on the current region, plus the preamble | |
363 copied from the top of the file (containing \\documentstyle, etc.), | |
364 running SliTeX under a special subshell. \\[tex-buffer] does the whole buffer. | |
365 \\[tex-file] saves the buffer and then processes the file. | |
366 \\[tex-print] prints the .dvi file made by any of these. | |
367 \\[tex-view] previews the .dvi file made by any of these. | |
368 \\[tex-bibtex-file] runs bibtex on the file of the current buffer. | |
369 | |
370 Use \\[validate-tex-buffer] to check buffer for paragraphs containing | |
371 mismatched $'s or braces. | |
372 | |
373 Special commands: | |
374 \\{tex-mode-map} | |
375 | |
376 Mode variables: | |
377 slitex-run-command | |
378 Command string used by \\[tex-region] or \\[tex-buffer]. | |
379 tex-directory | |
380 Directory in which to create temporary files for SliTeX jobs | |
381 run by \\[tex-region] or \\[tex-buffer]. | |
382 tex-dvi-print-command | |
383 Command string used by \\[tex-print] to print a .dvi file. | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
384 tex-alt-dvi-print-command |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
385 Alternative command string used by \\[tex-print] (when given a prefix |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
386 argument) to print a .dvi file. |
85 | 387 tex-dvi-view-command |
388 Command string used by \\[tex-view] to preview a .dvi file. | |
389 tex-show-queue-command | |
390 Command string used by \\[tex-show-print-queue] to show the print | |
391 queue that \\[tex-print] put your job on. | |
392 | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
393 Entering SliTeX mode calls the value of text-mode-hook, then the value of |
85 | 394 tex-mode-hook, then the value of latex-mode-hook, and then the value of |
395 slitex-mode-hook. When the special subshell is initiated, the value of | |
396 tex-shell-hook is called." | |
397 (interactive) | |
398 (tex-common-initialization) | |
399 (setq mode-name "SliTeX") | |
400 (setq major-mode 'slitex-mode) | |
401 (setq tex-command slitex-run-command) | |
402 (setq tex-start-of-header "\\documentstyle{slides}") | |
403 (setq tex-end-of-header "\\begin{document}") | |
404 (setq tex-trailer "\\end{document}\n") | |
405 (run-hooks | |
406 'text-mode-hook 'tex-mode-hook 'latex-mode-hook 'slitex-mode-hook)) | |
407 | |
408 (defun tex-common-initialization () | |
409 (kill-all-local-variables) | |
410 (use-local-map tex-mode-map) | |
411 (setq local-abbrev-table text-mode-abbrev-table) | |
412 (if (null tex-mode-syntax-table) | |
413 (let ((char 0)) | |
414 (setq tex-mode-syntax-table (make-syntax-table)) | |
415 (set-syntax-table tex-mode-syntax-table) | |
416 (while (< char ? ) | |
417 (modify-syntax-entry char ".") | |
418 (setq char (1+ char))) | |
419 (modify-syntax-entry ?\C-@ "w") | |
420 (modify-syntax-entry ?\t " ") | |
421 (modify-syntax-entry ?\n ">") | |
422 (modify-syntax-entry ?\f ">") | |
423 (modify-syntax-entry ?$ "$$") | |
424 (modify-syntax-entry ?% "<") | |
425 (modify-syntax-entry ?\\ "/") | |
426 (modify-syntax-entry ?\" ".") | |
427 (modify-syntax-entry ?& ".") | |
428 (modify-syntax-entry ?_ ".") | |
429 (modify-syntax-entry ?@ "_") | |
430 (modify-syntax-entry ?~ " ") | |
431 (modify-syntax-entry ?' "w")) | |
432 (set-syntax-table tex-mode-syntax-table)) | |
433 (make-local-variable 'paragraph-start) | |
434 (setq paragraph-start "^[ \t]*$\\|^[\f\\\\%]") | |
435 (make-local-variable 'paragraph-separate) | |
436 (setq paragraph-separate paragraph-start) | |
437 (make-local-variable 'comment-start) | |
438 (setq comment-start "%") | |
439 (make-local-variable 'comment-start-skip) | |
440 (setq comment-start-skip "\\(\\(^\\|[^\\]\\)\\(\\\\\\\\\\)*\\)\\(%+ *\\)") | |
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2265
diff
changeset
|
441 (make-local-variable 'comment-indent-function) |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2265
diff
changeset
|
442 (setq comment-indent-function 'tex-comment-indent) |
85 | 443 (make-local-variable 'compare-windows-whitespace) |
444 (setq compare-windows-whitespace 'tex-categorize-whitespace) | |
445 (make-local-variable 'tex-command) | |
446 (make-local-variable 'tex-start-of-header) | |
447 (make-local-variable 'tex-end-of-header) | |
448 (make-local-variable 'tex-trailer)) | |
449 | |
450 (defun tex-comment-indent () | |
451 (if (looking-at "%%%") | |
452 (current-column) | |
453 (skip-chars-backward " \t") | |
454 (max (if (bolp) 0 (1+ (current-column))) | |
455 comment-column))) | |
456 | |
457 (defun tex-categorize-whitespace (backward-limit) | |
458 ;; compare-windows-whitespace is set to this. | |
459 ;; This is basically a finite-state machine. | |
460 ;; Returns a symbol telling how TeX would treat | |
461 ;; the whitespace we are looking at: null, space, or par. | |
462 (let ((category 'null) | |
463 (not-finished t)) | |
464 (skip-chars-backward " \t\n\f" backward-limit) | |
465 (while not-finished | |
466 (cond ((looking-at "[ \t]+") | |
467 (goto-char (match-end 0)) | |
468 (if (eql category 'null) | |
469 (setq category 'space))) | |
470 ((looking-at "\n") | |
471 (cond ((eql category 'newline) | |
472 (setq category 'par) | |
473 (setq not-finished nil)) | |
474 (t | |
475 (setq category 'newline) ;a strictly internal state | |
476 (goto-char (match-end 0))))) | |
477 ((looking-at "\f+") | |
478 (setq category 'par) | |
479 (setq not-finished nil)) | |
480 (t | |
481 (setq not-finished nil)))) | |
482 (skip-chars-forward " \t\n\f") | |
483 (if (eql category 'newline) | |
484 'space ;TeX doesn't distinguish | |
485 category))) | |
486 | |
487 (defun tex-insert-quote (arg) | |
488 "Insert the appropriate quote marks for TeX. | |
489 Inserts the value of tex-open-quote (normally ``) or tex-close-quote | |
490 (normally '') depending on the context. With prefix argument, always | |
491 inserts \" characters." | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
492 (interactive "*P") |
85 | 493 (if arg |
494 (self-insert-command (prefix-numeric-value arg)) | |
495 (insert | |
496 (cond ((or (bobp) | |
497 (save-excursion | |
498 (forward-char -1) | |
499 (looking-at "\\s(\\|\\s \\|\\s>"))) | |
500 tex-open-quote) | |
501 ((= (preceding-char) ?\\) | |
502 ?\") | |
503 (t | |
504 tex-close-quote))))) | |
505 | |
506 (defun validate-tex-buffer () | |
507 "Check current buffer for paragraphs containing mismatched $'s. | |
508 As each such paragraph is found, a mark is pushed at its beginning, | |
509 and the location is displayed for a few seconds." | |
510 (interactive) | |
511 (let ((opoint (point))) | |
512 (goto-char (point-max)) | |
513 ;; Does not use save-excursion | |
514 ;; because we do not want to save the mark. | |
515 (unwind-protect | |
516 (while (and (not (input-pending-p)) (not (bobp))) | |
517 (let ((end (point))) | |
518 (search-backward "\n\n" nil 'move) | |
519 (or (tex-validate-region (point) end) | |
520 (progn | |
521 (push-mark (point)) | |
522 (message "Mismatch found in pararaph starting here") | |
523 (sit-for 4))))) | |
524 (goto-char opoint)))) | |
525 | |
526 (defun tex-validate-region (start end) | |
527 "Check for mismatched braces or $'s in region. | |
528 Returns t if no mismatches. Returns nil and moves point to suspect | |
529 area if a mismatch is found." | |
530 (interactive "r") | |
531 (let ((failure-point nil) (max-possible-sexps (- end start))) | |
532 (save-excursion | |
533 (condition-case () | |
534 (save-restriction | |
535 (narrow-to-region start end) | |
536 (goto-char start) | |
537 (while (< 0 (setq max-possible-sexps (1- max-possible-sexps))) | |
538 (forward-sexp 1))) | |
539 (error | |
540 (setq failure-point (point))))) | |
541 (if failure-point | |
542 (progn | |
543 (goto-char failure-point) | |
544 nil) | |
545 t))) | |
546 | |
547 (defun tex-terminate-paragraph (inhibit-validation) | |
548 "Insert two newlines, breaking a paragraph for TeX. | |
549 Check for mismatched braces/$'s in paragraph being terminated. | |
550 A prefix arg inhibits the checking." | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
551 (interactive "*P") |
85 | 552 (or inhibit-validation |
553 (save-excursion | |
554 (tex-validate-region | |
555 (save-excursion | |
556 (search-backward "\n\n" nil 'move) | |
557 (point)) | |
558 (point))) | |
559 (message "Paragraph being closed appears to contain a mismatch")) | |
560 (insert "\n\n")) | |
561 | |
562 (defun tex-insert-braces () | |
563 "Make a pair of braces and be poised to type inside of them." | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
564 (interactive "*") |
85 | 565 (insert ?\{) |
566 (save-excursion | |
567 (insert ?}))) | |
568 | |
569 ;;; Like tex-insert-braces, but for LaTeX. | |
570 (defun tex-latex-block (name) | |
571 "Creates a matching pair of lines \\begin{NAME} and \\end{NAME} at point. | |
572 Puts point on a blank line between them." | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
573 (interactive |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
574 (prog2 |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
575 (barf-if-buffer-read-only) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
576 (list |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
577 (completing-read "LaTeX block name: " |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
578 (mapcar 'list |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
579 (append standard-latex-block-names |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
580 latex-block-names)))))) |
85 | 581 (let ((col (current-column))) |
582 (insert (format "\\begin{%s}\n" name)) | |
583 (indent-to col) | |
584 (save-excursion | |
585 (insert ?\n) | |
586 (indent-to col) | |
587 (insert-string (format "\\end{%s}" name)) | |
588 (if (eobp) (insert ?\n))))) | |
589 | |
590 (defun tex-last-unended-begin () | |
591 "Leave point at the beginning of the last \\begin{...} that is unended." | |
592 (while (and (re-search-backward "\\(\\\\begin\\s *{\\)\\|\\(\\\\end\\s *{\\)") | |
593 (looking-at "\\\\end{")) | |
594 (tex-last-unended-begin))) | |
595 | |
596 (defun tex-close-latex-block () | |
597 "Creates an \\end{...} to match the last unclosed \\begin{...}." | |
598 (interactive "*") | |
599 (let ((new-line-needed (bolp)) | |
600 text indentation) | |
601 (save-excursion | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
602 (condition-case nil |
85 | 603 (tex-last-unended-begin) |
604 (error (error "Couldn't find unended \\begin"))) | |
605 (setq indentation (current-column)) | |
606 (re-search-forward "\\\\begin\\(\\s *{[^}\n]*}\\)") | |
607 (setq text (buffer-substring (match-beginning 1) (match-end 1)))) | |
608 (indent-to indentation) | |
609 (insert "\\end" text) | |
610 (if new-line-needed (insert ?\n)))) | |
611 | |
2576
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
612 (defun tex-compilation-parse-errors () |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
613 "Parse the current buffer as error messages. |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
614 This makes a list of error descriptors, compilation-error-list. |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
615 For each source-file, line-number pair in the buffer, |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
616 the source file is read in, and the text location is saved in |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
617 compilation-error-list. The function next-error, assigned to |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
618 \\[next-error], takes the next error off the list and visits its location. |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
619 |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
620 This function works on TeX compilations only. It is necessary for |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
621 that purpose, since TeX does not put file names on the same line as |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
622 line numbers for the errors." |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
623 (setq compilation-error-list nil) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
624 (message "Parsing error messages...") |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
625 (modify-syntax-entry ?\{ "_") |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
626 (modify-syntax-entry ?\} "_") |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
627 (modify-syntax-entry ?\[ "_") |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
628 (modify-syntax-entry ?\] "_") |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
629 (make-variable-buffer-local 'compilation-error-regexp) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
630 (setq compilation-error-regexp "^l\.[0-9]+ ") |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
631 (let (text-buffer |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
632 last-filename last-linenum) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
633 ;; Don't reparse messages already seen at last parse. |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
634 (goto-char compilation-parsing-end) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
635 ;; Don't parse the first two lines as error messages. |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
636 ;; This matters for grep. |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
637 (if (bobp) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
638 (forward-line 2)) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
639 (while (re-search-forward compilation-error-regexp nil t) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
640 (let (linenum filename |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
641 error-marker text-marker) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
642 ;; Extract file name and line number from error message. |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
643 ;; Line number is 2 away from beginning of line: "l.23" |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
644 (beginning-of-line) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
645 (goto-char (+ (point) 2)) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
646 (setq linenum (read (current-buffer))) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
647 ;; The file is the one that was opened last and is still open. |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
648 ;; We need to find the last open parenthesis. |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
649 (insert ?\)) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
650 (backward-sexp) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
651 (forward-char) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
652 (setq filename (compilation-grab-filename)) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
653 ;; Locate the erring file and line. |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
654 (if (and (equal filename last-filename) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
655 (= linenum last-linenum)) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
656 nil |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
657 (skip-chars-backward "^(") |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
658 (backward-char) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
659 (forward-sexp) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
660 (backward-delete-char 1) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
661 (setq error-marker (point-marker)) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
662 ;; text-buffer gets the buffer containing this error's file. |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
663 (if (not (equal filename last-filename)) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
664 (setq text-buffer |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
665 (and (file-exists-p (setq last-filename filename)) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
666 (find-file-noselect filename)) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
667 last-linenum 0)) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
668 (if text-buffer |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
669 ;; Go to that buffer and find the erring line. |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
670 (save-excursion |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
671 (set-buffer text-buffer) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
672 (if (zerop last-linenum) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
673 (progn |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
674 (goto-char 1) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
675 (setq last-linenum 1))) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
676 (forward-line (- linenum last-linenum)) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
677 (setq last-linenum linenum) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
678 (setq text-marker (point-marker)) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
679 (setq compilation-error-list |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
680 (cons (list error-marker text-marker) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
681 compilation-error-list))))) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
682 (forward-line 1))) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
683 (setq compilation-parsing-end (point-max))) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
684 (message "Parsing error messages...done") |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
685 (setq compilation-error-list (nreverse compilation-error-list))) |
48318133e7a6
(tex-compilation-parse-errors): Added. At the moment, this would have
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2571
diff
changeset
|
686 |
85 | 687 ;;; Invoking TeX in an inferior shell. |
688 | |
689 ;;; Why use a shell instead of running TeX directly? Because if TeX | |
690 ;;; gets stuck, the user can switch to the shell window and type at it. | |
691 | |
692 ;;; The utility functions: | |
693 | |
694 (defun tex-start-shell () | |
695 (save-excursion | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
696 (set-buffer |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
697 (make-comint |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
698 "tex-shell" |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
699 (or tex-shell-file-name (getenv "ESHELL") (getenv "SHELL") "/bin/sh") |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
700 nil "-v")) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
701 (let ((proc (get-process "tex-shell"))) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
702 (set-process-sentinel proc 'tex-shell-sentinel) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
703 (process-kill-without-query proc) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
704 (setq tex-shell-map (copy-keymap comint-mode-map)) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
705 (tex-define-common-keys tex-shell-map) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
706 (use-local-map tex-shell-map) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
707 (run-hooks 'tex-shell-hook) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
708 (while (zerop (buffer-size)) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
709 (sleep-for 1))))) |
85 | 710 |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
711 (defun tex-shell-sentinel (proc msg) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
712 (cond ((null (buffer-name (process-buffer proc))) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
713 ;; buffer killed |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
714 (set-process-buffer proc nil) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
715 (tex-delete-last-temp-files)) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
716 ((memq (process-status proc) '(signal exit)) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
717 (tex-delete-last-temp-files)))) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
718 |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
719 (defun tex-set-buffer-directory (buffer directory) |
85 | 720 "Set BUFFER's default directory to be DIRECTORY." |
721 (setq directory (file-name-as-directory (expand-file-name directory))) | |
722 (if (not (file-directory-p directory)) | |
723 (error "%s is not a directory" directory) | |
724 (save-excursion | |
725 (set-buffer buffer) | |
726 (setq default-directory directory)))) | |
727 | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
728 (defun tex-send-command (command &optional file background) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
729 "Send COMMAND to tex-shell, substituting optional FILE for *; in background |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
730 if optional BACKGROUND is t. If COMMAND has no *, FILE will be appended, |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
731 preceded by a blank, to COMMAND. If FILE is nil, no substitution will be made |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
732 in COMMAND. COMMAND can be any expression that evaluates to a command string." |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
733 (save-excursion |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
734 (let* ((cmd (eval command)) |
2265
daf268a98d5e
* tex-mode.el (tex-send-command): Fix the command sent so that no
Jim Blandy <jimb@redhat.com>
parents:
1577
diff
changeset
|
735 (star (string-match "\\*" cmd)) |
daf268a98d5e
* tex-mode.el (tex-send-command): Fix the command sent so that no
Jim Blandy <jimb@redhat.com>
parents:
1577
diff
changeset
|
736 (front (substring cmd 0 star)) |
daf268a98d5e
* tex-mode.el (tex-send-command): Fix the command sent so that no
Jim Blandy <jimb@redhat.com>
parents:
1577
diff
changeset
|
737 (back (if star (substring cmd (1+ star)) ""))) |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
738 (comint-proc-query (get-process "tex-shell") |
2265
daf268a98d5e
* tex-mode.el (tex-send-command): Fix the command sent so that no
Jim Blandy <jimb@redhat.com>
parents:
1577
diff
changeset
|
739 (concat |
daf268a98d5e
* tex-mode.el (tex-send-command): Fix the command sent so that no
Jim Blandy <jimb@redhat.com>
parents:
1577
diff
changeset
|
740 (if file (if star (concat front file back) |
daf268a98d5e
* tex-mode.el (tex-send-command): Fix the command sent so that no
Jim Blandy <jimb@redhat.com>
parents:
1577
diff
changeset
|
741 (concat cmd " " file)) |
daf268a98d5e
* tex-mode.el (tex-send-command): Fix the command sent so that no
Jim Blandy <jimb@redhat.com>
parents:
1577
diff
changeset
|
742 cmd) |
daf268a98d5e
* tex-mode.el (tex-send-command): Fix the command sent so that no
Jim Blandy <jimb@redhat.com>
parents:
1577
diff
changeset
|
743 (if background "&\n" "\n")))))) |
85 | 744 |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
745 (defun tex-delete-last-temp-files () |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
746 "Delete any junk files from last temp file." |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
747 (if tex-last-temp-file |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
748 (let* ((dir (file-name-directory tex-last-temp-file)) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
749 (list (file-name-all-completions |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
750 (file-name-nondirectory tex-last-temp-file) dir))) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
751 (while list |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
752 (delete-file (concat dir (car list))) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
753 (setq list (cdr list)))))) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
754 |
741
587f7a98341d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
739
diff
changeset
|
755 (add-hook 'kill-emacs-hook 'tex-delete-last-temp-files) |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
756 |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
757 ;;; The commands: |
85 | 758 |
759 (defun tex-region (beg end) | |
760 "Run TeX on the current region, via a temporary file. | |
761 The file's name comes from the variable `tex-zap-file' and the | |
762 variable `tex-directory' says where to put it. | |
763 | |
764 If the buffer has a header, the header is given to TeX before the | |
765 region itself. The buffer's header is all lines between the strings | |
766 defined by `tex-start-of-header' and `tex-end-of-header' inclusive. | |
767 The header must start in the first 100 lines of the buffer. | |
768 | |
769 The value of `tex-trailer' is given to TeX as input after the region. | |
770 | |
771 The value of `tex-command' specifies the command to use to run TeX." | |
772 (interactive "r") | |
773 (if (tex-shell-running) | |
774 (tex-kill-job) | |
775 (tex-start-shell)) | |
776 (or tex-zap-file | |
777 (setq tex-zap-file (tex-generate-zap-file-name))) | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
778 (let* ((temp-buffer (get-buffer-create " TeX-Output-Buffer")) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
779 ; Temp file will be written and TeX will be run in zap-directory. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
780 ; If the TEXINPUTS file has relative directories or if the region has |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
781 ; \input of files, this must be the same directory as the file for |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
782 ; TeX to access the correct inputs. That's why it's safest if |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
783 ; tex-directory is ".". |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
784 (zap-directory |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
785 (file-name-as-directory (expand-file-name tex-directory))) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
786 (tex-out-file (concat zap-directory tex-zap-file))) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
787 (tex-delete-last-temp-files) |
85 | 788 ;; Write the new temp file. |
789 (save-excursion | |
790 (save-restriction | |
791 (widen) | |
792 (goto-char (point-min)) | |
793 (forward-line 100) | |
794 (let ((search-end (point)) | |
795 (hbeg (point-min)) (hend (point-min)) | |
796 (default-directory zap-directory)) | |
797 (goto-char (point-min)) | |
798 ;; Initialize the temp file with either the header or nothing | |
799 (if (search-forward tex-start-of-header search-end t) | |
800 (progn | |
801 (beginning-of-line) | |
802 (setq hbeg (point)) ;mark beginning of header | |
803 (if (search-forward tex-end-of-header nil t) | |
804 (progn (forward-line 1) | |
805 (setq hend (point))) ;mark end of header | |
806 (setq hbeg (point-min))))) ;no header | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
807 (write-region (min hbeg beg) hend |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
808 (concat tex-out-file ".tex") nil nil) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
809 (write-region (max beg hend) end (concat tex-out-file ".tex") t nil)) |
85 | 810 (let ((local-tex-trailer tex-trailer)) |
811 (set-buffer temp-buffer) | |
812 (erase-buffer) | |
813 ;; make sure trailer isn't hidden by a comment | |
814 (insert-string "\n") | |
815 (if local-tex-trailer (insert-string local-tex-trailer)) | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
816 (tex-set-buffer-directory temp-buffer zap-directory) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
817 (write-region (point-min) (point-max) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
818 (concat tex-out-file ".tex") t nil)))) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
819 ;; Record the file name to be deleted afterward. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
820 (setq tex-last-temp-file tex-out-file) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
821 (tex-send-command tex-shell-cd-command zap-directory) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
822 (tex-send-command tex-command tex-out-file) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
823 (setq tex-print-file tex-out-file) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
824 (setq tex-last-buffer-texed (current-buffer)))) |
85 | 825 |
826 (defun tex-buffer () | |
827 "Run TeX on current buffer. See \\[tex-region] for more information. | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
828 Does not save the buffer, so it's useful for trying experimental versions. |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
829 See \\[tex-file] for an alternative." |
85 | 830 (interactive) |
831 (tex-region (point-min) (point-max))) | |
832 | |
833 (defun tex-file () | |
834 "Prompt to save all buffers and run TeX (or LaTeX) on current buffer's file. | |
835 This function is more useful than \\[tex-buffer] when you need the | |
836 `.aux' file of LaTeX to have the correct name." | |
837 (interactive) | |
838 (let ((tex-out-file | |
839 (if (buffer-file-name) | |
840 (file-name-nondirectory (buffer-file-name)) | |
841 (error "Buffer does not seem to be associated with any file"))) | |
842 (file-dir (file-name-directory (buffer-file-name)))) | |
758 | 843 (if tex-offer-save |
741
587f7a98341d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
739
diff
changeset
|
844 (save-some-buffers)) |
85 | 845 (if (tex-shell-running) |
846 (tex-kill-job) | |
847 (tex-start-shell)) | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
848 (tex-send-command tex-shell-cd-command file-dir) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
849 (tex-send-command tex-command tex-out-file)) |
85 | 850 (setq tex-last-buffer-texed (current-buffer)) |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
851 (setq tex-print-file (buffer-file-name))) |
85 | 852 |
853 (defun tex-generate-zap-file-name () | |
854 "Generate a unique name suitable for use as a file name." | |
855 ;; Include the shell process number and host name | |
856 ;; in case there are multiple shells (for same or different user). | |
857 (format "#tz%d%s" | |
858 (process-id (get-buffer-process "*tex-shell*")) | |
859 (tex-strip-dots (system-name)))) | |
860 | |
861 (defun tex-strip-dots (s) | |
862 (setq s (copy-sequence s)) | |
863 (while (string-match "\\." s) | |
864 (aset s (match-beginning 0) ?-)) | |
865 s) | |
866 | |
867 ;; This will perhaps be useful for modifying TEXINPUTS. | |
868 ;; Expand each file name, separated by colons, in the string S. | |
869 (defun tex-expand-files (s) | |
870 (let (elts (start 0)) | |
871 (while (string-match ":" s start) | |
872 (setq elts (cons (substring s start (match-beginning 0)) elts)) | |
873 (setq start (match-end 0))) | |
874 (or (= start 0) | |
875 (setq elts (cons (substring s start) elts))) | |
876 (mapconcat 'expand-file-name (nreverse elts) ":"))) | |
877 | |
878 (defun tex-shell-running () | |
879 (and (get-process "tex-shell") | |
880 (eq (process-status (get-process "tex-shell")) 'run))) | |
881 | |
882 (defun tex-kill-job () | |
883 "Kill the currently running TeX job." | |
884 (interactive) | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
885 (quit-process (get-process "tex-shell") t)) |
85 | 886 |
887 (defun tex-recenter-output-buffer (linenum) | |
888 "Redisplay buffer of TeX job output so that most recent output can be seen. | |
889 The last line of the buffer is displayed on | |
890 line LINE of the window, or centered if LINE is nil." | |
891 (interactive "P") | |
892 (let ((tex-shell (get-buffer "*tex-shell*")) | |
893 (old-buffer (current-buffer))) | |
894 (if (null tex-shell) | |
895 (message "No TeX output buffer") | |
896 (pop-to-buffer tex-shell) | |
897 (bury-buffer tex-shell) | |
898 (goto-char (point-max)) | |
899 (recenter (if linenum | |
900 (prefix-numeric-value linenum) | |
901 (/ (window-height) 2))) | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
902 (pop-to-buffer old-buffer)))) |
85 | 903 |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
904 (defun tex-print (&optional alt) |
85 | 905 "Print the .dvi file made by \\[tex-region], \\[tex-buffer] or \\[tex-file]. |
1577 | 906 Runs the shell command defined by `tex-dvi-print-command'. If prefix argument |
907 is provided, use the alternative command, `tex-alt-dvi-print-command'." | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
908 (interactive "P") |
85 | 909 (let ((print-file-name-dvi (tex-append tex-print-file ".dvi")) |
910 test-name) | |
911 (if (and (not (equal (current-buffer) tex-last-buffer-texed)) | |
912 (file-newer-than-file-p | |
913 (setq test-name (tex-append (buffer-file-name) ".dvi")) | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
914 print-file-name-dvi)) |
85 | 915 (setq print-file-name-dvi test-name)) |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
916 (if (not (file-exists-p print-file-name-dvi)) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
917 (error "No appropriate `.dvi' file could be found") |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
918 (tex-send-command |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
919 (if alt tex-alt-dvi-print-command tex-dvi-print-command) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
920 print-file-name-dvi t)))) |
85 | 921 |
922 (defun tex-view () | |
923 "Preview the last `.dvi' file made by running TeX under Emacs. | |
924 This means, made using \\[tex-region], \\[tex-buffer] or \\[tex-file]. | |
925 The variable `tex-dvi-view-command' specifies the shell command for preview." | |
926 (interactive) | |
927 (let ((tex-dvi-print-command tex-dvi-view-command)) | |
928 (tex-print))) | |
929 | |
930 (defun tex-append (file-name suffix) | |
931 "Append to FILENAME the suffix SUFFIX, using same algorithm TeX uses. | |
932 Scans for the first (not last) period. | |
933 No period is retained immediately before SUFFIX, | |
934 so normally SUFFIX starts with one." | |
935 (if (stringp file-name) | |
936 (let ((file (file-name-nondirectory file-name))) | |
937 (concat (file-name-directory file-name) | |
938 (substring file 0 | |
939 (string-match "\\." file)) | |
940 suffix)) | |
941 " ")) | |
942 | |
943 (defun tex-show-print-queue () | |
944 "Show the print queue that \\[tex-print] put your job on. | |
1577 | 945 Runs the shell command defined by `tex-show-queue-command'." |
85 | 946 (interactive) |
947 (if (tex-shell-running) | |
948 (tex-kill-job) | |
949 (tex-start-shell)) | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
950 (tex-send-command tex-show-queue-command)) |
85 | 951 |
952 (defun tex-bibtex-file () | |
953 "Run BibTeX on the current buffer's file." | |
954 (interactive) | |
955 (if (tex-shell-running) | |
956 (tex-kill-job) | |
957 (tex-start-shell)) | |
958 (let ((tex-out-file | |
959 (tex-append (file-name-nondirectory (buffer-file-name)) "")) | |
960 (file-dir (file-name-directory (buffer-file-name)))) | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
961 (tex-send-command tex-shell-cd-command file-dir) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
962 (tex-send-command bibtex-command tex-out-file))) |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
963 |
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
657
diff
changeset
|
964 (run-hooks 'tex-mode-load-hook) |
85 | 965 |
584 | 966 (provide 'tex-mode) |
967 | |
657
fec3f9a1e3e5
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
968 ;;; tex-mode.el ends here |
741
587f7a98341d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
739
diff
changeset
|
969 |