rev |
line source |
yuuji@395
|
1 ;;; yatexlib.el --- YaTeX and yahtml common libraries -*- coding: sjis -*-
|
yuuji@287
|
2 ;;;
|
yuuji@605
|
3 ;;; (c)1994-2022 by HIROSE Yuuji.[yuuji@yatex.org]
|
yuuji@605
|
4 ;;; Last modified Fri Dec 2 08:41:16 2022 on firestorm
|
yuuji@366
|
5 ;;; $Id$
|
yuuji@23
|
6
|
yuuji@287
|
7 ;;; Code:
|
yuuji@451
|
8
|
yuuji@451
|
9 ;; High-precedence compatible function
|
yuuji@451
|
10 (fset 'YaTeX-str2int
|
yuuji@451
|
11 (if (fboundp 'string-to-number)
|
yuuji@451
|
12 (function
|
yuuji@451
|
13 (lambda (string &optional base)
|
yuuji@451
|
14 (ceiling (string-to-number string base))))
|
yuuji@451
|
15 'string-to-int))
|
yuuji@451
|
16
|
yuuji@64
|
17 ;; General variables
|
yuuji@64
|
18 (defvar YaTeX-dos (memq system-type '(ms-dos windows-nt OS/2)))
|
yuuji@79
|
19 (defvar YaTeX-macos (memq system-type '(darwin)))
|
yuuji@451
|
20 (defvar YaTeX-emacs-19 (>= (YaTeX-str2int emacs-version) 19))
|
yuuji@451
|
21 (defvar YaTeX-emacs-20 (>= (YaTeX-str2int emacs-version) 20))
|
yuuji@451
|
22 (defvar YaTeX-emacs-21 (>= (YaTeX-str2int emacs-version) 21))
|
yuuji@64
|
23 (defvar YaTeX-user-completion-table
|
yuuji@64
|
24 (if YaTeX-dos "~/_yatexrc" "~/.yatexrc")
|
yuuji@64
|
25 "*Default filename in which user completion table is saved.")
|
yuuji@64
|
26
|
yuuji@72
|
27 (defvar YaTeX-display-color-p
|
yuuji@72
|
28 (or (and (fboundp 'display-color-p) (display-color-p))
|
yuuji@72
|
29 (and (fboundp 'device-class)
|
yuuji@72
|
30 (eq 'color (device-class (selected-device))))
|
yuuji@72
|
31 window-system) ; falls down lazy check..
|
yuuji@72
|
32 "Current display's capability of expressing colors.")
|
yuuji@72
|
33
|
yuuji@79
|
34 (defvar YaTeX-japan
|
yuuji@79
|
35 (or (boundp 'NEMACS)
|
yuuji@79
|
36 (boundp 'MULE)
|
yuuji@79
|
37 (and (boundp 'current-language-environment)
|
yuuji@79
|
38 (string-match "[Jj]apanese" current-language-environment)))
|
yuuji@64
|
39 "Whether yatex mode is running on Japanese environment or not.")
|
yuuji@64
|
40
|
yuuji@70
|
41 ;; autoload from yahtml.el
|
yuuji@70
|
42 (autoload 'yahtml-inner-environment-but "yahtml" "yahtml internal func." t)
|
yuuji@70
|
43
|
yuuji@80
|
44 (defvar latex-message-kanji-code 2
|
yuuji@80
|
45 "*Kanji coding system latex command types out.
|
yuuji@80
|
46 1 = Shift JIS, 2 = JIS, 3 = EUC. 4 = UTF-8")
|
yuuji@80
|
47
|
yuuji@64
|
48 (defvar YaTeX-kanji-code-alist
|
yuuji@64
|
49 (cond
|
yuuji@64
|
50 ((boundp '*junet*)
|
yuuji@77
|
51 (list '(0 . *noconv*)
|
yuuji@77
|
52 (cons
|
yuuji@64
|
53 1
|
yuuji@79
|
54 (cond
|
yuuji@79
|
55 (YaTeX-dos (if (boundp '*sjis-dos*) *sjis-dos* *sjis*dos))
|
yuuji@79
|
56 (YaTeX-macos (if (boundp '*sjis-mac*) *sjis-mac* *sjis*mac))
|
yuuji@79
|
57 (t *sjis*)))
|
yuuji@64
|
58 '(2 . *junet*) '(3 . *euc-japan*)))
|
yuuji@80
|
59 ((and YaTeX-emacs-20 (featurep 'mule))
|
yuuji@64
|
60 ;;(cdr-safe(assq 'coding-system (assoc "Japanese" language-info-alist)))
|
yuuji@77
|
61 (list '(0 . no-conversion)
|
yuuji@77
|
62 (cons
|
yuuji@64
|
63 1 (cond (YaTeX-dos 'shift_jis-dos)
|
yuuji@79
|
64 (YaTeX-macos 'shift_jis-mac)
|
yuuji@64
|
65 ((member 'shift_jis (coding-system-list)) 'shift_jis-unix)
|
yuuji@64
|
66 (t 'sjis)))
|
yuuji@68
|
67 '(2 . iso-2022-jp-unix)
|
yuuji@80
|
68 '(3 . euc-jp-unix)
|
yuuji@80
|
69 '(4 . utf-8))))
|
yuuji@64
|
70 "Kanji-code expression translation table.")
|
yuuji@64
|
71 (defvar YaTeX-inhibit-prefix-letter nil
|
yuuji@64
|
72 "*T for changing key definitions from [prefix] Letter to [prefix] C-Letter.")
|
yuuji@64
|
73
|
yuuji@64
|
74 (defvar YaTeX-no-begend-shortcut nil
|
yuuji@64
|
75 "*T for disabling shortcut of begin-type completion, [prefix] b d, etc.")
|
yuuji@64
|
76
|
yuuji@64
|
77 (defvar YaTeX-default-pop-window-height 10
|
yuuji@64
|
78 "Default typesetting buffer height.
|
yuuji@64
|
79 If integer, sets the window-height of typesetting buffer.
|
yuuji@64
|
80 If string, sets the percentage of it.
|
yuuji@64
|
81 If nil, use default pop-to-buffer.")
|
yuuji@64
|
82
|
yuuji@64
|
83 (defvar YaTeX-create-file-prefix-g nil
|
yuuji@64
|
84 "*Non-nil creates new file when [prefix] g on \\include{foo}.")
|
yuuji@64
|
85
|
yuuji@64
|
86 (defvar YaTeX-nervous t
|
yuuji@64
|
87 "*If you are nervous about maintenance of yatexrc, set this value to T.
|
yuuji@64
|
88 And you will have the local dictionary.")
|
yuuji@64
|
89
|
yuuji@72
|
90 (defvar YaTeX-use-italic-bold (string< "20" emacs-version)
|
yuuji@72
|
91 "*Non-nil tries to find italic/bold fontset.
|
yuuji@72
|
92 This variable is effective when font-lock is used.
|
yuuji@72
|
93 \it, \bf 内部での日本語が□になってしまう場合はこれをnilにして下さい。")
|
yuuji@72
|
94
|
yuuji@64
|
95 ;----------- work variables ----------------------------------------
|
yuuji@80
|
96 (defvar YaTeX-minibuffer-completion-map nil
|
yuuji@80
|
97 "Minibuffer completion key map that allows comma completion.")
|
yuuji@80
|
98 (if YaTeX-minibuffer-completion-map nil
|
yuuji@80
|
99 (setq YaTeX-minibuffer-completion-map
|
yuuji@80
|
100 (copy-keymap minibuffer-local-completion-map))
|
yuuji@80
|
101 (define-key YaTeX-minibuffer-completion-map " "
|
yuuji@80
|
102 'YaTeX-minibuffer-complete)
|
yuuji@80
|
103 (define-key YaTeX-minibuffer-completion-map "\t"
|
yuuji@80
|
104 'YaTeX-minibuffer-complete))
|
yuuji@80
|
105
|
yuuji@64
|
106 (defvar YaTeX-typesetting-mode-map nil
|
yuuji@69
|
107 "Keymap used in YaTeX typesetting buffer")
|
yuuji@69
|
108
|
yuuji@64
|
109 (if YaTeX-typesetting-mode-map nil
|
yuuji@64
|
110 (setq YaTeX-typesetting-mode-map (make-keymap))
|
yuuji@64
|
111 ;(suppress-keymap YaTeX-typesetting-mode-map t)
|
yuuji@64
|
112 (define-key YaTeX-typesetting-mode-map " " 'YaTeX-jump-error-line)
|
yuuji@64
|
113 (define-key YaTeX-typesetting-mode-map "\C-m" 'YaTeX-send-string)
|
yuuji@64
|
114 (define-key YaTeX-typesetting-mode-map "1" 'delete-other-windows)
|
yuuji@64
|
115 (define-key YaTeX-typesetting-mode-map "0" 'delete-window)
|
yuuji@64
|
116 (define-key YaTeX-typesetting-mode-map "q" 'delete-window))
|
yuuji@64
|
117
|
yuuji@64
|
118 (defvar YaTeX-parent-file nil
|
yuuji@64
|
119 "*Main LaTeX source file name used when %#! expression doesn't exist.")
|
yuuji@64
|
120 (make-variable-buffer-local 'YaTeX-parent-file)
|
yuuji@64
|
121
|
yuuji@590
|
122 ;;;
|
yuuji@590
|
123 ;; Emacs 21 compensational wrapper
|
yuuji@590
|
124 ;;;
|
yuuji@590
|
125 (defun YaTeX-minibuffer-begin ()
|
yuuji@590
|
126 (if (fboundp 'field-beginning)
|
yuuji@590
|
127 (field-beginning (point-max))
|
yuuji@590
|
128 (point-min)))
|
yuuji@590
|
129
|
yuuji@590
|
130 (defun YaTeX-minibuffer-end ()
|
yuuji@590
|
131 (if (fboundp 'field-end)
|
yuuji@590
|
132 (field-end (point-max))
|
yuuji@590
|
133 (point-max)))
|
yuuji@590
|
134
|
yuuji@590
|
135 (defun YaTeX-minibuffer-string ()
|
yuuji@590
|
136 (buffer-substring (YaTeX-minibuffer-begin) (YaTeX-minibuffer-end)))
|
yuuji@590
|
137
|
yuuji@590
|
138 (defun YaTeX-minibuffer-erase ()
|
yuuji@590
|
139 (if (eq (selected-window) (minibuffer-window))
|
yuuji@590
|
140 (if (fboundp 'delete-field) (delete-field) (erase-buffer))))
|
yuuji@590
|
141
|
yuuji@590
|
142 (fset 'YaTeX-buffer-substring
|
yuuji@590
|
143 (if (fboundp 'buffer-substring-no-properties)
|
yuuji@590
|
144 'buffer-substring-no-properties
|
yuuji@590
|
145 'buffer-substring))
|
yuuji@590
|
146 (fset 'YaTeX-substring
|
yuuji@590
|
147 (if (fboundp 'substring-no-properties)
|
yuuji@590
|
148 'substring-no-properties
|
yuuji@590
|
149 'substing))
|
yuuji@590
|
150
|
yuuji@590
|
151 (defun YaTeX-region-active-p ()
|
yuuji@590
|
152 (and (fboundp 'region-active-p) (region-active-p)))
|
yuuji@590
|
153
|
yuuji@64
|
154 ;---------- Define default key bindings on YaTeX mode map ----------
|
yuuji@64
|
155 ;;;###autoload
|
yuuji@503
|
156 (defun YaTeX-kanji-ptex-mnemonic ()
|
yuuji@503
|
157 "Return the kanji-mnemonic of pTeX from current buffer's coding-system."
|
yuuji@503
|
158 (if (boundp 'NEMACS)
|
yuuji@503
|
159 (or (cdr-safe (assq kanji-fileio-code
|
yuuji@503
|
160 '((1 . "sjis") (2 . "jis") (3 . "euc"))))
|
yuuji@503
|
161 "")
|
yuuji@503
|
162 (let ((coding
|
yuuji@503
|
163 (cond
|
yuuji@503
|
164 ((boundp 'buffer-file-coding-system)
|
yuuji@562
|
165 (symbol-name (if (fboundp 'coding-system-name)
|
yuuji@562
|
166 (coding-system-name buffer-file-coding-system)
|
yuuji@562
|
167 buffer-file-coding-system)))
|
yuuji@503
|
168 ((boundp 'file-coding-system) (symbol-name file-coding-system))))
|
yuuji@503
|
169 (case-fold-search t))
|
yuuji@529
|
170 (cond ((string-match "utf-8\\>" coding) "utf8")
|
yuuji@503
|
171 ((string-match "shift.jis\\|cp932\\>" coding) "sjis")
|
yuuji@503
|
172 ((string-match "junet\\|iso.2022" coding) "jis")
|
yuuji@503
|
173 ((string-match "euc.jp\\|ja.*iso.8bit" coding) "euc")
|
yuuji@503
|
174 (t "")))))
|
yuuji@503
|
175
|
yuuji@503
|
176 ;;;###autoload
|
yuuji@64
|
177 (defun YaTeX-define-key (key binding &optional map)
|
yuuji@64
|
178 "Define key on YaTeX-prefix-map."
|
yuuji@64
|
179 (if YaTeX-inhibit-prefix-letter
|
yuuji@64
|
180 (let ((c (aref key 0)))
|
yuuji@64
|
181 (cond
|
yuuji@64
|
182 ((and (>= c ?a) (<= c ?z)) (aset key 0 (1+ (- c ?a))))
|
yuuji@64
|
183 ((and (>= c ?A) (<= c ?Z) (numberp YaTeX-inhibit-prefix-letter))
|
yuuji@64
|
184 (aset key 0 (1+ (- c ?A))))
|
yuuji@64
|
185 (t nil))))
|
yuuji@64
|
186 (define-key (or map YaTeX-prefix-map) key binding))
|
yuuji@64
|
187
|
yuuji@64
|
188 ;;;###autoload
|
yuuji@64
|
189 (defun YaTeX-local-table-symbol (symbol)
|
yuuji@64
|
190 "Return the lisp symbol which keeps local completion table of SYMBOL."
|
yuuji@64
|
191 (intern (concat "YaTeX$"
|
yuuji@64
|
192 default-directory
|
yuuji@64
|
193 (symbol-name symbol))))
|
yuuji@64
|
194
|
yuuji@64
|
195 ;;;###autoload
|
yuuji@64
|
196 (defun YaTeX-sync-local-table (symbol)
|
yuuji@64
|
197 "Synchronize local variable SYMBOL.
|
yuuji@64
|
198 Copy its corresponding directory dependent completion table to SYMBOL."
|
yuuji@64
|
199 (if (boundp (YaTeX-local-table-symbol symbol))
|
yuuji@64
|
200 (set symbol (symbol-value (YaTeX-local-table-symbol symbol)))))
|
yuuji@64
|
201
|
yuuji@64
|
202 (defvar YaTeX-user-table-is-read nil
|
yuuji@64
|
203 "Flag that means whether user completion table has been read or not.")
|
yuuji@64
|
204 ;;;###autoload
|
yuuji@64
|
205 (defun YaTeX-read-user-completion-table (&optional forcetoread)
|
yuuji@64
|
206 "Append user completion table of LaTeX macros"
|
yuuji@80
|
207 (interactive)
|
yuuji@64
|
208 (let*((user-table (expand-file-name YaTeX-user-completion-table))
|
yuuji@64
|
209 (local-table (expand-file-name (file-name-nondirectory user-table)))
|
yuuji@64
|
210 var localvar localbuf (curbuf (current-buffer)) sexp)
|
yuuji@64
|
211 (if YaTeX-user-table-is-read nil
|
yuuji@64
|
212 (message "Loading user completion table")
|
yuuji@64
|
213 (if (file-exists-p user-table) (load-file user-table)
|
yuuji@64
|
214 (message "Welcome to the field of YaTeX. I'm glad to see you!")))
|
yuuji@64
|
215 (setq YaTeX-user-table-is-read t)
|
yuuji@64
|
216 (cond
|
yuuji@64
|
217 ((file-exists-p local-table)
|
yuuji@64
|
218 (set-buffer (setq localbuf (find-file-noselect local-table)))
|
yuuji@64
|
219 (widen)
|
yuuji@64
|
220 (goto-char (point-min))
|
yuuji@80
|
221 (while (re-search-forward "(setq \\([^ \t\n]+\\)" nil t)
|
yuuji@64
|
222 (setq var (intern (buffer-substring
|
yuuji@64
|
223 (match-beginning 1) (match-end 1)))
|
yuuji@64
|
224 localvar (YaTeX-local-table-symbol var))
|
yuuji@64
|
225 (goto-char (match-beginning 0))
|
yuuji@64
|
226 (setq sexp (buffer-substring (point)
|
yuuji@64
|
227 (progn (forward-sexp) (point))))
|
yuuji@64
|
228 (set-buffer curbuf)
|
yuuji@64
|
229 (or (assq var (buffer-local-variables)) (make-local-variable var))
|
yuuji@64
|
230 (eval (read sexp))
|
yuuji@64
|
231 (or (and (boundp localvar)
|
yuuji@64
|
232 (symbol-value localvar)
|
yuuji@64
|
233 (not forcetoread))
|
yuuji@64
|
234 (set localvar (symbol-value var)))
|
yuuji@64
|
235 (set-buffer localbuf))
|
yuuji@64
|
236 (kill-buffer localbuf)))
|
yuuji@64
|
237 (set-buffer curbuf)))
|
yuuji@64
|
238
|
yuuji@64
|
239 ;;;###autoload
|
yuuji@64
|
240 (defun YaTeX-reload-dictionary ()
|
yuuji@64
|
241 "Reload local dictionary.
|
yuuji@64
|
242 Use this function after editing ./.yatexrc."
|
yuuji@64
|
243 (interactive)
|
yuuji@64
|
244 (let ((YaTeX-user-table-is-read nil))
|
yuuji@64
|
245 (YaTeX-read-user-completion-table t)))
|
yuuji@64
|
246
|
yuuji@64
|
247 ;;;###autoload
|
yuuji@64
|
248 (defun YaTeX-lookup-table (word type)
|
yuuji@64
|
249 "Lookup WORD in completion table whose type is TYPE.
|
yuuji@64
|
250 This function refers the symbol tmp-TYPE-table, user-TYPE-table, TYPE-table.
|
yuuji@64
|
251 Typically, TYPE is one of 'env, 'section, 'fontsize, 'singlecmd."
|
yuuji@64
|
252 (if (symbolp type) (setq type (symbol-name type)))
|
yuuji@64
|
253 (or (assoc word (symbol-value (intern (concat "tmp-" type "-table"))))
|
yuuji@64
|
254 (assoc word (symbol-value (intern (concat "user-" type "-table"))))
|
yuuji@64
|
255 (assoc word (symbol-value (intern (concat type "-table"))))))
|
yuuji@64
|
256
|
yuuji@64
|
257 ;;;###autoload
|
yuuji@64
|
258 (defun YaTeX-update-table (vallist default-table user-table local-table)
|
yuuji@64
|
259 "Update completion table if the car of VALLIST is not in current tables.
|
yuuji@64
|
260 Second argument DEFAULT-TABLE is the quoted symbol of default completion
|
yuuji@64
|
261 table, third argument USER-TABLE is user table which will be saved in
|
yuuji@64
|
262 YaTeX-user-completion-table, fourth argument LOCAL-TABLE should have the
|
yuuji@64
|
263 completion which is valid during current Emacs's session. If you
|
yuuji@64
|
264 want to make LOCAL-TABLE valid longer span (but restrict in this directory)
|
yuuji@64
|
265 create the file in current directory which has the same name with
|
yuuji@64
|
266 YaTeX-user-completion-table."
|
yuuji@64
|
267 (let ((car-v (car vallist)) key answer
|
yuuji@64
|
268 (file (file-name-nondirectory YaTeX-user-completion-table)))
|
yuuji@64
|
269 (cond
|
yuuji@64
|
270 ((assoc car-v (symbol-value default-table))
|
yuuji@64
|
271 nil) ;Nothing to do
|
yuuji@64
|
272 ((setq key (assoc car-v (symbol-value user-table)))
|
yuuji@64
|
273 (if (equal (cdr vallist) (cdr key)) nil
|
yuuji@64
|
274 ;; if association hits, but contents differ.
|
yuuji@64
|
275 (message
|
yuuji@64
|
276 "%s's attributes turned into %s" (car vallist) (cdr vallist))
|
yuuji@64
|
277 (set user-table (delq key (symbol-value user-table)))
|
yuuji@64
|
278 (set user-table (cons vallist (symbol-value user-table)))
|
yuuji@64
|
279 (YaTeX-update-dictionary
|
yuuji@64
|
280 YaTeX-user-completion-table user-table "user")))
|
yuuji@64
|
281 ((setq key (assoc car-v (symbol-value local-table)))
|
yuuji@64
|
282 (if (equal (cdr vallist) (cdr key)) nil
|
yuuji@64
|
283 (message
|
yuuji@64
|
284 "%s's attributes turned into %s" (car vallist) (cdr vallist))
|
yuuji@64
|
285 (set local-table (delq key (symbol-value local-table)))
|
yuuji@64
|
286 (set local-table (cons vallist (symbol-value local-table)))
|
yuuji@64
|
287 (set (YaTeX-local-table-symbol local-table) (symbol-value local-table))
|
yuuji@64
|
288 (YaTeX-update-dictionary file local-table)))
|
yuuji@64
|
289 ;; All of above cases, there are some completion in tables.
|
yuuji@64
|
290 ;; Then update tables.
|
yuuji@64
|
291 (t
|
yuuji@64
|
292 (if (not YaTeX-nervous)
|
yuuji@64
|
293 (setq answer "u")
|
yuuji@64
|
294 (message
|
yuuji@64
|
295 (cond
|
yuuji@64
|
296 (YaTeX-japan
|
yuuji@68
|
297 "`%s'の登録先: U)ユーザ辞書 L)ローカル辞書 N)メモリ D)しない")
|
yuuji@64
|
298 (t
|
yuuji@64
|
299 "Register `%s' into: U)serDic L)ocalDic N)one D)iscard"))
|
yuuji@64
|
300 (if (> (length car-v) 23)
|
yuuji@68
|
301 (concat (substring car-v 0 10) "..." (substring car-v -9))
|
yuuji@64
|
302 car-v))
|
yuuji@64
|
303 (setq answer (char-to-string (read-char))))
|
yuuji@64
|
304 (cond
|
yuuji@64
|
305 ((string-match answer "uy")
|
yuuji@64
|
306 (set user-table (cons vallist (symbol-value user-table)))
|
yuuji@64
|
307 (YaTeX-update-dictionary YaTeX-user-completion-table user-table "user")
|
yuuji@64
|
308 )
|
yuuji@64
|
309 ((string-match answer "tl")
|
yuuji@64
|
310 (set local-table (cons vallist (symbol-value local-table)))
|
yuuji@64
|
311 (set (YaTeX-local-table-symbol local-table) (symbol-value local-table))
|
yuuji@64
|
312 (YaTeX-update-dictionary file local-table))
|
yuuji@64
|
313 ((string-match answer "d") nil) ;discard it
|
yuuji@64
|
314 (t (set default-table
|
yuuji@64
|
315 (cons vallist (symbol-value default-table)))))))))
|
yuuji@64
|
316
|
yuuji@64
|
317 ;;;###autoload
|
yuuji@64
|
318 (defun YaTeX-cplread-with-learning
|
yuuji@64
|
319 (prom default-table user-table local-table
|
yuuji@64
|
320 &optional pred reqmatch init hsym)
|
yuuji@64
|
321 "Completing read with learning.
|
yuuji@64
|
322 Do a completing read with prompt PROM. Completion table is what
|
yuuji@64
|
323 DEFAULT-TABLE, USER-TABLE, LOCAL table are appended in reverse order.
|
yuuji@64
|
324 Note that these tables are passed by the symbol.
|
yuuji@64
|
325 Optional arguments PRED, REQMATH and INIT are passed to completing-read
|
yuuji@64
|
326 as its arguments PREDICATE, REQUIRE-MATCH and INITIAL-INPUT respectively.
|
yuuji@64
|
327 If optional 8th argument HSYM, history symbol, is passed, use it as
|
yuuji@64
|
328 history list variable."
|
yuuji@64
|
329 (YaTeX-sync-local-table local-table)
|
yuuji@64
|
330 (let*((table (append (symbol-value local-table)
|
yuuji@64
|
331 (symbol-value user-table)
|
yuuji@64
|
332 (symbol-value default-table)))
|
yuuji@64
|
333 (word (completing-read-with-history
|
yuuji@64
|
334 prom table pred reqmatch init hsym)))
|
yuuji@64
|
335 (if (and (string< "" word) (not (assoc word table)))
|
yuuji@64
|
336 (YaTeX-update-table (list word) default-table user-table local-table))
|
yuuji@64
|
337 word))
|
yuuji@64
|
338
|
yuuji@64
|
339 ;;;###autoload
|
yuuji@64
|
340 (defun YaTeX-update-dictionary (file symbol &optional type)
|
yuuji@64
|
341 (let ((local-table-buf (find-file-noselect file))
|
yuuji@64
|
342 (name (symbol-name symbol))
|
yuuji@64
|
343 (value (symbol-value symbol)))
|
yuuji@64
|
344 (save-excursion
|
yuuji@64
|
345 (message "Updating %s dictionary..." (or type "local"))
|
yuuji@64
|
346 (set-buffer local-table-buf)
|
yuuji@64
|
347 (goto-char (point-max))
|
yuuji@64
|
348 (search-backward (concat "(setq " name) nil t)
|
yuuji@64
|
349 (delete-region (point) (progn (forward-sexp) (point)))
|
yuuji@64
|
350 (delete-blank-lines)
|
yuuji@64
|
351 (insert "(setq " name " '(\n")
|
yuuji@353
|
352 (mapcar (function (lambda (s)
|
yuuji@353
|
353 (insert (format "%s\n" (prin1-to-string s)))))
|
yuuji@64
|
354 value)
|
yuuji@64
|
355 (insert "))\n\n")
|
yuuji@64
|
356 (delete-blank-lines)
|
yuuji@64
|
357 (basic-save-buffer)
|
yuuji@64
|
358 (kill-buffer local-table-buf)
|
yuuji@64
|
359 (message "Updating %s dictionary...Done" (or type "local")))))
|
yuuji@64
|
360
|
yuuji@64
|
361 ;;;###autoload
|
yuuji@64
|
362 (defun YaTeX-define-begend-key-normal (key env &optional map)
|
yuuji@64
|
363 "Define short cut YaTeX-make-begin-end key."
|
yuuji@64
|
364 (YaTeX-define-key
|
yuuji@64
|
365 key
|
yuuji@64
|
366 (list 'lambda '(arg) '(interactive "P")
|
yuuji@64
|
367 (list 'YaTeX-insert-begin-end env 'arg))
|
yuuji@64
|
368 map))
|
yuuji@64
|
369
|
yuuji@64
|
370 ;;;###autoload
|
yuuji@64
|
371 (defun YaTeX-define-begend-region-key (key env &optional map)
|
yuuji@64
|
372 "Define short cut YaTeX-make-begin-end-region key."
|
yuuji@64
|
373 (YaTeX-define-key key (list 'lambda nil '(interactive)
|
yuuji@64
|
374 (list 'YaTeX-insert-begin-end env t)) map))
|
yuuji@64
|
375
|
yuuji@64
|
376 ;;;###autoload
|
yuuji@64
|
377 (defun YaTeX-define-begend-key (key env &optional map)
|
yuuji@86
|
378 "Define short cut key for begin type completion.
|
yuuji@86
|
379 Define both strokes for normal and region mode.
|
yuuji@86
|
380 To customize YaTeX, user should use this function."
|
yuuji@64
|
381 (YaTeX-define-begend-key-normal key env map)
|
yuuji@64
|
382 (if YaTeX-inhibit-prefix-letter nil
|
yuuji@64
|
383 (YaTeX-define-begend-region-key
|
yuuji@64
|
384 (concat (upcase (substring key 0 1)) (substring key 1)) env)))
|
yuuji@64
|
385
|
yuuji@23
|
386 ;;;###autoload
|
yuuji@23
|
387 (defun YaTeX-search-active-forward (string cmntrx &optional bound err cnt func)
|
yuuji@23
|
388 "Search STRING which is not commented out by CMNTRX.
|
yuuji@23
|
389 Optional arguments after BOUND, ERR, CNT are passed literally to search-forward
|
yuuji@23
|
390 or search-backward.
|
yuuji@23
|
391 Optional sixth argument FUNC changes search-function."
|
yuuji@49
|
392 (let ((sfunc (or func 'search-forward)) found md)
|
yuuji@23
|
393 (while (and (prog1
|
yuuji@23
|
394 (setq found (funcall sfunc string bound err cnt))
|
yuuji@23
|
395 (setq md (match-data)))
|
yuuji@23
|
396 (or
|
yuuji@64
|
397 (and (eq major-mode 'yatex-mode)
|
yuuji@64
|
398 (YaTeX-in-verb-p (match-beginning 0)))
|
yuuji@23
|
399 (save-excursion
|
yuuji@72
|
400 (goto-char (match-beginning 0))
|
yuuji@23
|
401 (beginning-of-line)
|
yuuji@23
|
402 (re-search-forward cmntrx (match-beginning 0) t)))))
|
yuuji@23
|
403 (store-match-data md)
|
yuuji@69
|
404 found))
|
yuuji@23
|
405
|
yuuji@23
|
406 (defun YaTeX-re-search-active-forward (regexp cmntrx &optional bound err cnt)
|
yuuji@23
|
407 "Search REGEXP backward which is not commented out by regexp CMNTRX.
|
yuuji@23
|
408 See also YaTeX-search-active-forward."
|
yuuji@69
|
409 (YaTeX-search-active-forward regexp cmntrx bound err cnt 're-search-forward))
|
yuuji@69
|
410
|
yuuji@23
|
411 (defun YaTeX-search-active-backward (string cmntrx &optional bound err cnt)
|
yuuji@23
|
412 "Search STRING backward which is not commented out by regexp CMNTRX.
|
yuuji@23
|
413 See also YaTeX-search-active-forward."
|
yuuji@69
|
414 (YaTeX-search-active-forward string cmntrx bound err cnt 'search-backward))
|
yuuji@69
|
415
|
yuuji@23
|
416 (defun YaTeX-re-search-active-backward (regexp cmntrx &optional bound err cnt)
|
yuuji@23
|
417 "Search REGEXP backward which is not commented out by regexp CMNTRX.
|
yuuji@23
|
418 See also YaTeX-search-active-forward."
|
yuuji@69
|
419 (YaTeX-search-active-forward
|
yuuji@69
|
420 regexp cmntrx bound err cnt 're-search-backward))
|
yuuji@23
|
421
|
yuuji@80
|
422 (defun YaTeX-relative-path-p (path)
|
yuuji@80
|
423 "Return non-nil if PATH is not absolute one."
|
yuuji@80
|
424 (let ((md (match-data)))
|
yuuji@80
|
425 (unwind-protect
|
yuuji@80
|
426 (not (string-match "^\\(/\\|[a-z]:\\|\\\\\\).*/" file))
|
yuuji@80
|
427 (store-match-data md))))
|
yuuji@80
|
428
|
yuuji@23
|
429 ;;;###autoload
|
yuuji@23
|
430 (defun YaTeX-switch-to-buffer (file &optional setbuf)
|
yuuji@23
|
431 "Switch to buffer if buffer exists, find file if not.
|
yuuji@23
|
432 Optional second arg SETBUF t make use set-buffer instead of switch-to-buffer."
|
yuuji@23
|
433 (interactive "Fswitch to file: ")
|
yuuji@70
|
434 (if (bufferp file)
|
yuuji@70
|
435 (setq file (buffer-file-name file))
|
yuuji@80
|
436 (and (YaTeX-relative-path-p file)
|
yuuji@70
|
437 (eq major-mode 'yatex-mode)
|
yuuji@70
|
438 YaTeX-search-file-from-top-directory
|
yuuji@70
|
439 (save-excursion
|
yuuji@70
|
440 (YaTeX-visit-main t)
|
yuuji@70
|
441 (setq file (expand-file-name file)))))
|
yuuji@52
|
442 (let (buf (hilit-auto-highlight (not setbuf)))
|
yuuji@52
|
443 (cond
|
yuuji@52
|
444 ((setq buf (get-file-buffer file))
|
yuuji@52
|
445 (funcall (if setbuf 'set-buffer 'switch-to-buffer)
|
yuuji@52
|
446 (get-file-buffer file))
|
yuuji@52
|
447 buf)
|
yuuji@52
|
448 ((or YaTeX-create-file-prefix-g (file-exists-p file))
|
yuuji@52
|
449 (or ;find-file returns nil but set current-buffer...
|
yuuji@52
|
450 (if setbuf (set-buffer (find-file-noselect file))
|
yuuji@52
|
451 (find-file file))
|
yuuji@52
|
452 (current-buffer)))
|
yuuji@52
|
453 (t (message "%s was not found in this directory." file)
|
yuuji@69
|
454 nil))))
|
yuuji@23
|
455
|
yuuji@23
|
456 ;;;###autoload
|
yuuji@23
|
457 (defun YaTeX-switch-to-buffer-other-window (file)
|
yuuji@23
|
458 "Switch to buffer if buffer exists, find file if not."
|
yuuji@23
|
459 (interactive "Fswitch to file: ")
|
yuuji@70
|
460 (and (eq major-mode 'yatex-mode)
|
yuuji@70
|
461 (stringp file)
|
yuuji@80
|
462 (YaTeX-relative-path-p file)
|
yuuji@70
|
463 YaTeX-search-file-from-top-directory
|
yuuji@70
|
464 (save-excursion
|
yuuji@70
|
465 (YaTeX-visit-main t)
|
yuuji@70
|
466 (setq file (expand-file-name file))))
|
yuuji@52
|
467 (if (bufferp file) (setq file (buffer-file-name file)))
|
yuuji@52
|
468 (cond
|
yuuji@52
|
469 ((get-file-buffer file)
|
yuuji@52
|
470 (switch-to-buffer-other-window (get-file-buffer file))
|
yuuji@52
|
471 t)
|
yuuji@52
|
472 ((or YaTeX-create-file-prefix-g (file-exists-p file))
|
yuuji@52
|
473 (find-file-other-window file) t)
|
yuuji@52
|
474 (t (message "%s was not found in this directory." file)
|
yuuji@69
|
475 nil)))
|
yuuji@23
|
476
|
yuuji@70
|
477 (defun YaTeX-get-file-buffer (file)
|
yuuji@70
|
478 "Return the FILE's buffer.
|
yuuji@70
|
479 Base directory is that of main file or current directory."
|
yuuji@70
|
480 (let (dir main (cdir default-directory))
|
yuuji@70
|
481 (or (and (eq major-mode 'yatex-mode)
|
yuuji@70
|
482 YaTeX-search-file-from-top-directory
|
yuuji@70
|
483 (save-excursion
|
yuuji@70
|
484 (YaTeX-visit-main t)
|
yuuji@70
|
485 (get-file-buffer file)))
|
yuuji@70
|
486 (get-file-buffer file))))
|
yuuji@70
|
487
|
yuuji@23
|
488 (defun YaTeX-replace-format-sub (string format repl)
|
yuuji@23
|
489 (let ((beg (or (string-match (concat "^\\(%" format "\\)") string)
|
yuuji@23
|
490 (string-match (concat "[^%]\\(%" format "\\)") string)))
|
yuuji@23
|
491 (len (length format)))
|
yuuji@23
|
492 (if (null beg) string ;no conversion
|
yuuji@23
|
493 (concat
|
yuuji@70
|
494 (substring string 0 (match-beginning 1)) (or repl "")
|
yuuji@69
|
495 (substring string (match-end 1))))))
|
yuuji@23
|
496
|
yuuji@23
|
497 ;;;###autoload
|
yuuji@23
|
498 (defun YaTeX-replace-format (string format repl)
|
yuuji@23
|
499 "In STRING, replace first appearance of FORMAT to REPL as if
|
yuuji@23
|
500 function `format' does. FORMAT does not contain `%'"
|
yuuji@80
|
501 (let ((ans string) (case-fold-search nil))
|
yuuji@23
|
502 (while (not (string=
|
yuuji@23
|
503 ans (setq string (YaTeX-replace-format-sub ans format repl))))
|
yuuji@23
|
504 (setq ans string))
|
yuuji@69
|
505 string))
|
yuuji@23
|
506
|
yuuji@23
|
507 ;;;###autoload
|
yuuji@70
|
508 (defun YaTeX-replace-formats (string replace-list)
|
yuuji@70
|
509 (let ((list replace-list))
|
yuuji@70
|
510 (while list
|
yuuji@70
|
511 (setq string (YaTeX-replace-format
|
yuuji@70
|
512 string (car (car list)) (cdr (car list)))
|
yuuji@70
|
513 list (cdr list)))
|
yuuji@70
|
514 string))
|
yuuji@70
|
515
|
yuuji@70
|
516 ;;;###autoload
|
yuuji@23
|
517 (defun YaTeX-replace-format-args (string &rest args)
|
yuuji@23
|
518 "Translate the argument mark #1, #2, ... #n in the STRING into the
|
yuuji@23
|
519 corresponding real arguments ARGS."
|
yuuji@23
|
520 (let ((argp 1))
|
yuuji@23
|
521 (while args
|
yuuji@23
|
522 (setq string
|
yuuji@23
|
523 (YaTeX-replace-format string (int-to-string argp) (car args)))
|
yuuji@23
|
524 (setq args (cdr args) argp (1+ argp))))
|
yuuji@69
|
525 string)
|
yuuji@23
|
526
|
yuuji@23
|
527 ;;;###autoload
|
yuuji@23
|
528 (defun rindex (string char)
|
yuuji@226
|
529 "Return the last position of STRING where character CHAR found."
|
yuuji@23
|
530 (let ((pos (1- (length string)))(index -1))
|
yuuji@174
|
531 (catch 'rindex
|
yuuji@174
|
532 (while (>= pos 0)
|
yuuji@174
|
533 (cond
|
yuuji@174
|
534 ((= (aref string pos) char)
|
yuuji@174
|
535 (throw 'rindex pos))
|
yuuji@174
|
536 (t (setq pos (1- pos))))))))
|
yuuji@64
|
537
|
yuuji@64
|
538 ;;;###autoload
|
yuuji@64
|
539 (defun point-beginning-of-line ()
|
yuuji@64
|
540 (save-excursion (beginning-of-line)(point)))
|
yuuji@64
|
541
|
yuuji@64
|
542 ;;;###autoload
|
yuuji@64
|
543 (defun point-end-of-line ()
|
yuuji@64
|
544 (save-excursion (end-of-line)(point)))
|
yuuji@64
|
545
|
yuuji@354
|
546 (defun YaTeX-showup-buffer-bottom-most (x) (nth 3 (window-edges x)))
|
yuuji@23
|
547 ;;;###autoload
|
yuuji@23
|
548 (defun YaTeX-showup-buffer (buffer &optional func select)
|
yuuji@23
|
549 "Make BUFFER show up in certain window (but current window)
|
yuuji@23
|
550 that gives the maximum value by the FUNC. FUNC should take an argument
|
yuuji@23
|
551 of its window object. Non-nil for optional third argument SELECT selects
|
yuuji@49
|
552 that window. This function never selects minibuffer window."
|
yuuji@86
|
553 (or (and (if (and YaTeX-emacs-19 select window-system)
|
yuuji@47
|
554 (get-buffer-window buffer t)
|
yuuji@47
|
555 (get-buffer-window buffer))
|
yuuji@47
|
556 (progn
|
yuuji@47
|
557 (if select
|
yuuji@51
|
558 (goto-buffer-window buffer))
|
yuuji@47
|
559 t))
|
yuuji@23
|
560 (let ((window (selected-window))
|
yuuji@23
|
561 (wlist (YaTeX-window-list)) win w (x 0))
|
yuuji@23
|
562 (cond
|
yuuji@23
|
563 ((> (length wlist) 2)
|
yuuji@23
|
564 (if func
|
yuuji@23
|
565 (while wlist
|
yuuji@23
|
566 (setq w (car wlist))
|
yuuji@23
|
567 (if (and (not (eq window w))
|
yuuji@23
|
568 (> (funcall func w) x))
|
yuuji@23
|
569 (setq win w x (funcall func w)))
|
yuuji@23
|
570 (setq wlist (cdr wlist)))
|
yuuji@23
|
571 (setq win (get-lru-window)))
|
yuuji@23
|
572 (select-window win)
|
yuuji@23
|
573 (switch-to-buffer buffer)
|
yuuji@23
|
574 (or select (select-window window)))
|
yuuji@23
|
575 ((= (length wlist) 2)
|
yuuji@49
|
576 ;(other-window 1);This does not work properly on Emacs-19
|
yuuji@49
|
577 (select-window (get-lru-window))
|
yuuji@23
|
578 (switch-to-buffer buffer)
|
yuuji@354
|
579 (if (< (window-height) (/ YaTeX-default-pop-window-height 2))
|
yuuji@354
|
580 (enlarge-window (- YaTeX-default-pop-window-height
|
yuuji@354
|
581 (window-height))))
|
yuuji@23
|
582 (or select (select-window window)))
|
yuuji@23
|
583 (t ;if one-window
|
yuuji@23
|
584 (cond
|
yuuji@86
|
585 ((and YaTeX-emacs-19 window-system (get-buffer-window buffer t))
|
yuuji@47
|
586 nil) ;if found in other frame
|
yuuji@23
|
587 (YaTeX-default-pop-window-height
|
yuuji@51
|
588 (split-window-calculate-height YaTeX-default-pop-window-height)
|
yuuji@59
|
589 ;;(pop-to-buffer buffer) ;damn! emacs-19.30
|
yuuji@59
|
590 (select-window (next-window nil 1))
|
yuuji@59
|
591 (switch-to-buffer (get-buffer-create buffer))
|
yuuji@23
|
592 (or select (select-window window)))
|
yuuji@23
|
593 (t nil)))
|
yuuji@69
|
594 ))))
|
yuuji@69
|
595
|
yuuji@69
|
596 (cond
|
yuuji@69
|
597 ((fboundp 'screen-height)
|
yuuji@69
|
598 (fset 'YaTeX-screen-height 'screen-height)
|
yuuji@182
|
599 (fset 'YaTeX-screen-width 'screen-width)
|
yuuji@182
|
600 (fset 'YaTeX-set-screen-height 'set-screen-height)
|
yuuji@182
|
601 (fset 'YaTeX-set-screen-width 'set-screen-width))
|
yuuji@69
|
602 ((fboundp 'frame-height)
|
yuuji@69
|
603 (fset 'YaTeX-screen-height 'frame-height)
|
yuuji@182
|
604 (fset 'YaTeX-screen-width 'frame-width)
|
yuuji@182
|
605 (fset 'YaTeX-set-screen-height 'set-frame-height)
|
yuuji@182
|
606 (fset 'YaTeX-set-screen-width 'set-frame-width))
|
yuuji@182
|
607 (t (error "I don't know how to run YaTeX on this Emacs...")))
|
yuuji@23
|
608
|
yuuji@23
|
609 ;;;###autoload
|
yuuji@51
|
610 (defun split-window-calculate-height (height)
|
yuuji@51
|
611 "Split current window wight specified HEIGHT.
|
yuuji@59
|
612 If HEIGHT is number, make a new window that has HEIGHT lines.
|
yuuji@59
|
613 If HEIGHT is string, make a new window that occupies HEIGT % of screen height.
|
yuuji@51
|
614 Otherwise split window conventionally."
|
yuuji@59
|
615 (if (one-window-p t)
|
yuuji@51
|
616 (split-window
|
yuuji@51
|
617 (selected-window)
|
yuuji@51
|
618 (max
|
yuuji@51
|
619 (min
|
yuuji@69
|
620 (- (YaTeX-screen-height)
|
yuuji@59
|
621 (if (numberp height)
|
yuuji@59
|
622 (+ height 2)
|
yuuji@69
|
623 (/ (* (YaTeX-screen-height)
|
yuuji@451
|
624 (YaTeX-str2int height))
|
yuuji@51
|
625 100)))
|
yuuji@69
|
626 (- (YaTeX-screen-height) window-min-height 1))
|
yuuji@69
|
627 window-min-height))))
|
yuuji@51
|
628
|
yuuji@51
|
629 ;;;###autoload
|
yuuji@23
|
630 (defun YaTeX-window-list ()
|
yuuji@23
|
631 (let*((curw (selected-window)) (win curw) (wlist (list curw)))
|
yuuji@23
|
632 (while (not (eq curw (setq win (next-window win))))
|
yuuji@23
|
633 (or (eq win (minibuffer-window))
|
yuuji@23
|
634 (setq wlist (cons win wlist))))
|
yuuji@69
|
635 wlist))
|
yuuji@23
|
636
|
yuuji@72
|
637 (if YaTeX-emacs-21
|
yuuji@72
|
638 ;; Emacs-21's next-window returns other frame's window even if called
|
yuuji@72
|
639 ;; with argument ALL-FRAMES nil, when called from minibuffer context.
|
yuuji@72
|
640 ;; Therefore, check frame identity here.
|
yuuji@72
|
641 (defun YaTeX-window-list ()
|
yuuji@72
|
642 (let*((curw (selected-window)) (win curw) (wlist (list curw))
|
yuuji@72
|
643 (curf (window-frame curw)))
|
yuuji@72
|
644 (while (and (not (eq curw (setq win (next-window win))))
|
yuuji@72
|
645 (eq curf (window-frame win)))
|
yuuji@72
|
646 (or (eq win (minibuffer-window))
|
yuuji@72
|
647 (setq wlist (cons win wlist))))
|
yuuji@72
|
648 wlist)))
|
yuuji@72
|
649
|
yuuji@23
|
650 ;;;###autoload
|
yuuji@23
|
651 (defun substitute-all-key-definition (olddef newdef keymap)
|
yuuji@23
|
652 "Replace recursively OLDDEF with NEWDEF for any keys in KEYMAP now
|
yuuji@23
|
653 defined as OLDDEF. In other words, OLDDEF is replaced with NEWDEF
|
yuuji@23
|
654 where ever it appears."
|
yuuji@68
|
655 (if YaTeX-emacs-19
|
yuuji@68
|
656 (substitute-key-definition olddef newdef keymap global-map)
|
yuuji@68
|
657 (mapcar
|
yuuji@68
|
658 (function (lambda (key) (define-key keymap key newdef)))
|
yuuji@68
|
659 (where-is-internal olddef keymap))))
|
yuuji@23
|
660
|
yuuji@23
|
661 ;;;###autoload
|
yuuji@588
|
662 (defun YaTeX-match-string (n &optional m str)
|
yuuji@588
|
663 "Return (buffer-substring (match-beginning n) (match-beginning m)).
|
yuuji@588
|
664 Optional third argument STR gives substring from string STR."
|
yuuji@23
|
665 (if (match-beginning n)
|
yuuji@590
|
666 (if str (YaTeX-substring
|
yuuji@590
|
667 str (match-beginning m) (match-end (or m n)))
|
yuuji@588
|
668 (YaTeX-buffer-substring (match-beginning n)
|
yuuji@588
|
669 (match-end (or m n))))))
|
yuuji@23
|
670
|
yuuji@23
|
671 ;;;###autoload
|
yuuji@23
|
672 (defun YaTeX-minibuffer-complete ()
|
yuuji@49
|
673 "Complete in minibuffer.
|
yuuji@51
|
674 If the symbol 'delim is bound and is string, its value is assumed to be
|
yuuji@49
|
675 the character class of delimiters. Completion will be performed on
|
yuuji@51
|
676 the last field separated by those delimiters.
|
yuuji@51
|
677 If the symbol 'quick is bound and is 't, when the try-completion results
|
yuuji@51
|
678 in t, exit minibuffer immediately."
|
yuuji@23
|
679 (interactive)
|
yuuji@72
|
680 (save-restriction
|
yuuji@72
|
681 (narrow-to-region
|
yuuji@72
|
682 (if (fboundp 'field-beginning) (field-beginning (point-max)) (point-min))
|
yuuji@72
|
683 (point-max))
|
yuuji@72
|
684 (let ((md (match-data)) beg word compl
|
yuuji@72
|
685 (quick (and (boundp 'quick) (eq quick t)))
|
yuuji@72
|
686 (displist ;function to display completion-list
|
yuuji@72
|
687 (function
|
yuuji@72
|
688 (lambda ()
|
yuuji@72
|
689 (with-output-to-temp-buffer "*Completions*"
|
yuuji@72
|
690 (display-completion-list
|
yuuji@72
|
691 (all-completions word minibuffer-completion-table)))))))
|
yuuji@72
|
692 (setq beg (if (and (boundp 'delim) (stringp delim))
|
yuuji@72
|
693 (save-excursion
|
yuuji@72
|
694 (skip-chars-backward (concat "^" delim))
|
yuuji@72
|
695 (point))
|
yuuji@72
|
696 (point-min))
|
yuuji@72
|
697 word (buffer-substring beg (point-max))
|
yuuji@72
|
698 compl (try-completion word minibuffer-completion-table))
|
yuuji@72
|
699 (cond
|
yuuji@72
|
700 ((eq compl t)
|
yuuji@72
|
701 (if quick (exit-minibuffer)
|
yuuji@72
|
702 (let ((p (point)) (max (point-max)))
|
yuuji@72
|
703 (unwind-protect
|
yuuji@72
|
704 (progn
|
yuuji@72
|
705 (goto-char max)
|
yuuji@72
|
706 (insert " [Sole completion]")
|
yuuji@72
|
707 (goto-char p)
|
yuuji@72
|
708 (sit-for 1))
|
yuuji@72
|
709 (delete-region max (point-max))
|
yuuji@72
|
710 (goto-char p)))))
|
yuuji@72
|
711 ((eq compl nil)
|
yuuji@72
|
712 (ding)
|
yuuji@72
|
713 (save-excursion
|
yuuji@72
|
714 (let (p)
|
yuuji@72
|
715 (unwind-protect
|
yuuji@72
|
716 (progn
|
yuuji@72
|
717 (goto-char (setq p (point-max)))
|
yuuji@72
|
718 (insert " [No match]")
|
yuuji@72
|
719 (goto-char p)
|
yuuji@72
|
720 (sit-for 2))
|
yuuji@72
|
721 (delete-region p (point-max))))))
|
yuuji@72
|
722 ((string= compl word)
|
yuuji@72
|
723 (funcall displist))
|
yuuji@72
|
724 (t (delete-region beg (point-max))
|
yuuji@72
|
725 (insert compl)
|
yuuji@72
|
726 (if quick
|
yuuji@72
|
727 (if (eq (try-completion compl minibuffer-completion-table) t)
|
yuuji@72
|
728 (exit-minibuffer)
|
yuuji@72
|
729 (funcall displist)))))
|
yuuji@72
|
730 (store-match-data md))))
|
yuuji@23
|
731
|
yuuji@51
|
732 (defun YaTeX-minibuffer-quick-complete ()
|
yuuji@51
|
733 "Set 'quick to 't and call YaTeX-minibuffer-complete.
|
yuuji@51
|
734 See documentation of YaTeX-minibuffer-complete."
|
yuuji@51
|
735 (interactive)
|
yuuji@51
|
736 (let ((quick t))
|
yuuji@51
|
737 (self-insert-command 1)
|
yuuji@51
|
738 (YaTeX-minibuffer-complete)))
|
yuuji@51
|
739
|
yuuji@168
|
740 (defun YaTeX-yatex-buffer-list ()
|
yuuji@168
|
741 (save-excursion
|
yuuji@168
|
742 (delq nil (mapcar (function (lambda (buf)
|
yuuji@168
|
743 (set-buffer buf)
|
yuuji@168
|
744 (if (eq major-mode 'yatex-mode) buf)))
|
yuuji@168
|
745 (buffer-list)))))
|
yuuji@168
|
746
|
yuuji@51
|
747 (defun foreach-buffers (pattern job)
|
yuuji@51
|
748 "For each buffer which matches with PATTERN, do JOB."
|
yuuji@51
|
749 (let ((list (buffer-list)))
|
yuuji@51
|
750 (save-excursion
|
yuuji@51
|
751 (while list
|
yuuji@51
|
752 (set-buffer (car list))
|
yuuji@51
|
753 (if (or (and (stringp pattern)
|
yuuji@51
|
754 (buffer-file-name)
|
yuuji@51
|
755 (string-match pattern (buffer-file-name)))
|
yuuji@51
|
756 (and (symbolp pattern) major-mode (eq major-mode pattern)))
|
yuuji@51
|
757 (eval job))
|
yuuji@69
|
758 (setq list (cdr list))))))
|
yuuji@51
|
759
|
yuuji@51
|
760 (defun goto-buffer-window (buffer)
|
yuuji@51
|
761 "Select window which is bound to BUFFER.
|
yuuji@51
|
762 If no such window exist, switch to buffer BUFFER."
|
yuuji@52
|
763 (interactive "BGoto buffer: ")
|
yuuji@51
|
764 (if (stringp buffer)
|
yuuji@51
|
765 (setq buffer (or (get-file-buffer buffer) (get-buffer buffer))))
|
yuuji@51
|
766 (if (get-buffer buffer)
|
yuuji@51
|
767 (cond
|
yuuji@51
|
768 ((get-buffer-window buffer)
|
yuuji@51
|
769 (select-window (get-buffer-window buffer)))
|
yuuji@51
|
770 ((and YaTeX-emacs-19 (get-buffer-window buffer t))
|
yuuji@51
|
771 (let*((win (get-buffer-window buffer t))
|
yuuji@51
|
772 (frame (window-frame win)))
|
yuuji@51
|
773 (select-frame frame)
|
yuuji@51
|
774 (raise-frame frame)
|
yuuji@51
|
775 (focus-frame frame)
|
yuuji@51
|
776 (select-window win)
|
yuuji@51
|
777 (set-mouse-position frame 0 0)
|
yuuji@51
|
778 (and (featurep 'windows) (fboundp 'win:adjust-window)
|
yuuji@51
|
779 (win:adjust-window))))
|
yuuji@54
|
780 ((and (featurep 'windows) (fboundp 'win:get-buffer-window)
|
yuuji@56
|
781 (let ((w (win:get-buffer-window buffer)))
|
yuuji@56
|
782 (and w (win:switch-window w))))
|
yuuji@54
|
783 (select-window (get-buffer-window buffer)))
|
yuuji@69
|
784 (t (switch-to-buffer buffer)))))
|
yuuji@51
|
785
|
yuuji@51
|
786 ;; Here starts the functions which support gmhist-vs-Emacs19 compatible
|
yuuji@51
|
787 ;; reading with history.
|
yuuji@51
|
788 ;;;###autoload
|
yuuji@51
|
789 (defun completing-read-with-history
|
yuuji@51
|
790 (prompt table &optional predicate must-match initial hsym)
|
yuuji@51
|
791 "Completing read with general history: gmhist, Emacs-19."
|
yuuji@51
|
792 (let ((minibuffer-history
|
yuuji@51
|
793 (or (symbol-value hsym)
|
yuuji@51
|
794 (and (boundp 'minibuffer-history) minibuffer-history)))
|
yuuji@51
|
795 (minibuffer-history-symbol (or hsym 'minibuffer-history)))
|
yuuji@51
|
796 (prog1
|
yuuji@51
|
797 (if (fboundp 'completing-read-with-history-in)
|
yuuji@51
|
798 (completing-read-with-history-in
|
yuuji@51
|
799 minibuffer-history-symbol prompt table predicate must-match initial)
|
yuuji@393
|
800 (save-excursion ;work around to avoid cursor warp
|
yuuji@393
|
801 (completing-read prompt table predicate must-match initial)))
|
yuuji@51
|
802 (if (and YaTeX-emacs-19 hsym) (set hsym minibuffer-history)))))
|
yuuji@51
|
803
|
yuuji@51
|
804 ;;;###autoload
|
yuuji@51
|
805 (defun read-from-minibuffer-with-history (prompt &optional init map read hsym)
|
yuuji@51
|
806 "Read from minibuffer with general history: gmhist, Emacs-19."
|
yuuji@51
|
807 (cond
|
yuuji@51
|
808 (YaTeX-emacs-19
|
yuuji@393
|
809 (save-excursion ;work around to avoid cursor warp
|
yuuji@393
|
810 (read-from-minibuffer prompt init map read hsym)))
|
yuuji@51
|
811 (t
|
yuuji@51
|
812 (let ((minibuffer-history-symbol hsym))
|
yuuji@51
|
813 (read-from-minibuffer prompt init map read)))))
|
yuuji@51
|
814
|
yuuji@51
|
815 ;;;###autoload
|
yuuji@51
|
816 (defun read-string-with-history (prompt &optional init hsym)
|
yuuji@51
|
817 "Read string with history: gmhist(Emacs-18) and Emacs-19."
|
yuuji@51
|
818 (cond
|
yuuji@51
|
819 (YaTeX-emacs-19
|
yuuji@393
|
820 (save-excursion ;work around to avoid cursor warp
|
yuuji@393
|
821 (read-from-minibuffer prompt init minibuffer-local-map nil hsym)))
|
yuuji@51
|
822 ((featurep 'gmhist-mh)
|
yuuji@51
|
823 (read-with-history-in hsym prompt init))
|
yuuji@51
|
824 (t (read-string prompt init))))
|
yuuji@23
|
825
|
yuuji@234
|
826 (defvar YaTeX-skip-next-reader-char ?\C-j)
|
yuuji@237
|
827 (defun YaTeX-read-string-or-skip (&rest args)
|
yuuji@237
|
828 "Read string, or skip if last input char is \C-j."
|
yuuji@293
|
829 (if (equal (if (boundp 'last-input-event) last-input-event last-input-char)
|
yuuji@293
|
830 YaTeX-skip-next-reader-char)
|
yuuji@237
|
831 ""
|
yuuji@393
|
832 (save-excursion ;work around to avoid cursor warp
|
yuuji@393
|
833 (apply 'read-string args))))
|
yuuji@234
|
834
|
yuuji@244
|
835 (defun YaTeX-completing-read-or-skip (&rest args)
|
yuuji@244
|
836 "Do completing-read, or skip if last input char is \C-j."
|
yuuji@293
|
837 (if (equal (if (boundp 'last-input-event) last-input-event last-input-char)
|
yuuji@293
|
838 YaTeX-skip-next-reader-char)
|
yuuji@244
|
839 ""
|
yuuji@393
|
840 (save-excursion ;work around to avoid cursor warp
|
yuuji@393
|
841 (apply 'completing-read args))))
|
yuuji@244
|
842
|
yuuji@69
|
843 ;;;###autoload
|
yuuji@69
|
844 (fset 'YaTeX-rassoc
|
yuuji@69
|
845 (if (and nil (fboundp 'rassoc) (subrp (symbol-function 'rassoc)))
|
yuuji@69
|
846 (symbol-function 'rassoc)
|
yuuji@70
|
847 (function
|
yuuji@70
|
848 (lambda (key list)
|
yuuji@70
|
849 (let ((l list))
|
yuuji@70
|
850 (catch 'found
|
yuuji@70
|
851 (while l
|
yuuji@70
|
852 (if (equal key (cdr (car l)))
|
yuuji@70
|
853 (throw 'found (car l)))
|
yuuji@70
|
854 (setq l (cdr l)))))))))
|
yuuji@70
|
855
|
yuuji@354
|
856 (defun YaTeX-set-file-coding-system (code coding)
|
yuuji@354
|
857 "Set current buffer's coding system according to symbol."
|
yuuji@354
|
858 (cond ((null code)
|
yuuji@354
|
859 nil)
|
yuuji@354
|
860 ((boundp 'MULE)
|
yuuji@354
|
861 (set-file-coding-system coding))
|
yuuji@354
|
862 ((and YaTeX-emacs-20 (boundp 'buffer-file-coding-system))
|
yuuji@354
|
863 (setq buffer-file-coding-system
|
yuuji@354
|
864 (or (and (fboundp 'set-auto-coding) buffer-file-name
|
yuuji@354
|
865 (save-excursion
|
yuuji@354
|
866 (goto-char (point-min))
|
yuuji@354
|
867 (set-auto-coding buffer-file-name (buffer-size))))
|
yuuji@354
|
868 coding)))
|
yuuji@354
|
869 ((featurep 'mule)
|
yuuji@354
|
870 (set-file-coding-system coding))
|
yuuji@354
|
871 ((boundp 'NEMACS)
|
yuuji@354
|
872 (make-local-variable 'kanji-fileio-code)
|
yuuji@354
|
873 (setq kanji-fileio-code code))))
|
yuuji@354
|
874
|
yuuji@70
|
875 (defun YaTeX-insert-file-contents (file visit &optional beg end)
|
yuuji@70
|
876 (cond
|
yuuji@72
|
877 ((and (string< "19" emacs-version) (not (featurep 'xemacs)))
|
yuuji@70
|
878 (insert-file-contents file visit beg end))
|
yuuji@77
|
879 ((string-match "unix\\|linux" (symbol-name system-type))
|
yuuji@70
|
880 (let ((default-process-coding-system
|
yuuji@72
|
881 (and (boundp '*noconv*) (list '*noconv*)))
|
yuuji@72
|
882 (file-coding-system (and (boundp '*noconv*) '*noconv*))
|
yuuji@70
|
883 kanji-fileio-code
|
yuuji@70
|
884 (default-process-kanji-code 0))
|
yuuji@70
|
885 (call-process shell-file-name file (current-buffer) nil
|
yuuji@70
|
886 (or (and (boundp 'shell-command-option)
|
yuuji@70
|
887 shell-command-option)
|
yuuji@70
|
888 "-c")
|
yuuji@77
|
889 (format "dd bs=1 count=%d | tail -c +%d" end beg))))
|
yuuji@70
|
890 (t (insert-file-contents file))))
|
yuuji@70
|
891
|
yuuji@70
|
892 (defun YaTeX-split-string (str &optional sep null)
|
yuuji@70
|
893 "Split string STR by every occurrence of SEP(regexp).
|
yuuji@70
|
894 If the optional second argument SEP is nil, it defaults to \"[ \f\t\n\r\v]+\".
|
yuuji@70
|
895 Do not include null string by default. Non-nil for optional third argument
|
yuuji@70
|
896 NULL includes null string in a list."
|
yuuji@70
|
897 (let ((sep (or sep "[ \f\t\n\r\v]+"))
|
yuuji@70
|
898 list m)
|
yuuji@70
|
899 (while str
|
yuuji@70
|
900 (if (setq m (string-match sep str))
|
yuuji@70
|
901 (progn
|
yuuji@70
|
902 (if (or (> m 0) null)
|
yuuji@70
|
903 (setq list (cons (substring str 0 m) list)))
|
yuuji@70
|
904 (setq str (substring str (match-end 0))))
|
yuuji@70
|
905 (if (or null (string< "" str))
|
yuuji@70
|
906 (setq list (cons str list)))
|
yuuji@70
|
907 (setq str nil)))
|
yuuji@70
|
908 (nreverse list)))
|
yuuji@69
|
909
|
yuuji@73
|
910 ;;;###autoload
|
yuuji@73
|
911 (defun YaTeX-delete1 (elt list)
|
yuuji@73
|
912 "Delete"
|
yuuji@73
|
913 (let (e)
|
yuuji@73
|
914 (while (setq e (YaTeX-member elt list))
|
yuuji@73
|
915 (setq list (delq (car e) list))))
|
yuuji@73
|
916 list)
|
yuuji@73
|
917 (if (fboundp 'delete)
|
yuuji@73
|
918 (fset 'YaTeX-delete (symbol-function 'delete))
|
yuuji@73
|
919 (fset 'YaTeX-delete (symbol-function 'YaTeX-delete1)))
|
yuuji@73
|
920
|
yuuji@73
|
921 (defun YaTeX-member1 (elt list)
|
yuuji@73
|
922 (catch 'found
|
yuuji@73
|
923 (while list
|
yuuji@73
|
924 (if (equal elt (car list))
|
yuuji@73
|
925 (throw 'found list))
|
yuuji@73
|
926 (setq list (cdr list)))))
|
yuuji@73
|
927
|
yuuji@73
|
928 (if (and (fboundp 'member) (subrp (symbol-function 'member)))
|
yuuji@73
|
929 (fset 'YaTeX-member (symbol-function 'member))
|
yuuji@73
|
930 (fset 'YaTeX-member (symbol-function 'YaTeX-member1)))
|
yuuji@73
|
931
|
yuuji@53
|
932 ;;;
|
yuuji@53
|
933 ;; Interface function for windows.el
|
yuuji@53
|
934 ;;;
|
yuuji@53
|
935 ;;;###autoload
|
yuuji@290
|
936 (fset 'YaTeX-last-key
|
yuuji@290
|
937 (if (fboundp 'win:last-key)
|
yuuji@290
|
938 'win:last-key
|
yuuji@353
|
939 (function (lambda () (if (boundp 'last-command-char)
|
yuuji@353
|
940 last-command-char
|
yuuji@353
|
941 last-command-event)))))
|
yuuji@53
|
942 (defun YaTeX-switch-to-window ()
|
yuuji@53
|
943 "Switch to windows.el's window decided by last pressed key."
|
yuuji@53
|
944 (interactive)
|
yuuji@53
|
945 (or (featurep 'windows) (error "Why don't you use `windows.el'?"))
|
yuuji@290
|
946 (win-switch-to-window 1 (- (YaTeX-last-key) win:base-key)))
|
yuuji@290
|
947
|
yuuji@53
|
948
|
yuuji@64
|
949 ;;;###autoload
|
yuuji@138
|
950 (defun YaTeX-command-to-string (cmd)
|
yuuji@138
|
951 (if (fboundp 'shell-command-to-string)
|
yuuji@138
|
952 (funcall 'shell-command-to-string cmd)
|
yuuji@138
|
953 (let ((tbuf " *tmpout*"))
|
yuuji@138
|
954 (if (get-buffer-create tbuf) (kill-buffer tbuf))
|
yuuji@138
|
955 (let ((standard-output (get-buffer-create tbuf)))
|
yuuji@138
|
956 (unwind-protect
|
yuuji@138
|
957 (save-excursion
|
yuuji@138
|
958 (call-process
|
yuuji@138
|
959 shell-file-name nil tbuf nil YaTeX-shell-command-option cmd)
|
yuuji@138
|
960 (set-buffer tbuf)
|
yuuji@138
|
961 (buffer-string))
|
yuuji@138
|
962 (kill-buffer tbuf))))))
|
yuuji@138
|
963
|
yuuji@372
|
964 ;;; (defun YaTeX-executable-find(cmd)...)
|
yuuji@372
|
965 (fset 'YaTeX-executable-find
|
yuuji@372
|
966 (if (fboundp 'executable-find)
|
yuuji@372
|
967 'executable-find
|
yuuji@372
|
968 (function (lambda (cmd)
|
yuuji@372
|
969 (let ((list exec-path) path)
|
yuuji@372
|
970 (catch 'exec
|
yuuji@372
|
971 (while list
|
yuuji@372
|
972 (if (file-executable-p
|
yuuji@372
|
973 (setq path (expand-file-name cmd (car list))))
|
yuuji@372
|
974 (throw 'exec path))
|
yuuji@372
|
975 (setq list (cdr list)))))))))
|
yuuji@372
|
976
|
yuuji@138
|
977 ;;;###autoload
|
yuuji@64
|
978 (defun YaTeX-reindent (col)
|
yuuji@64
|
979 "Remove current indentation and reindento to COL column."
|
yuuji@64
|
980 (save-excursion
|
yuuji@64
|
981 (beginning-of-line)
|
yuuji@64
|
982 (skip-chars-forward " \t")
|
yuuji@64
|
983 (if (/= col (current-column))
|
yuuji@64
|
984 (progn
|
yuuji@64
|
985 (delete-region (point) (progn (beginning-of-line) (point)))
|
yuuji@64
|
986 (indent-to col))))
|
yuuji@64
|
987 (skip-chars-forward " \t" (point-end-of-line)))
|
yuuji@64
|
988
|
yuuji@64
|
989 (defun YaTeX-inner-environment (&optional quick)
|
yuuji@64
|
990 "Return current inner-most environment.
|
yuuji@64
|
991 Non-nil for optional argument QUICK restricts search bound to most
|
yuuji@64
|
992 recent sectioning command. Matching point is stored to property 'point
|
yuuji@64
|
993 of 'YaTeX-inner-environment, which can be referred by
|
yuuji@64
|
994 (get 'YaTeX-inner-environment 'point)."
|
yuuji@73
|
995 (put 'YaTeX-inner-environment 'point (point-min))
|
yuuji@73
|
996 (put 'YaTeX-inner-environment 'indent 0)
|
yuuji@64
|
997 (let*((nest 0)
|
yuuji@64
|
998 (beg (YaTeX-replace-format-args
|
yuuji@64
|
999 (regexp-quote YaTeX-struct-begin)
|
yuuji@64
|
1000 ;YaTeX-struct-begin ;=== TENTATIVE!! ==
|
yuuji@64
|
1001 YaTeX-struct-name-regexp
|
yuuji@64
|
1002 (if (eq major-mode 'yahtml-mode) "\\s *.*" "")
|
yuuji@64
|
1003 ""))
|
yuuji@64
|
1004 (end (YaTeX-replace-format-args
|
yuuji@64
|
1005 (regexp-quote YaTeX-struct-end)
|
yuuji@64
|
1006 YaTeX-struct-name-regexp "" ""))
|
yuuji@64
|
1007 (begend (concat "\\(" beg "\\)\\|\\(" end "\\)"))
|
yuuji@64
|
1008 bound m0
|
yuuji@64
|
1009 (htmlp (eq major-mode 'yahtml-mode))
|
yuuji@64
|
1010 (open
|
yuuji@64
|
1011 (concat "^" (or (cdr (assq major-mode '((yahtml-mode . "<")))) "{")))
|
yuuji@64
|
1012 (close
|
yuuji@64
|
1013 (concat "^"
|
yuuji@64
|
1014 (or (cdr(assq major-mode '((yahtml-mode . "\n\t >")))) "}"))))
|
yuuji@64
|
1015 (save-excursion
|
yuuji@64
|
1016 (if quick
|
yuuji@64
|
1017 (setq bound
|
yuuji@64
|
1018 (save-excursion
|
yuuji@64
|
1019 (if htmlp
|
yuuji@64
|
1020 ;;(re-search-backward YaTeX-sectioning-regexp nil 1)
|
yuuji@73
|
1021 ;;(goto-char (point-min)) ;Is this enough? 97/6/26
|
yuuji@73
|
1022 (re-search-backward yahtml-indentation-boundary nil 1)
|
yuuji@64
|
1023 (YaTeX-re-search-active-backward
|
yuuji@64
|
1024 (concat YaTeX-ec-regexp
|
yuuji@64
|
1025 "\\(" YaTeX-sectioning-regexp "\\)\\*?{")
|
yuuji@64
|
1026 YaTeX-comment-prefix nil 1))
|
yuuji@64
|
1027 (or (bobp) (end-of-line))
|
yuuji@64
|
1028 (point))))
|
yuuji@64
|
1029 (if (catch 'begin
|
yuuji@64
|
1030 (if (and (numberp bound) (< (point) bound)) (throw 'begin nil))
|
yuuji@64
|
1031 (while (YaTeX-re-search-active-backward
|
yuuji@64
|
1032 begend YaTeX-comment-prefix bound t)
|
yuuji@64
|
1033 (setq m0 (match-beginning 0))
|
yuuji@64
|
1034 (if (looking-at end) ;;(match-beginning 2)
|
yuuji@64
|
1035 (setq nest (1+ nest))
|
yuuji@64
|
1036 (setq nest (1- nest)))
|
yuuji@64
|
1037 (if (< nest 0)
|
yuuji@64
|
1038 (progn
|
yuuji@64
|
1039 (put 'YaTeX-inner-environment 'point m0)
|
yuuji@64
|
1040 (goto-char m0)
|
yuuji@64
|
1041 (put 'YaTeX-inner-environment 'indent (current-column))
|
yuuji@64
|
1042 (throw 'begin t)))))
|
yuuji@187
|
1043 (YaTeX-buffer-substring
|
yuuji@64
|
1044 (progn (skip-chars-forward open) (1+ (point)))
|
yuuji@69
|
1045 (progn (skip-chars-forward close) (point)))))))
|
yuuji@64
|
1046
|
yuuji@392
|
1047 (defun YaTeX-in-environment-p (env)
|
yuuji@392
|
1048 "Return if current LaTeX environment is ENV.
|
yuuji@392
|
1049 ENV is given in the form of environment's name or its list."
|
yuuji@392
|
1050 (let ((md (match-data)) (nest 0) p envrx)
|
yuuji@392
|
1051 (cond
|
yuuji@392
|
1052 ((atom env)
|
yuuji@392
|
1053 (setq envrx
|
yuuji@392
|
1054 (concat "\\("
|
yuuji@392
|
1055 (regexp-quote
|
yuuji@392
|
1056 (YaTeX-replace-format-args
|
yuuji@392
|
1057 YaTeX-struct-begin env "" ""))
|
yuuji@392
|
1058 "\\>\\)\\|\\("
|
yuuji@392
|
1059 (regexp-quote
|
yuuji@392
|
1060 (YaTeX-replace-format-args
|
yuuji@392
|
1061 YaTeX-struct-end env "" ""))
|
yuuji@392
|
1062 "\\)"))
|
yuuji@392
|
1063 (save-excursion
|
yuuji@392
|
1064 (setq p (catch 'open
|
yuuji@392
|
1065 (while (YaTeX-re-search-active-backward
|
yuuji@392
|
1066 envrx YaTeX-comment-prefix nil t)
|
yuuji@392
|
1067 (if (match-beginning 2)
|
yuuji@392
|
1068 (setq nest (1+ nest))
|
yuuji@392
|
1069 (setq nest (1- nest)))
|
yuuji@392
|
1070 (if (< nest 0)
|
yuuji@392
|
1071 (throw 'open (cons env (match-beginning 0)))))))))
|
yuuji@392
|
1072 ((listp env)
|
yuuji@392
|
1073 (setq p
|
yuuji@392
|
1074 (or (YaTeX-in-environment-p (car env))
|
yuuji@392
|
1075 (and (cdr env) (YaTeX-in-environment-p (cdr env)))))))
|
yuuji@392
|
1076 (store-match-data md)
|
yuuji@392
|
1077 p;(or p (YaTeX-in-verb-p (match-beginning 0)))
|
yuuji@392
|
1078 ))
|
yuuji@392
|
1079
|
yuuji@392
|
1080 (defun YaTeX-quick-in-environment-p (env)
|
yuuji@392
|
1081 "Check quickly but unsure if current environment is ENV.
|
yuuji@392
|
1082 ENV is given in the form of environment's name or its list.
|
yuuji@392
|
1083 This function returns correct result only if ENV is NOT nested."
|
yuuji@392
|
1084 (save-excursion
|
yuuji@392
|
1085 (let ((md (match-data)) m0 (p (point)) rc clfound)
|
yuuji@392
|
1086 (cond
|
yuuji@392
|
1087 ((listp env)
|
yuuji@392
|
1088 (or (YaTeX-quick-in-environment-p (car env))
|
yuuji@392
|
1089 (and (cdr env) (YaTeX-quick-in-environment-p (cdr env)))))
|
yuuji@392
|
1090 (t
|
yuuji@392
|
1091 (unwind-protect
|
yuuji@392
|
1092 (if (prog1
|
yuuji@392
|
1093 (YaTeX-search-active-backward
|
yuuji@392
|
1094 (YaTeX-replace-format-args YaTeX-struct-begin env "" "")
|
yuuji@392
|
1095 YaTeX-comment-prefix nil t)
|
yuuji@392
|
1096 (setq m0 (match-beginning 0)))
|
yuuji@392
|
1097 (if (YaTeX-search-active-forward
|
yuuji@392
|
1098 (YaTeX-replace-format-args
|
yuuji@392
|
1099 YaTeX-struct-end env)
|
yuuji@392
|
1100 YaTeX-comment-prefix p t nil)
|
yuuji@392
|
1101 nil ;if \end{env} found, return nil
|
yuuji@392
|
1102 (cons env m0))) ;else, return meaningful values
|
yuuji@392
|
1103 (store-match-data md)))))))
|
yuuji@392
|
1104
|
yuuji@451
|
1105 (defun YaTeX-goto-corresponding-environment (&optional allow-mismatch noerr bg)
|
yuuji@73
|
1106 "Go to corresponding begin/end enclosure.
|
yuuji@73
|
1107 Optional argument ALLOW-MISMATCH allows mismatch open/clese. Use this
|
yuuji@73
|
1108 for \left(, \right).
|
yuuji@73
|
1109 Optional third argument NOERR causes no error for unballanced environment."
|
yuuji@73
|
1110 (interactive)
|
yuuji@73
|
1111 (if (not (YaTeX-on-begin-end-p)) nil
|
yuuji@73
|
1112 (let ((p (match-end 0)) b0 b1 env (nest 0) regexp re-s (op (point))
|
yuuji@73
|
1113 (m0 (match-beginning 0)) ;whole matching
|
yuuji@73
|
1114 (m1 (match-beginning 1)) ;environment in \begin{}
|
yuuji@73
|
1115 (m2 (match-beginning 2)) ;environment in \end{}
|
yuuji@73
|
1116 (m3 (match-beginning 3))) ;environment in \[ \] \( \)
|
yuuji@451
|
1117 ;(setq env (regexp-quote (buffer-substring p (match-beginning 0))))
|
yuuji@73
|
1118 (if (cond
|
yuuji@73
|
1119 (m1 ;if begin{xxx}
|
yuuji@73
|
1120 (setq env
|
yuuji@73
|
1121 (if allow-mismatch YaTeX-struct-name-regexp
|
yuuji@73
|
1122 (regexp-quote (buffer-substring m1 (match-end 1)))))
|
yuuji@451
|
1123 ; (setq regexp (concat "\\(\\\\end{" env "}\\)\\|"
|
yuuji@451
|
1124 ; "\\(\\\\begin{" env "}\\)"))
|
yuuji@73
|
1125 (setq regexp
|
yuuji@73
|
1126 (concat
|
yuuji@73
|
1127 "\\("
|
yuuji@73
|
1128 (YaTeX-replace-format-args
|
yuuji@73
|
1129 (regexp-quote YaTeX-struct-end) env "" "")
|
yuuji@73
|
1130 "\\)\\|\\("
|
yuuji@73
|
1131 (YaTeX-replace-format-args
|
yuuji@73
|
1132 (regexp-quote YaTeX-struct-begin) env "" "")
|
yuuji@73
|
1133 "\\)"))
|
yuuji@73
|
1134 (setq re-s 're-search-forward))
|
yuuji@73
|
1135 (m2 ;if end{xxx}
|
yuuji@73
|
1136 (setq env
|
yuuji@73
|
1137 (if allow-mismatch YaTeX-struct-name-regexp
|
yuuji@73
|
1138 (regexp-quote (buffer-substring m2 (match-end 2)))))
|
yuuji@451
|
1139 ; (setq regexp (concat "\\(\\\\begin{" env "}\\)\\|"
|
yuuji@451
|
1140 ; "\\(\\\\end{" env "}\\)"))
|
yuuji@73
|
1141 (setq regexp
|
yuuji@73
|
1142 (concat
|
yuuji@73
|
1143 "\\("
|
yuuji@73
|
1144 (YaTeX-replace-format-args
|
yuuji@73
|
1145 (regexp-quote YaTeX-struct-begin) env "" "")
|
yuuji@73
|
1146 "\\)\\|\\("
|
yuuji@73
|
1147 (YaTeX-replace-format-args
|
yuuji@73
|
1148 (regexp-quote YaTeX-struct-end) env "" "")
|
yuuji@73
|
1149 "\\)"))
|
yuuji@73
|
1150 (setq re-s 're-search-backward))
|
yuuji@73
|
1151 (m3 ;math environment
|
yuuji@73
|
1152 (setq env (char-after (1+ m3))
|
yuuji@73
|
1153 regexp (format "\\(%s%s\\)\\|\\(%s%s\\)"
|
yuuji@73
|
1154 YaTeX-ec-regexp
|
yuuji@73
|
1155 (regexp-quote
|
yuuji@561
|
1156 (cdr (assq env '((?\( . ")") (?\) . "(")
|
yuuji@561
|
1157 (?\[ . "]") (?\] . "[")))))
|
yuuji@73
|
1158 YaTeX-ec-regexp
|
yuuji@73
|
1159 (regexp-quote (char-to-string env)))
|
yuuji@73
|
1160 re-s (if (memq env '(?\( ?\[))
|
yuuji@73
|
1161 're-search-forward
|
yuuji@73
|
1162 're-search-backward)))
|
yuuji@73
|
1163 (t (if noerr nil (error "Corresponding environment not found."))))
|
yuuji@73
|
1164 (progn
|
yuuji@73
|
1165 (while (and (>= nest 0) (funcall re-s regexp nil t))
|
yuuji@73
|
1166 (setq b0 (match-beginning 0) b1 (match-beginning 1))
|
yuuji@73
|
1167 (if (or (equal b0 m0)
|
yuuji@73
|
1168 (YaTeX-literal-p b0))
|
yuuji@73
|
1169 nil
|
yuuji@73
|
1170 (setq nest (if (equal b0 b1)
|
yuuji@73
|
1171 (1- nest) (1+ nest)))))
|
yuuji@73
|
1172 (if (< nest 0)
|
yuuji@73
|
1173 (goto-char (match-beginning 0)) ;found.
|
yuuji@73
|
1174 (goto-char op)
|
yuuji@73
|
1175 (funcall
|
yuuji@73
|
1176 (if noerr 'message 'error)
|
yuuji@73
|
1177 "Corresponding environment `%s' not found." env)
|
yuuji@451
|
1178 (or bg (sit-for 1))
|
yuuji@73
|
1179 nil))))))
|
yuuji@73
|
1180
|
yuuji@64
|
1181 (defun YaTeX-end-environment ()
|
yuuji@64
|
1182 "Close opening environment"
|
yuuji@64
|
1183 (interactive)
|
yuuji@64
|
1184 (let ((env (YaTeX-inner-environment)))
|
yuuji@64
|
1185 (if (not env) (error "No premature environment")
|
yuuji@64
|
1186 (save-excursion
|
yuuji@187
|
1187 (if (and
|
yuuji@187
|
1188 (YaTeX-re-search-active-forward
|
yuuji@187
|
1189 (concat
|
yuuji@187
|
1190 "\\(" (YaTeX-replace-format-args
|
yuuji@187
|
1191 YaTeX-struct-end env "" "")
|
yuuji@187
|
1192 "\\)\\|\\(" (YaTeX-replace-format-args
|
yuuji@187
|
1193 YaTeX-struct-begin env "" "")
|
yuuji@187
|
1194 "\\)")
|
yuuji@187
|
1195 YaTeX-comment-prefix nil t)
|
yuuji@187
|
1196 (match-beginning 1)) ;is closing struc.
|
yuuji@64
|
1197 (if (y-or-n-p
|
yuuji@64
|
1198 (concat "Environment `" env
|
yuuji@64
|
1199 "' may be already closed. Force close?"))
|
yuuji@64
|
1200 nil
|
yuuji@64
|
1201 (error "end environment aborted."))))
|
yuuji@64
|
1202 (message "") ;Erase (y or n) message.
|
yuuji@64
|
1203 (YaTeX-insert-struc 'end env)
|
yuuji@64
|
1204 (save-excursion
|
yuuji@64
|
1205 (goto-char (or (get 'YaTeX-inner-environment 'point) (match-end 0)))
|
yuuji@64
|
1206 (if (pos-visible-in-window-p)
|
yuuji@64
|
1207 (sit-for (if YaTeX-dos 2 1))
|
yuuji@64
|
1208 (message "Matches with %s at line %d"
|
yuuji@64
|
1209 (YaTeX-replace-format-args YaTeX-struct-begin env "" "")
|
yuuji@69
|
1210 (count-lines (point-min) (point))))))))
|
yuuji@64
|
1211
|
yuuji@70
|
1212 (defun YaTeX-beginning-of-environment (&optional limit-search-bound end)
|
yuuji@70
|
1213 "Goto the beginning of the current environment.
|
yuuji@70
|
1214 Optional argument LIMIT-SEARCH-BOUND non-nil limits the search bound to
|
yuuji@70
|
1215 most recent sectioning command. Non-nil for optional third argument END
|
yuuji@70
|
1216 goes to end of environment."
|
yuuji@70
|
1217 (interactive)
|
yuuji@70
|
1218 (let ((op (point)))
|
yuuji@70
|
1219 (if (YaTeX-inner-environment limit-search-bound)
|
yuuji@70
|
1220 (progn
|
yuuji@70
|
1221 (goto-char (get 'YaTeX-inner-environment 'point))
|
yuuji@70
|
1222 (and end (YaTeX-goto-corresponding-environment))
|
yuuji@70
|
1223 (if (interactive-p) (push-mark op))
|
yuuji@80
|
1224 (point)))))
|
yuuji@70
|
1225
|
yuuji@70
|
1226 (defun YaTeX-end-of-environment (&optional limit-search-bound)
|
yuuji@70
|
1227 "Goto the end of the current environment.
|
yuuji@70
|
1228 Optional argument LIMIT-SEARCH-BOUND non-nil limits the search bound
|
yuuji@70
|
1229 to most recent sectioning command."
|
yuuji@70
|
1230 (interactive)
|
yuuji@70
|
1231 (YaTeX-beginning-of-environment limit-search-bound t))
|
yuuji@70
|
1232
|
yuuji@70
|
1233 (defun YaTeX-mark-environment ()
|
yuuji@70
|
1234 "Mark current position and move point to end of environment."
|
yuuji@70
|
1235 (interactive)
|
yuuji@130
|
1236 (require 'yatexmth)
|
yuuji@70
|
1237 (let ((curp (point)))
|
yuuji@130
|
1238 (if (YaTeX-in-math-mode-p)
|
yuuji@130
|
1239 (YaTeX-mark-mathenv)
|
yuuji@130
|
1240 (if (and (YaTeX-on-begin-end-p) (match-beginning 1)) ;if on \\begin
|
yuuji@130
|
1241 (progn (goto-char (match-end 0)))
|
yuuji@130
|
1242 (if (= (char-after (point)) ?\\) nil ;if on \\end
|
yuuji@130
|
1243 (skip-chars-backward "^\n\\\\")
|
yuuji@130
|
1244 (or (bolp) (forward-char -1))))
|
yuuji@130
|
1245 (if (not (YaTeX-end-of-environment)) ;arg1 turns to match-beginning 1
|
yuuji@70
|
1246 (progn
|
yuuji@130
|
1247 (goto-char curp)
|
yuuji@130
|
1248 (error "Cannot found the end of current environment."))
|
yuuji@130
|
1249 (YaTeX-goto-corresponding-environment)
|
yuuji@380
|
1250 ;;(beginning-of-line) ;for confirmation ;OUT 2015/1/4
|
yuuji@130
|
1251 (if (< curp (point))
|
yuuji@130
|
1252 (progn
|
yuuji@130
|
1253 (message "Mark this environment?(y or n): ")
|
yuuji@130
|
1254 (if (= (read-char) ?y) nil
|
yuuji@130
|
1255 (goto-char curp)
|
yuuji@130
|
1256 (error "Abort. Please call again at more proper position."))))
|
yuuji@130
|
1257 (set-mark-command nil)
|
yuuji@130
|
1258 (YaTeX-goto-corresponding-environment)
|
yuuji@380
|
1259 (goto-char (match-end 0))
|
yuuji@380
|
1260 ;;(end-of-line) ;OUT 2015/1/5
|
yuuji@380
|
1261 ;;(if (eobp) nil (forward-char 1)) ;OUT 2015/1/5
|
yuuji@380
|
1262 ))))
|
yuuji@70
|
1263
|
yuuji@524
|
1264 (defun YaTeX-in-BEGEND-p (&optional pt)
|
yuuji@524
|
1265 "Check if the point (or PT) is in a %#BEGIN...%#END region.
|
yuuji@515
|
1266 Return the list of beginning and ending point of the region and arg-string
|
yuuji@515
|
1267 if the point is in BEGEND. Otherwise nil."
|
yuuji@515
|
1268 (let ((b "%#BEGIN") bp args (e "%#END") (p (point)))
|
yuuji@515
|
1269 (save-excursion
|
yuuji@515
|
1270 (save-match-data ;emacs-19+ yatex1.80+
|
yuuji@515
|
1271 (and (re-search-backward b nil t)
|
yuuji@515
|
1272 (progn
|
yuuji@515
|
1273 (setq bp (match-beginning 0))
|
yuuji@515
|
1274 (goto-char (match-end 0)) ;Start to get args of %#BEGIN
|
yuuji@515
|
1275 (skip-chars-forward " \t")
|
yuuji@515
|
1276 (setq args (YaTeX-buffer-substring (point) (point-end-of-line))))
|
yuuji@515
|
1277 (re-search-forward e nil t)
|
yuuji@515
|
1278 (> (point) p)
|
yuuji@515
|
1279 (list bp (match-end 0) args))))))
|
yuuji@515
|
1280
|
yuuji@72
|
1281 (defun YaTeX-kill-buffer (buffer)
|
yuuji@72
|
1282 "Make effort to show parent buffer after kill."
|
yuuji@72
|
1283 (interactive "bKill buffer: ")
|
yuuji@72
|
1284 (or (get-buffer buffer)
|
yuuji@72
|
1285 (error "No such buffer %s" buffer))
|
yuuji@72
|
1286 (let ((pf YaTeX-parent-file))
|
yuuji@72
|
1287 (kill-buffer buffer)
|
yuuji@72
|
1288 (and pf
|
yuuji@72
|
1289 (get-file-buffer pf)
|
yuuji@72
|
1290 (switch-to-buffer (get-file-buffer pf)))))
|
yuuji@70
|
1291
|
yuuji@225
|
1292 (defun YaTeX-getset-builtin (key &optional value)
|
yuuji@142
|
1293 "Read source built-in command of %# usage."
|
yuuji@142
|
1294 (catch 'builtin
|
yuuji@225
|
1295 (let*((bl (delq nil (list (current-buffer)
|
yuuji@142
|
1296 (and YaTeX-parent-file
|
yuuji@142
|
1297 (get-file-buffer YaTeX-parent-file)))))
|
yuuji@225
|
1298 (tuple (cdr (assq major-mode
|
yuuji@225
|
1299 '((yatex-mode "%#" . "\n")
|
yuuji@225
|
1300 (yahtml-mode "<!-- #" . "[ \t]*-->\\|\n")))))
|
yuuji@225
|
1301 (leader (or (car tuple) ""))
|
yuuji@225
|
1302 (closer (or (cdr tuple) ""))
|
yuuji@225
|
1303 (prompt (format "Built-in for %s: " key)))
|
yuuji@142
|
1304 (save-excursion
|
yuuji@142
|
1305 (while bl
|
yuuji@142
|
1306 (set-buffer (car bl))
|
yuuji@142
|
1307 (save-excursion
|
yuuji@142
|
1308 (goto-char (point-min))
|
yuuji@142
|
1309 (if (and (re-search-forward
|
yuuji@142
|
1310 (concat "^" (regexp-quote (concat leader key))) nil t)
|
yuuji@142
|
1311 (not (eolp)))
|
yuuji@142
|
1312 (throw 'builtin
|
yuuji@225
|
1313 (let (b e w)
|
yuuji@225
|
1314 (skip-chars-forward " \t" (point-end-of-line))
|
yuuji@225
|
1315 (setq b (point)
|
yuuji@225
|
1316 e (if (re-search-forward closer nil t)
|
yuuji@225
|
1317 (match-beginning 0)
|
yuuji@225
|
1318 (point-end-of-line))
|
yuuji@225
|
1319 w (YaTeX-buffer-substring b e))
|
yuuji@225
|
1320 (if (null value)
|
yuuji@225
|
1321 w
|
yuuji@225
|
1322 (delete-region b e)
|
yuuji@225
|
1323 (goto-char b)
|
yuuji@225
|
1324 (if (symbolp value)
|
yuuji@225
|
1325 (setq value (read-string prompt w)))
|
yuuji@225
|
1326 (insert value)
|
yuuji@225
|
1327 value)))))
|
yuuji@225
|
1328 (setq bl (cdr bl)))
|
yuuji@225
|
1329 ; not found
|
yuuji@225
|
1330 (if (null value)
|
yuuji@225
|
1331 nil ;not set mode, return simply nil
|
yuuji@225
|
1332 (if (symbolp value)
|
yuuji@225
|
1333 (setq value (read-string prompt)))
|
yuuji@225
|
1334 (save-excursion
|
yuuji@225
|
1335 (goto-char (point-min))
|
yuuji@225
|
1336 (insert leader key " " value "\n")
|
yuuji@225
|
1337 value)))))) ;on set mode, return set value
|
yuuji@225
|
1338
|
yuuji@225
|
1339 (defun YaTeX-get-builtin (key)
|
yuuji@225
|
1340 "Read source built-in command of %# usage."
|
yuuji@225
|
1341 (YaTeX-getset-builtin key))
|
yuuji@142
|
1342
|
yuuji@64
|
1343 ;;;VER2
|
yuuji@64
|
1344 (defun YaTeX-insert-struc (what env)
|
yuuji@64
|
1345 (cond
|
yuuji@64
|
1346 ((eq what 'begin)
|
yuuji@64
|
1347 (insert (YaTeX-replace-format-args
|
yuuji@64
|
1348 YaTeX-struct-begin env (YaTeX-addin env))))
|
yuuji@64
|
1349 ((eq what 'end)
|
yuuji@64
|
1350 (insert (YaTeX-replace-format-args YaTeX-struct-end env)))
|
yuuji@69
|
1351 (t nil)))
|
yuuji@64
|
1352
|
yuuji@80
|
1353 (defun YaTeX-string-width (str)
|
yuuji@80
|
1354 "Return the display width of string."
|
yuuji@80
|
1355 (if (fboundp 'string-width)
|
yuuji@80
|
1356 (string-width str)
|
yuuji@80
|
1357 (length str)))
|
yuuji@80
|
1358 (defun YaTeX-truncate-string-width (str width)
|
yuuji@80
|
1359 (cond
|
yuuji@80
|
1360 ((fboundp 'truncate-string-to-width) (truncate-string-to-width str width))
|
yuuji@80
|
1361 ((fboundp 'truncate-string) (truncate-string str width))
|
yuuji@80
|
1362 (t (substring str 0 width))))
|
yuuji@80
|
1363
|
yuuji@142
|
1364 (defun YaTeX-hex (str)
|
yuuji@142
|
1365 "Return int expressed by hexadecimal string STR."
|
yuuji@142
|
1366 (if (string< "20" emacs-version)
|
yuuji@142
|
1367 (string-to-number str 16)
|
yuuji@142
|
1368 (let ((md (match-data)))
|
yuuji@142
|
1369 (unwind-protect
|
yuuji@142
|
1370 (if (string-match "[^0-9a-f]" str)
|
yuuji@142
|
1371 (error "Non hexadecimal character in %s" str)
|
yuuji@142
|
1372 (let ((i 0) d)
|
yuuji@142
|
1373 (setq str (downcase str))
|
yuuji@142
|
1374 (while (string< "" str)
|
yuuji@142
|
1375 (setq d (+ 0 (string-to-char str)) ; + 0 for XEmacs
|
yuuji@142
|
1376 i (+ (* 16 i) (- d (if (<= d ?9) ?0 (- ?a 10))))
|
yuuji@142
|
1377 str (substring str 1)))
|
yuuji@142
|
1378 i))
|
yuuji@142
|
1379 (store-match-data md)))))
|
yuuji@142
|
1380
|
yuuji@142
|
1381
|
yuuji@64
|
1382 ;;; Function for menu support
|
yuuji@64
|
1383 (defun YaTeX-define-menu (keymap bindlist)
|
yuuji@64
|
1384 "Define KEYMAP(symbol)'s menu-bindings according to BINDLIST.
|
yuuji@64
|
1385 KEYMAP should be a quoted symbol of newly allocated keymap.
|
yuuji@64
|
1386 BINDLIST consists of binding list. Each element is as follows.
|
yuuji@64
|
1387
|
yuuji@64
|
1388 '(menusymbol DOC_String . contents)
|
yuuji@64
|
1389
|
yuuji@64
|
1390 CONTENTS is one of lambda-form, interactive function, or other keymap.
|
yuuji@64
|
1391 See yatex19.el for example."
|
yuuji@64
|
1392 (cond
|
yuuji@64
|
1393 ((featurep 'xemacs)
|
yuuji@64
|
1394 (let (name)
|
yuuji@64
|
1395 (if (keymapp (symbol-value keymap))
|
yuuji@64
|
1396 (progn
|
yuuji@64
|
1397 (setq name (keymap-name (symbol-value keymap)))
|
yuuji@64
|
1398 (set keymap nil))
|
yuuji@64
|
1399 (setq name (car (symbol-value keymap)))
|
yuuji@64
|
1400 (set keymap (cdr (symbol-value keymap))))
|
yuuji@64
|
1401 (mapcar
|
yuuji@64
|
1402 (function
|
yuuji@64
|
1403 (lambda (bind)
|
yuuji@64
|
1404 (setq bind (cdr bind))
|
yuuji@64
|
1405 (if (eq (car-safe (cdr bind)) 'lambda)
|
yuuji@64
|
1406 (setcar (cdr bind) 'progn))
|
yuuji@64
|
1407 (if (stringp (car-safe (cdr bind)))
|
yuuji@64
|
1408 (set keymap
|
yuuji@64
|
1409 (cons (cdr bind) (symbol-value keymap)))
|
yuuji@64
|
1410 (set keymap
|
yuuji@64
|
1411 (cons (vector (car bind) (cdr bind) t)
|
yuuji@64
|
1412 (symbol-value keymap))))))
|
yuuji@64
|
1413 bindlist)
|
yuuji@64
|
1414 (set keymap (cons name (symbol-value keymap)))))
|
yuuji@64
|
1415 (t
|
yuuji@64
|
1416 (mapcar
|
yuuji@64
|
1417 (function
|
yuuji@64
|
1418 (lambda (bind)
|
yuuji@64
|
1419 (define-key (symbol-value keymap) (vector (car bind)) (cdr bind))))
|
yuuji@64
|
1420 bindlist))))
|
yuuji@64
|
1421
|
yuuji@72
|
1422 ;;;
|
yuuji@72
|
1423 ;; hilit19 vs. font-lock
|
yuuji@72
|
1424 ;;;
|
yuuji@80
|
1425 (defvar YaTeX-19-functions-font-lock-direct
|
yuuji@80
|
1426 '(YaTeX-19-re-search-in-env))
|
yuuji@80
|
1427
|
yuuji@72
|
1428 (defun YaTeX-convert-pattern-hilit2fontlock (h19pa)
|
yuuji@72
|
1429 "Convert hilit19's H19PA patterns alist to font-lock's one.
|
yuuji@72
|
1430 This function is a makeshift for YaTeX and yahtml."
|
yuuji@72
|
1431 (let ((ignorecase (not (null (car h19pa))))
|
yuuji@72
|
1432 (palist (cdr h19pa))
|
yuuji@72
|
1433 flpa i newface
|
yuuji@72
|
1434 (mapping
|
yuuji@72
|
1435 '((bold . YaTeX-font-lock-bold-face)
|
yuuji@72
|
1436 (italic . YaTeX-font-lock-italic-face)
|
yuuji@73
|
1437 (defun . font-lock-function-name-face)
|
yuuji@73
|
1438 (define . font-lock-variable-name-face)
|
yuuji@72
|
1439 (keyword . font-lock-keyword-face)
|
yuuji@72
|
1440 (decl . YaTeX-font-lock-declaration-face)
|
yuuji@72
|
1441 (label . YaTeX-font-lock-label-face)
|
yuuji@72
|
1442 (crossref . YaTeX-font-lock-crossref-face)
|
yuuji@72
|
1443 (include . YaTeX-font-lock-include-face)
|
yuuji@72
|
1444 (formula . YaTeX-font-lock-formula-face)
|
yuuji@80
|
1445 (delimiter . YaTeX-font-lock-delimiter-face)
|
yuuji@72
|
1446 (string . ignore) (comment . ignore)
|
yuuji@72
|
1447 )))
|
yuuji@72
|
1448 (while (setq i (car palist))
|
yuuji@72
|
1449 (setq newface (nth 2 i)
|
yuuji@72
|
1450 newface (or (cdr (assq newface mapping)) newface))
|
yuuji@72
|
1451 (cond
|
yuuji@72
|
1452 ((eq newface 'ignore) nil) ;no translation
|
yuuji@72
|
1453 ((stringp (car i)) ;hiliting by regexp
|
yuuji@72
|
1454 (setq flpa
|
yuuji@72
|
1455 (cons
|
yuuji@72
|
1456 (if (numberp (car (cdr i)))
|
yuuji@72
|
1457 (list (car i) ;regexp
|
yuuji@72
|
1458 (car (cdr i)) ;matching group number
|
yuuji@73
|
1459 newface nil) ;'keep) ;keep is hilit19 taste
|
yuuji@72
|
1460 (list
|
yuuji@72
|
1461 (concat
|
yuuji@72
|
1462 (car i) ;original regexp and..
|
yuuji@72
|
1463 ;;"[^"
|
yuuji@72
|
1464 ;;(regexp-quote (substring (car (cdr i)) 0 1))
|
yuuji@72
|
1465 ;;"]+" ;for shortest match
|
yuuji@72
|
1466 ".*"
|
yuuji@72
|
1467 (car (cdr i)))
|
yuuji@73
|
1468 0 (list 'quote newface) nil)) ;;'keep))
|
yuuji@72
|
1469 flpa)))
|
yuuji@72
|
1470 ((and (symbolp (car i)) (fboundp (car i)))
|
yuuji@80
|
1471 (if (memq (car i) YaTeX-19-functions-font-lock-direct)
|
yuuji@80
|
1472 ;; Put direct function call for it.
|
yuuji@80
|
1473 ;; When calling this function, fontify entire matched string.
|
yuuji@80
|
1474 (setq flpa
|
yuuji@80
|
1475 (cons
|
yuuji@80
|
1476 (list
|
yuuji@80
|
1477 (list 'lambda (list 'dummy) ;dummy should be boundary
|
yuuji@80
|
1478 (list (car i) (list 'quote (car (cdr i)))))
|
yuuji@80
|
1479 (list 0 newface))
|
yuuji@80
|
1480 flpa))
|
yuuji@80
|
1481 (setq flpa
|
yuuji@80
|
1482 (cons
|
yuuji@80
|
1483 (list (car (cdr i)) ;regexp
|
yuuji@72
|
1484 (list
|
yuuji@72
|
1485 (list
|
yuuji@80
|
1486 'lambda (list 'dummy)
|
yuuji@80
|
1487 '(goto-char (match-beginning 0))
|
yuuji@80
|
1488 (if (eq (nth 3 i) 'overwrite)
|
yuuji@80
|
1489 nil
|
yuuji@80
|
1490 '(remove-text-properties
|
yuuji@80
|
1491 (point) (min (point-max) (1+ (point)))
|
yuuji@80
|
1492 '(face nil font-lock-multiline nil)))
|
yuuji@72
|
1493 (list
|
yuuji@80
|
1494 'let (list '(e (match-end 0))
|
yuuji@80
|
1495 (list 'm (list (car i) (car (cdr i)))))
|
yuuji@80
|
1496 (list
|
yuuji@80
|
1497 'if 'm
|
yuuji@80
|
1498 (list
|
yuuji@80
|
1499 'YaTeX-font-lock-fillin
|
yuuji@80
|
1500 (list 'car 'm)
|
yuuji@80
|
1501 (list 'cdr 'm)
|
yuuji@80
|
1502 (list 'quote 'face)
|
yuuji@80
|
1503 (list 'quote 'font-lock)
|
yuuji@80
|
1504 (list 'quote newface))
|
yuuji@80
|
1505 '(goto-char e)
|
yuuji@80
|
1506 ))
|
yuuji@80
|
1507 nil) ;retun nil to cheat font-lock
|
yuuji@80
|
1508 nil nil)) ;pre-match, post-match both nil
|
yuuji@80
|
1509 flpa)))))
|
yuuji@72
|
1510 (setq palist (cdr palist)));while
|
yuuji@72
|
1511 (if (featurep 'xemacsp)
|
yuuji@72
|
1512 (nreverse flpa)
|
yuuji@72
|
1513 flpa)))
|
yuuji@72
|
1514
|
yuuji@73
|
1515 (if (and (boundp 'YaTeX-use-font-lock)
|
yuuji@73
|
1516 YaTeX-use-font-lock)
|
yuuji@73
|
1517 (require 'font-lock))
|
yuuji@73
|
1518
|
yuuji@72
|
1519 (cond
|
yuuji@73
|
1520 ((and (featurep 'font-lock) (fboundp 'defface))
|
yuuji@72
|
1521 ;; In each defface, '(class static-color) is for Emacs-21 -nw
|
yuuji@72
|
1522 ;; '(class tty) is for XEmacs-21 -nw
|
yuuji@72
|
1523 (defface YaTeX-font-lock-label-face
|
yuuji@72
|
1524 '((((class static-color)) (:foreground "yellow" :underline t))
|
yuuji@72
|
1525 (((type tty)) (:foreground "yellow" :underline t))
|
yuuji@72
|
1526 (((class color) (background dark)) (:foreground "pink" :underline t))
|
yuuji@72
|
1527 (((class color) (background light)) (:foreground "red" :underline t))
|
yuuji@72
|
1528 (t (:bold t :underline t)))
|
yuuji@72
|
1529 "Font Lock mode face used to highlight labels."
|
yuuji@72
|
1530 :group 'font-lock-faces)
|
yuuji@72
|
1531 (defvar YaTeX-font-lock-label-face 'YaTeX-font-lock-label-face)
|
yuuji@72
|
1532
|
yuuji@72
|
1533 (defface YaTeX-font-lock-declaration-face
|
yuuji@72
|
1534 '((((class color) (background dark)) (:foreground "cyan"))
|
yuuji@72
|
1535 (((class color) (background light)) (:foreground "RoyalBlue"))
|
yuuji@72
|
1536 (t (:bold t :underline t)))
|
yuuji@72
|
1537 "Font Lock mode face used to highlight some declarations."
|
yuuji@72
|
1538 :group 'font-lock-faces)
|
yuuji@72
|
1539 (defvar YaTeX-font-lock-declaration-face 'YaTeX-font-lock-declaration-face)
|
yuuji@72
|
1540
|
yuuji@72
|
1541 (defface YaTeX-font-lock-include-face
|
yuuji@72
|
1542 '((((class color) (background dark)) (:foreground "Plum1"))
|
yuuji@72
|
1543 (((class color) (background light)) (:foreground "purple"))
|
yuuji@72
|
1544 (t (:bold t :underline t)))
|
yuuji@72
|
1545 "Font Lock mode face used to highlight expression for including."
|
yuuji@72
|
1546 :group 'font-lock-faces)
|
yuuji@72
|
1547 (defvar YaTeX-font-lock-include-face 'YaTeX-font-lock-include-face)
|
yuuji@72
|
1548
|
yuuji@72
|
1549 (defface YaTeX-font-lock-formula-face
|
yuuji@72
|
1550 '((((class static-color)) (:bold t))
|
yuuji@72
|
1551 (((type tty)) (:bold t))
|
yuuji@72
|
1552 (((class color) (background dark)) (:foreground "khaki" :bold t))
|
yuuji@376
|
1553 (((class color) (background light)) (:foreground "DarkGoldenrod4"))
|
yuuji@72
|
1554 (t (:bold t :underline t)))
|
yuuji@72
|
1555 "Font Lock mode face used to highlight formula."
|
yuuji@72
|
1556 :group 'font-lock-faces)
|
yuuji@72
|
1557 (defvar YaTeX-font-lock-formula-face 'YaTeX-font-lock-formula-face)
|
yuuji@72
|
1558
|
yuuji@80
|
1559 (defface YaTeX-font-lock-delimiter-face
|
yuuji@80
|
1560 '((((class static-color)) (:bold t))
|
yuuji@80
|
1561 (((type tty)) (:bold t))
|
yuuji@80
|
1562 (((class color) (background dark))
|
yuuji@376
|
1563 (:foreground "lightyellow3" :background "navy" :bold t))
|
yuuji@80
|
1564 (((class color) (background light)) (:foreground "red"))
|
yuuji@80
|
1565 (t (:bold t :underline t)))
|
yuuji@80
|
1566 "Font Lock mode face used to highlight delimiters."
|
yuuji@80
|
1567 :group 'font-lock-faces)
|
yuuji@80
|
1568 (defvar YaTeX-font-lock-delimiter-face 'YaTeX-font-lock-delimiter-face)
|
yuuji@80
|
1569
|
yuuji@80
|
1570 (defface YaTeX-font-lock-math-sub-face
|
yuuji@80
|
1571 '((((class static-color)) (:bold t))
|
yuuji@80
|
1572 (((type tty)) (:bold t))
|
yuuji@80
|
1573 (((class color) (background dark))
|
yuuji@80
|
1574 (:foreground "khaki" :bold t :underline t))
|
yuuji@80
|
1575 (((class color) (background light))
|
yuuji@376
|
1576 (:foreground "DarkGoldenrod4" :underline t))
|
yuuji@80
|
1577 (t (:bold t :underline t)))
|
yuuji@80
|
1578 "Font Lock mode face used to highlight subscripts in formula."
|
yuuji@80
|
1579 :group 'font-lock-faces)
|
yuuji@80
|
1580 (defvar YaTeX-font-lock-math-sub-face 'YaTeX-font-lock-math-sub-face)
|
yuuji@80
|
1581
|
yuuji@80
|
1582 (defface YaTeX-font-lock-math-sup-face
|
yuuji@80
|
1583 '((((class static-color)) (:bold t))
|
yuuji@80
|
1584 (((type tty)) (:bold t))
|
yuuji@80
|
1585 (((class color) (background dark))
|
yuuji@80
|
1586 (:bold nil :foreground "ivory" :background "lightyellow4"))
|
yuuji@80
|
1587 (((class color) (background light))
|
yuuji@376
|
1588 (:underline t :foreground "DarkGoldenrod3"))
|
yuuji@80
|
1589 (t (:bold t :underline t)))
|
yuuji@80
|
1590 "Font Lock mode face used to highlight superscripts in formula."
|
yuuji@80
|
1591 :group 'font-lock-faces)
|
yuuji@80
|
1592 (defvar YaTeX-font-lock-math-sup-face 'YaTeX-font-lock-math-sup-face)
|
yuuji@80
|
1593
|
yuuji@72
|
1594 (defface YaTeX-font-lock-crossref-face
|
yuuji@72
|
1595 '((((class color) (background dark)) (:foreground "lightgoldenrod"))
|
yuuji@72
|
1596 (((class color) (background light)) (:foreground "DarkGoldenrod"))
|
yuuji@72
|
1597 (t (:bold t :underline t)))
|
yuuji@80
|
1598 "Font Lock mode face used to highlight cross references."
|
yuuji@72
|
1599 :group 'font-lock-faces)
|
yuuji@72
|
1600 (defvar YaTeX-font-lock-crossref-face 'YaTeX-font-lock-crossref-face)
|
yuuji@72
|
1601
|
yuuji@72
|
1602 (defface YaTeX-font-lock-bold-face
|
yuuji@72
|
1603 '((t (:bold t)))
|
yuuji@72
|
1604 "Font Lock mode face used to express bold itself."
|
yuuji@72
|
1605 :group 'font-lock-faces)
|
yuuji@72
|
1606 (defvar YaTeX-font-lock-bold-face 'YaTeX-font-lock-bold-face)
|
yuuji@72
|
1607
|
yuuji@72
|
1608 (defface YaTeX-font-lock-italic-face
|
yuuji@72
|
1609 '((t (:italic t)))
|
yuuji@72
|
1610 "Font Lock mode face used to express italic itself."
|
yuuji@72
|
1611 :group 'font-lock-faces)
|
yuuji@72
|
1612 (defvar YaTeX-font-lock-italic-face 'YaTeX-font-lock-italic-face)
|
yuuji@72
|
1613
|
yuuji@72
|
1614 ;; Make sure the 'YaTeX-font-lock-{italic,bold}-face is bound with
|
yuuji@72
|
1615 ;; italic/bold fontsets
|
yuuji@72
|
1616 (if (and (fboundp 'fontset-list) YaTeX-use-italic-bold)
|
yuuji@73
|
1617 (let ((flist (fontset-list)) fnt italic bold
|
yuuji@73
|
1618 (df (or (and (fboundp 'face-font-name) (face-font-name 'default))
|
yuuji@73
|
1619 (face-font 'default)
|
yuuji@73
|
1620 (face-font 'italic)
|
yuuji@73
|
1621 (face-font 'bold)
|
yuuji@73
|
1622 "giveup!"))
|
yuuji@73
|
1623 sz medium-i bold-r)
|
yuuji@310
|
1624 (if (string-match
|
yuuji@310
|
1625 "^-[^-]*-[^-]*-[^-]*-[^-]*-[^-]*-[^-]*-\\(\\([0-9]+\\)\\)" df)
|
yuuji@310
|
1626 (setq sz (or (match-string 1 df) "16"))
|
yuuji@310
|
1627 (setq sz "16"))
|
yuuji@73
|
1628 (setq medium-i (format "-medium-i-[^-]+--%s" sz)
|
yuuji@73
|
1629 bold-r (format "-bold-r-[^-]+--%s" sz))
|
yuuji@72
|
1630 (while flist
|
yuuji@72
|
1631 (setq fnt (car flist))
|
yuuji@72
|
1632 (condition-case err
|
yuuji@72
|
1633 (cond
|
yuuji@73
|
1634 ((and (string-match medium-i fnt)
|
yuuji@73
|
1635 (null italic))
|
yuuji@72
|
1636 (set-face-font 'YaTeX-font-lock-italic-face (setq italic fnt)))
|
yuuji@73
|
1637 ((and (string-match bold-r fnt) (null bold))
|
yuuji@72
|
1638 (set-face-font 'YaTeX-font-lock-bold-face (setq bold fnt))))
|
yuuji@72
|
1639 (error nil))
|
yuuji@72
|
1640 (setq flist (cdr flist)))))
|
yuuji@72
|
1641
|
yuuji@72
|
1642 ;;Borrowed from XEmacs's font-lock.el
|
yuuji@72
|
1643 (defsubst YaTeX-font-lock-fillin (start end setprop markprop value &optional object)
|
yuuji@72
|
1644 "Fill in one property of the text from START to END.
|
yuuji@72
|
1645 Arguments PROP and VALUE specify the property and value to put where none are
|
yuuji@72
|
1646 already in place. Therefore existing property values are not overwritten.
|
yuuji@72
|
1647 Optional argument OBJECT is the string or buffer containing the text."
|
yuuji@72
|
1648 (let ((start (text-property-any start end markprop nil object)) next
|
yuuji@72
|
1649 (putfunc (if (fboundp 'put-nonduplicable-text-property)
|
yuuji@72
|
1650 'put-nonduplicable-text-property
|
yuuji@72
|
1651 'put-text-property)))
|
yuuji@72
|
1652 (if (eq putfunc 'put-text-property)
|
yuuji@72
|
1653 (setq markprop setprop))
|
yuuji@72
|
1654 (while start
|
yuuji@72
|
1655 (setq next (next-single-property-change start markprop object end))
|
yuuji@72
|
1656 (funcall putfunc start next setprop value object)
|
yuuji@72
|
1657 (funcall putfunc start next markprop value object)
|
yuuji@72
|
1658 (setq start (text-property-any next end markprop nil object)))))
|
yuuji@72
|
1659
|
yuuji@72
|
1660 (defun YaTeX-warning-font-lock (mode)
|
yuuji@72
|
1661 (let ((sw (selected-window)))
|
yuuji@72
|
1662 ;;(pop-to-buffer (format " *%s warning*" mode))
|
yuuji@72
|
1663 ;;(erase-buffer)
|
yuuji@72
|
1664 (momentary-string-display
|
yuuji@72
|
1665 (cond
|
yuuji@72
|
1666 (YaTeX-japan
|
yuuji@72
|
1667 (concat mode " は、既に font-lock に対応しました。\n"
|
yuuji@72
|
1668 "~/.emacs などにある\n"
|
yuuji@72
|
1669 "\t(put 'yatex-mode 'font-lock-keywords 'tex-mode)\n"
|
yuuji@72
|
1670 "\t(put 'yahtml-mode 'font-lock-keywords 'html-mode)\n"
|
yuuji@72
|
1671 "などの間に合わせの記述はもはや不要です。"))
|
yuuji@72
|
1672 (t
|
yuuji@72
|
1673 (concat mode " now supports the font-lock by itself.\n"
|
yuuji@72
|
1674 "So you can remove the descriptions such as\n"
|
yuuji@72
|
1675 "\t(put 'yatex-mode 'font-lock-keywords 'tex-mode)\n"
|
yuuji@72
|
1676 "\t(put 'yahtml-mode 'font-lock-keywords 'html-mode)\n"
|
yuuji@72
|
1677 "in your ~/.emacs file. Thank you."))) (point))
|
yuuji@72
|
1678 (select-window sw)))
|
yuuji@72
|
1679 ))
|
yuuji@72
|
1680
|
yuuji@80
|
1681 (defun YaTeX-assoc-regexp (elt alist)
|
yuuji@80
|
1682 "Like assoc, return a list of whose car match with ELT. Search from ALIST.
|
yuuji@80
|
1683 Note that each car of cons-cell is regexp. ELT is a plain text to be
|
yuuji@80
|
1684 compared by regexp."
|
yuuji@80
|
1685 (let (x)
|
yuuji@80
|
1686 (catch 'found
|
yuuji@80
|
1687 (while alist
|
yuuji@80
|
1688 (setq x (car (car alist)))
|
yuuji@80
|
1689 (if (string-match x elt)
|
yuuji@80
|
1690 (throw 'found (car alist)))
|
yuuji@80
|
1691 (setq alist (cdr alist))))))
|
yuuji@64
|
1692
|
yuuji@247
|
1693 (defun YaTeX-push-to-kill-ring (string)
|
yuuji@247
|
1694 "Push STRING to kill-ring, then show guidance message."
|
yuuji@247
|
1695 (and (stringp string) (string< "" string)
|
yuuji@247
|
1696 (let ((key (key-description (where-is-internal 'yank nil t)))
|
yuuji@247
|
1697 (msg
|
yuuji@247
|
1698 (if YaTeX-japan
|
yuuji@247
|
1699 " をkill-ringに入れました。次のyank(%s)で貼付できます"
|
yuuji@247
|
1700 " is stored into kill-ring. Paste it by yank(%s).")))
|
yuuji@247
|
1701 (kill-new string)
|
yuuji@247
|
1702 (message (concat "`%s'" msg) string key))))
|
yuuji@247
|
1703
|
yuuji@262
|
1704 (defun YaTeX-elapsed-time (before after)
|
yuuji@262
|
1705 "Get elapsed time from BEFORE and AFTER, which are given from currente-time."
|
yuuji@262
|
1706 (if (fboundp 'float) ;Then, current-time function should be.
|
yuuji@262
|
1707 (let ((mil (float 1000000))) ;To protect parse error before 19
|
yuuji@262
|
1708 (+ (* (- (nth 0 after) (nth 0 before)) 65536)
|
yuuji@262
|
1709 (- (nth 1 after) (nth 1 before))
|
yuuji@262
|
1710 (- (/ (nth 2 after) mil)
|
yuuji@262
|
1711 (/ (nth 2 before) mil))))))
|
yuuji@262
|
1712
|
yuuji@68
|
1713 ;;;
|
yuuji@482
|
1714 ;; Moved from comment.el
|
yuuji@482
|
1715 ;;;
|
yuuji@482
|
1716 (defun YaTeX-comment-region-sub (string &optional beg end once)
|
yuuji@483
|
1717 "Insert STRING at the beginning of every line between BEG and END."
|
yuuji@482
|
1718 (if (not (stringp string)) (setq string YaTeX-comment-prefix))
|
yuuji@482
|
1719 (let ((b (or beg (region-beginning))) (e (or end (region-end))))
|
yuuji@482
|
1720 (save-excursion
|
yuuji@482
|
1721 (goto-char (max b e))
|
yuuji@482
|
1722 (if (bolp)
|
yuuji@482
|
1723 (forward-line -1))
|
yuuji@482
|
1724 (save-restriction
|
yuuji@482
|
1725 (narrow-to-region (min b e) (point))
|
yuuji@482
|
1726 (goto-char (point-min))
|
yuuji@482
|
1727 (message "%s" string)
|
yuuji@482
|
1728 (while (re-search-forward "^" nil t)
|
yuuji@482
|
1729 (insert string))))))
|
yuuji@482
|
1730
|
yuuji@482
|
1731 (defun YaTeX-uncomment-region-sub (string &optional beg end once)
|
yuuji@483
|
1732 "Delete STRING from the beginning of every line between BEG and END.
|
yuuji@483
|
1733 BEG and END are optional. If omitted, active region used.
|
yuuji@483
|
1734 Non-nil for optional 4th argument ONCE withholds from removing
|
yuuji@483
|
1735 successive comment chars at the beggining of lines."
|
yuuji@482
|
1736 (save-excursion
|
yuuji@482
|
1737 (save-restriction
|
yuuji@482
|
1738 (narrow-to-region (or beg (region-beginning)) (or end (region-end)))
|
yuuji@482
|
1739 (goto-char (point-min))
|
yuuji@482
|
1740 (while (re-search-forward (concat "^" string) nil t)
|
yuuji@482
|
1741 (replace-match "")
|
yuuji@482
|
1742 (if once (end-of-line))))))
|
yuuji@482
|
1743
|
yuuji@482
|
1744 ;;;
|
yuuji@68
|
1745 ;; Functions for the Installation time
|
yuuji@68
|
1746 ;;;
|
yuuji@64
|
1747
|
yuuji@58
|
1748 (defun bcf-and-exit ()
|
yuuji@58
|
1749 "Byte compile rest of argument and kill-emacs."
|
yuuji@58
|
1750 (if command-line-args-left
|
yuuji@68
|
1751 (let ((load-path (cons "." load-path)))
|
yuuji@68
|
1752 (and (fboundp 'set-language-environment)
|
yuuji@68
|
1753 (featurep 'mule)
|
yuuji@68
|
1754 (set-language-environment "Japanese"))
|
yuuji@58
|
1755 (mapcar 'byte-compile-file command-line-args-left)
|
yuuji@58
|
1756 (kill-emacs))))
|
yuuji@64
|
1757
|
yuuji@80
|
1758 (defun tfb-and-exit ()
|
yuuji@80
|
1759 "Texinfo-format-buffer and kill-emacs."
|
yuuji@80
|
1760 (if command-line-args-left
|
yuuji@80
|
1761 (let ((load-path (cons ".." load-path)))
|
yuuji@80
|
1762 (and (fboundp 'set-language-environment)
|
yuuji@80
|
1763 (featurep 'mule)
|
yuuji@80
|
1764 (set-language-environment "Japanese"))
|
yuuji@80
|
1765 (mapcar (function
|
yuuji@80
|
1766 (lambda (arg)
|
yuuji@80
|
1767 (find-file arg)
|
yuuji@80
|
1768 (texinfo-format-buffer)
|
yuuji@266
|
1769 (cond
|
yuuji@266
|
1770 ((fboundp 'set-buffer-file-coding-system)
|
yuuji@266
|
1771 (set-buffer-file-coding-system 'sjis-dos))
|
yuuji@266
|
1772 ((fboundp 'set-file-coding-system)
|
yuuji@266
|
1773 (set-file-coding-system '*sjis*dos))
|
yuuji@266
|
1774 ((boundp 'NEMACS)
|
yuuji@266
|
1775 (set (make-local-variable 'kanji-fileio-code) 1)))
|
yuuji@266
|
1776 (let ((coding-system-for-write buffer-file-coding-system))
|
yuuji@266
|
1777 (basic-save-buffer))))
|
yuuji@80
|
1778 command-line-args-left)
|
yuuji@80
|
1779 (kill-emacs))))
|
yuuji@80
|
1780
|
yuuji@23
|
1781 (provide 'yatexlib)
|