yatex
annotate yatexadd.el @ 11:390df0e505da
Label completion works.
author | yuuji |
---|---|
date | Mon, 20 Sep 1993 08:56:09 +0000 |
parents | c746646cecf5 |
children | a7f397790cdc |
rev | line source |
---|---|
yuuji@6 | 1 ;;; -*- Emacs-Lisp -*- |
yuuji@8 | 2 ;;; YaTeX add-in functions. |
yuuji@11 | 3 ;;; yatexadd.el rev.5 |
yuuji@6 | 4 ;;; (c)1991-1993 by HIROSE Yuuji.[yuuji@ae.keio.ac.jp] |
yuuji@11 | 5 ;;; Last modified Sat Sep 18 04:13:41 1993 on 98fa |
yuuji@8 | 6 ;;; $Id$ |
yuuji@6 | 7 |
yuuji@6 | 8 (provide 'yatexadd) |
yuuji@6 | 9 |
yuuji@6 | 10 ;;; |
yuuji@6 | 11 ;;Sample functions for LaTeX environment. |
yuuji@6 | 12 ;;; |
yuuji@6 | 13 (defvar YaTeX:tabular-default-rule |
yuuji@6 | 14 "@{\\vrule width 1pt\\ }c|c|c@{\\ \\vrule width 1pt}" |
yuuji@6 | 15 "*Your favorite default rule format." |
yuuji@6 | 16 ) |
yuuji@6 | 17 (defun YaTeX:tabular () |
yuuji@8 | 18 "YaTeX add-in function for tabular environment." |
yuuji@8 | 19 (let (bars (rule "") (j 0) (loc (YaTeX:read-position "tb"))) |
yuuji@6 | 20 (setq bars (string-to-int (read-string "Number of `|': "))) |
yuuji@6 | 21 (if (> bars 0) |
yuuji@6 | 22 (while (< j bars) (setq rule (concat rule "|")) (setq j (1+ j))) |
yuuji@6 | 23 (setq rule YaTeX:tabular-default-rule)) |
yuuji@6 | 24 (setq rule (read-string "rule format: " rule)) |
yuuji@6 | 25 |
yuuji@8 | 26 (message "") |
yuuji@8 | 27 (format "%s{%s}" loc rule)) |
yuuji@6 | 28 ) |
yuuji@6 | 29 |
yuuji@8 | 30 (defun YaTeX:read-position (oneof) |
yuuji@8 | 31 (let ((pos "") loc) |
yuuji@6 | 32 (while (not (string-match |
yuuji@8 | 33 (setq loc (read-key-sequence |
yuuji@8 | 34 (format "Position (`%s') [%s]: " oneof pos))) |
yuuji@6 | 35 "\r\^g\n")) |
yuuji@6 | 36 (cond |
yuuji@8 | 37 ((string-match loc oneof) |
yuuji@6 | 38 (if (not (string-match loc pos)) |
yuuji@6 | 39 (setq pos (concat pos loc)))) |
yuuji@6 | 40 ((and (string-match loc "\C-h\C-?") (> (length pos) 0)) |
yuuji@6 | 41 (setq pos (substring pos 0 (1- (length pos))))) |
yuuji@6 | 42 (t |
yuuji@6 | 43 (ding) |
yuuji@8 | 44 (message "Please input one of `%s'." oneof) |
yuuji@6 | 45 (sit-for 3)))) |
yuuji@8 | 46 (message "") |
yuuji@8 | 47 (if (string= pos "") "" |
yuuji@8 | 48 (concat "[" pos "]"))) |
yuuji@8 | 49 ) |
yuuji@8 | 50 |
yuuji@8 | 51 (defun YaTeX:table () |
yuuji@8 | 52 "YaTeX add-in function for table environment." |
yuuji@8 | 53 (YaTeX:read-position "htbp") |
yuuji@6 | 54 ) |
yuuji@6 | 55 |
yuuji@6 | 56 (defun YaTeX:description () |
yuuji@6 | 57 "Truly poor service:-)" |
yuuji@6 | 58 (setq single-command "item[]") |
yuuji@8 | 59 "" |
yuuji@6 | 60 ) |
yuuji@6 | 61 |
yuuji@6 | 62 (defun YaTeX:itemize () |
yuuji@6 | 63 "It's also poor service." |
yuuji@6 | 64 (setq single-command "item") |
yuuji@8 | 65 "" |
yuuji@6 | 66 ) |
yuuji@6 | 67 |
yuuji@6 | 68 (fset 'YaTeX:enumerate 'YaTeX:itemize) |
yuuji@8 | 69 |
yuuji@11 | 70 (defun YaTeX:picture () |
yuuji@11 | 71 "Ask the size of coordinates of picture environment." |
yuuji@11 | 72 (concat (YaTeX:read-coordinates "Picture size") |
yuuji@11 | 73 (YaTeX:read-coordinates "Initial position")) |
yuuji@11 | 74 ) |
yuuji@11 | 75 |
yuuji@8 | 76 ;;; |
yuuji@8 | 77 ;;Sample functions for section-type command. |
yuuji@8 | 78 ;;; |
yuuji@8 | 79 (defun YaTeX:multiput () |
yuuji@8 | 80 (concat (YaTeX:read-coordinates "Pos") |
yuuji@8 | 81 (YaTeX:read-coordinates "Step") |
yuuji@8 | 82 "{" (read-string "How many times: ") "}") |
yuuji@8 | 83 ) |
yuuji@8 | 84 |
yuuji@8 | 85 (defun YaTeX:put () |
yuuji@8 | 86 (YaTeX:read-coordinates "Pos") |
yuuji@8 | 87 ) |
yuuji@8 | 88 |
yuuji@8 | 89 (defun YaTeX:makebox () |
yuuji@8 | 90 (concat (YaTeX:read-coordinates "Dimension") |
yuuji@8 | 91 (YaTeX:read-position "lrtb")) |
yuuji@8 | 92 ) |
yuuji@8 | 93 |
yuuji@8 | 94 (defun YaTeX:framebox () |
yuuji@8 | 95 (if (YaTeX-quick-in-environment-p "picture") |
yuuji@8 | 96 (YaTeX:makebox)) |
yuuji@8 | 97 ) |
yuuji@8 | 98 |
yuuji@8 | 99 (defun YaTeX:dashbox () |
yuuji@8 | 100 (concat "{" (read-string "Dash dimension: ") "}" |
yuuji@8 | 101 (YaTeX:read-coordinates "Dimension")) |
yuuji@8 | 102 ) |
yuuji@8 | 103 |
yuuji@8 | 104 (defun YaTeX:read-coordinates (&optional mes varX varY) |
yuuji@8 | 105 (concat |
yuuji@8 | 106 "(" |
yuuji@8 | 107 (read-string (format "%s %s: " (or mes "Dimension") (or varX "X"))) |
yuuji@8 | 108 "," |
yuuji@8 | 109 (read-string (format "%s %s: " (or mes "Dimension") (or varY "Y"))) |
yuuji@8 | 110 ")") |
yuuji@8 | 111 ) |
yuuji@8 | 112 |
yuuji@8 | 113 ;;; |
yuuji@8 | 114 ;;Sample functions for maketitle-type command. |
yuuji@8 | 115 ;;; |
yuuji@8 | 116 (defun YaTeX:sum () |
yuuji@8 | 117 "Read range of summation." |
yuuji@8 | 118 (YaTeX:check-completion-type 'maketitle) |
yuuji@8 | 119 (concat (YaTeX:read-boundary "_") (YaTeX:read-boundary "^")) |
yuuji@8 | 120 ) |
yuuji@8 | 121 |
yuuji@8 | 122 (fset 'YaTeX:int 'YaTeX:sum) |
yuuji@8 | 123 |
yuuji@8 | 124 (defun YaTeX:lim () |
yuuji@8 | 125 "Insert limit notation of \\lim." |
yuuji@8 | 126 (YaTeX:check-completion-type 'maketitle) |
yuuji@8 | 127 (let ((var (read-string "Variable: ")) limit) |
yuuji@8 | 128 (if (string= "" var) "" |
yuuji@8 | 129 (setq limit (read-string "Limit ($ means infinity): ")) |
yuuji@8 | 130 (if (string= "$" limit) (setq limit "\\infty")) |
yuuji@8 | 131 (concat "_{" var " \\rightarrow " limit "}"))) |
yuuji@8 | 132 ) |
yuuji@8 | 133 |
yuuji@8 | 134 (defun YaTeX:gcd () |
yuuji@8 | 135 "Add-in function for \\gcd(m,n)." |
yuuji@8 | 136 (YaTeX:check-completion-type 'maketitle) |
yuuji@8 | 137 (YaTeX:read-coordinates "\\gcd" "(?,)" "(,?)") |
yuuji@8 | 138 ) |
yuuji@8 | 139 |
yuuji@8 | 140 (defun YaTeX:read-boundary (ULchar) |
yuuji@8 | 141 "Read boundary usage by _ or ^. _ or ^ is indicated by argument ULchar." |
yuuji@11 | 142 (let ((bndry (read-string (concat ULchar "{???} ($ for infinity): ")))) |
yuuji@8 | 143 (if (string= bndry "") "" |
yuuji@11 | 144 (if (string= bndry "$") (setq bndry "\\infty")) |
yuuji@8 | 145 (concat ULchar "{" bndry "}"))) |
yuuji@8 | 146 ) |
yuuji@8 | 147 |
yuuji@8 | 148 (defun YaTeX:check-completion-type (type) |
yuuji@8 | 149 "Check valid completion type." |
yuuji@8 | 150 (if (not (eq type YaTeX-current-completion-type)) |
yuuji@8 | 151 (error "This should be completed with %s-type completion." type)) |
yuuji@8 | 152 ) |
yuuji@11 | 153 |
yuuji@11 | 154 |
yuuji@11 | 155 ;;; |
yuuji@11 | 156 ;;; [[Add-in functions for reading section arguments]] |
yuuji@11 | 157 ;;; |
yuuji@11 | 158 ;; All of add-in functions for reading sections arguments should |
yuuji@11 | 159 ;; take an argument ARGP that specify the argument position. |
yuuji@11 | 160 ;; If argument position is out of range, nil should be returned, |
yuuji@11 | 161 ;; else nil should NOT be returned. |
yuuji@11 | 162 (defvar YaTeX-label-menu-other |
yuuji@11 | 163 (if YaTeX-japan "':他のバッファのラベル\n" "':LABEL IN OTHER BUFFER.\n")) |
yuuji@11 | 164 (defvar YaTeX-label-menu-any |
yuuji@11 | 165 (if YaTeX-japan "*:任意の文字列\n" "*:ANY STRING.\n")) |
yuuji@11 | 166 (defvar YaTeX-label-buffer "*Label completions*") |
yuuji@11 | 167 (defvar YaTeX-label-guide-msg "Select label and hit RETURN.") |
yuuji@11 | 168 (defvar YaTeX-label-select-map nil |
yuuji@11 | 169 "Key map used in label selection buffer.") |
yuuji@11 | 170 (defun YaTeX::label-setup-key-map () |
yuuji@11 | 171 (if YaTeX-label-select-map nil |
yuuji@11 | 172 (message "Setting up label selection mode map...") |
yuuji@11 | 173 (setq YaTeX-label-select-map (copy-keymap global-map)) |
yuuji@11 | 174 (suppress-keymap YaTeX-label-select-map) |
yuuji@11 | 175 (substitute-all-key-definition |
yuuji@11 | 176 'previous-line 'YaTeX::label-previous YaTeX-label-select-map) |
yuuji@11 | 177 (substitute-all-key-definition |
yuuji@11 | 178 'next-line 'YaTeX::label-next YaTeX-label-select-map) |
yuuji@11 | 179 (define-key YaTeX-label-select-map "\C-n" 'YaTeX::label-next) |
yuuji@11 | 180 (define-key YaTeX-label-select-map "\C-p" 'YaTeX::label-previous) |
yuuji@11 | 181 (define-key YaTeX-label-select-map "<" 'beginning-of-buffer) |
yuuji@11 | 182 (define-key YaTeX-label-select-map ">" 'end-of-buffer) |
yuuji@11 | 183 (define-key YaTeX-label-select-map "\C-m" 'exit-recursive-edit) |
yuuji@11 | 184 (define-key YaTeX-label-select-map "\C-j" 'exit-recursive-edit) |
yuuji@11 | 185 (define-key YaTeX-label-select-map " " 'exit-recursive-edit) |
yuuji@11 | 186 (define-key YaTeX-label-select-map "\C-g" 'abort-recursive-edit) |
yuuji@11 | 187 (define-key YaTeX-label-select-map "/" 'isearch-forward) |
yuuji@11 | 188 (define-key YaTeX-label-select-map "?" 'isearch-backward) |
yuuji@11 | 189 (define-key YaTeX-label-select-map "'" 'YaTeX::label-search-tag) |
yuuji@11 | 190 (define-key YaTeX-label-select-map "*" 'YaTeX::label-search-tag) |
yuuji@11 | 191 (message "Setting up label selection mode map...Done") |
yuuji@11 | 192 (let ((key ?A)) |
yuuji@11 | 193 (while (<= key ?Z) |
yuuji@11 | 194 (define-key YaTeX-label-select-map (char-to-string key) |
yuuji@11 | 195 'YaTeX::label-search-tag) |
yuuji@11 | 196 (define-key YaTeX-label-select-map (char-to-string (+ key (- ?a ?A))) |
yuuji@11 | 197 'YaTeX::label-search-tag) |
yuuji@11 | 198 (setq key (1+ key))))) |
yuuji@11 | 199 ) |
yuuji@11 | 200 (defun YaTeX::label-next () |
yuuji@11 | 201 (interactive) (forward-line 1) (message YaTeX-label-guide-msg)) |
yuuji@11 | 202 (defun YaTeX::label-previous () |
yuuji@11 | 203 (interactive) (forward-line -1) (message YaTeX-label-guide-msg)) |
yuuji@11 | 204 (defun YaTeX::label-search-tag () |
yuuji@11 | 205 (interactive) |
yuuji@11 | 206 (let ((case-fold-search t)) |
yuuji@11 | 207 (cond |
yuuji@11 | 208 ((save-excursion |
yuuji@11 | 209 (forward-char 1) |
yuuji@11 | 210 (re-search-forward (concat "^" (this-command-keys)) nil t)) |
yuuji@11 | 211 (goto-char (match-beginning 0))) |
yuuji@11 | 212 ((save-excursion |
yuuji@11 | 213 (goto-char (point-min)) |
yuuji@11 | 214 (re-search-forward (concat "^" (this-command-keys)) nil t)) |
yuuji@11 | 215 (goto-char (match-beginning 0)))) |
yuuji@11 | 216 (message YaTeX-label-guide-msg)) |
yuuji@11 | 217 ) |
yuuji@11 | 218 (defun YaTeX::ref (argp) |
yuuji@11 | 219 (cond |
yuuji@11 | 220 ((= argp 1) |
yuuji@11 | 221 (save-excursion |
yuuji@11 | 222 (let ((lnum 0) e0 m1 e1 label label-list (buf (current-buffer)) |
yuuji@11 | 223 (p (point)) initl line) |
yuuji@11 | 224 (goto-char (point-min)) |
yuuji@11 | 225 (message "Collecting labels...") |
yuuji@11 | 226 (save-window-excursion |
yuuji@11 | 227 (with-output-to-temp-buffer YaTeX-label-buffer |
yuuji@11 | 228 (while (re-search-forward "\\label{\\([^}]+\\)}" nil t) |
yuuji@11 | 229 (setq e0 (match-end 0) m1 (match-beginning 1) e1 (match-end 1)) |
yuuji@11 | 230 (if (search-backward |
yuuji@11 | 231 YaTeX-comment-prefix (point-beginning-of-line) t) nil |
yuuji@11 | 232 (setq label (buffer-substring m1 e1) |
yuuji@11 | 233 label-list (cons label label-list)) |
yuuji@11 | 234 (or initl |
yuuji@11 | 235 (if (< p (point)) (setq initl lnum))) |
yuuji@11 | 236 (beginning-of-line) |
yuuji@11 | 237 (skip-chars-forward " \t\n" nil) |
yuuji@11 | 238 (princ (format "%c:{%s}\t<<%s>>\n" (+ (% lnum 26) ?A) label |
yuuji@11 | 239 (buffer-substring (point) (point-end-of-line)))) |
yuuji@11 | 240 (setq lnum (1+ lnum)) |
yuuji@11 | 241 (message "Collecting \\label{}... %d" lnum)) |
yuuji@11 | 242 (goto-char e0)) |
yuuji@11 | 243 (princ YaTeX-label-menu-other) |
yuuji@11 | 244 (princ YaTeX-label-menu-any) |
yuuji@11 | 245 );with |
yuuji@11 | 246 (goto-char p) |
yuuji@11 | 247 (message "Collecting labels...Done") |
yuuji@11 | 248 (pop-to-buffer YaTeX-label-buffer) |
yuuji@11 | 249 (YaTeX::label-setup-key-map) |
yuuji@11 | 250 (setq truncate-lines t) |
yuuji@11 | 251 (setq buffer-read-only t) |
yuuji@11 | 252 (use-local-map YaTeX-label-select-map) |
yuuji@11 | 253 (message YaTeX-label-guide-msg) |
yuuji@11 | 254 (goto-line (or initl lnum)) ;goto recently defined label line |
yuuji@11 | 255 (unwind-protect |
yuuji@11 | 256 (progn |
yuuji@11 | 257 (recursive-edit) |
yuuji@11 | 258 (set-buffer (get-buffer YaTeX-label-buffer)) ;assertion |
yuuji@11 | 259 (beginning-of-line) |
yuuji@11 | 260 (setq line (count-lines (point-min)(point))) |
yuuji@11 | 261 (cond |
yuuji@11 | 262 ((= line lnum) (setq label (YaTeX-label-other))) |
yuuji@11 | 263 ((>= line (1+ lnum )) |
yuuji@11 | 264 (setq label (read-string "\\ref{???}: "))) |
yuuji@11 | 265 (t (setq label (nth (- lnum line 1) label-list))))) |
yuuji@11 | 266 (bury-buffer YaTeX-label-buffer))) |
yuuji@11 | 267 label |
yuuji@11 | 268 )) |
yuuji@11 | 269 )) |
yuuji@11 | 270 ) |
yuuji@11 | 271 |
yuuji@11 | 272 (defun YaTeX-label-other () |
yuuji@11 | 273 (let ((lbuf "*YaTeX mode buffers*") (blist (buffer-list)) (lnum -1) buf rv |
yuuji@11 | 274 (ff "**find-file**")) |
yuuji@11 | 275 (with-output-to-temp-buffer lbuf |
yuuji@11 | 276 (while blist |
yuuji@11 | 277 (if (and (buffer-file-name (setq buf (car blist))) |
yuuji@11 | 278 (progn (set-buffer buf) (eq major-mode 'yatex-mode))) |
yuuji@11 | 279 (princ |
yuuji@11 | 280 (format "%c:{%s}\n" (+ (% (setq lnum (1+ lnum)) 26) ?A) |
yuuji@11 | 281 (buffer-name buf)))) |
yuuji@11 | 282 (setq blist (cdr blist))) |
yuuji@11 | 283 (princ (format "':{%s}" ff))) |
yuuji@11 | 284 (pop-to-buffer lbuf) |
yuuji@11 | 285 (YaTeX::label-setup-key-map) |
yuuji@11 | 286 (setq buffer-read-only t) |
yuuji@11 | 287 (use-local-map YaTeX-label-select-map) |
yuuji@11 | 288 (message YaTeX-label-guide-msg) |
yuuji@11 | 289 (unwind-protect |
yuuji@11 | 290 (progn |
yuuji@11 | 291 (recursive-edit) |
yuuji@11 | 292 (set-buffer lbuf) |
yuuji@11 | 293 (beginning-of-line) |
yuuji@11 | 294 (setq rv |
yuuji@11 | 295 (if (re-search-forward "{\\([^\\}]+\\)}" (point-end-of-line) t) |
yuuji@11 | 296 (buffer-substring (match-beginning 1) (match-end 1)) nil))) |
yuuji@11 | 297 (kill-buffer lbuf)) |
yuuji@11 | 298 (cond |
yuuji@11 | 299 ((null rv) "") |
yuuji@11 | 300 ((string= rv ff) |
yuuji@11 | 301 (call-interactively 'find-file) |
yuuji@11 | 302 (YaTeX::ref argp)) |
yuuji@11 | 303 (t |
yuuji@11 | 304 (set-buffer rv) |
yuuji@11 | 305 (YaTeX::ref argp))) |
yuuji@11 | 306 ) |
yuuji@11 | 307 ) |
yuuji@11 | 308 |
yuuji@11 | 309 ;;; |
yuuji@11 | 310 ;; global subroutines |
yuuji@11 | 311 ;;; |
yuuji@11 | 312 (defun substitute-all-key-definition (olddef newdef keymap) |
yuuji@11 | 313 "Replace recursively OLDDEF with NEWDEF for any keys in KEYMAP now |
yuuji@11 | 314 defined as OLDDEF. In other words, OLDDEF is replaced with NEWDEF |
yuuji@11 | 315 where ever it appears." |
yuuji@11 | 316 (if (arrayp keymap) |
yuuji@11 | 317 (let ((len (length keymap)) |
yuuji@11 | 318 (i 0)) |
yuuji@11 | 319 (while (< i len) |
yuuji@11 | 320 (let ((map (aref keymap i))) |
yuuji@11 | 321 (cond |
yuuji@11 | 322 ((arrayp map) (substitute-key-definition olddef newdef map)) |
yuuji@11 | 323 ((equal map olddef) |
yuuji@11 | 324 (aset keymap i newdef))) |
yuuji@11 | 325 (setq i (1+ i))))) |
yuuji@11 | 326 (while keymap |
yuuji@11 | 327 (if (equal (cdr-safe (car-safe keymap)) olddef) |
yuuji@11 | 328 (setcdr (car keymap) newdef)) |
yuuji@11 | 329 (setq keymap (cdr keymap))))) |