yatex
annotate yatexlib.el @ 47:d7e7b4654058
Support special popup frame.
Refine highlightening method.
On Emacs-19, couldn't save user completion table correctly, fixed.
author | yuuji |
---|---|
date | Mon, 24 Oct 1994 17:26:47 +0000 |
parents | cd1b63102eed |
children | eb0512bfcb7f |
rev | line source |
---|---|
yuuji@23 | 1 ;;; -*- Emacs-Lisp -*- |
yuuji@23 | 2 ;;; YaTeX library of general functions. |
yuuji@23 | 3 ;;; yatexlib.el |
yuuji@23 | 4 ;;; (c )1994 by HIROSE Yuuji.[yuuji@ae.keio.ac.jp] |
yuuji@47 | 5 ;;; Last modified Mon Oct 10 22:14:14 1994 on VFR |
yuuji@23 | 6 ;;; $Id$ |
yuuji@23 | 7 |
yuuji@23 | 8 ;;;###autoload |
yuuji@23 | 9 (defun YaTeX-search-active-forward (string cmntrx &optional bound err cnt func) |
yuuji@23 | 10 "Search STRING which is not commented out by CMNTRX. |
yuuji@23 | 11 Optional arguments after BOUND, ERR, CNT are passed literally to search-forward |
yuuji@23 | 12 or search-backward. |
yuuji@23 | 13 Optional sixth argument FUNC changes search-function." |
yuuji@23 | 14 (let ((sfunc (if func func 'search-forward)) found md) |
yuuji@23 | 15 (while (and (prog1 |
yuuji@23 | 16 (setq found (funcall sfunc string bound err cnt)) |
yuuji@23 | 17 (setq md (match-data))) |
yuuji@23 | 18 (or |
yuuji@23 | 19 (YaTeX-in-verb-p (match-beginning 0)) |
yuuji@23 | 20 (save-excursion |
yuuji@23 | 21 (beginning-of-line) |
yuuji@23 | 22 (re-search-forward cmntrx (match-beginning 0) t))))) |
yuuji@23 | 23 (store-match-data md) |
yuuji@23 | 24 found) |
yuuji@23 | 25 ) |
yuuji@23 | 26 |
yuuji@23 | 27 (defun YaTeX-re-search-active-forward (regexp cmntrx &optional bound err cnt) |
yuuji@23 | 28 "Search REGEXP backward which is not commented out by regexp CMNTRX. |
yuuji@23 | 29 See also YaTeX-search-active-forward." |
yuuji@23 | 30 (YaTeX-search-active-forward regexp cmntrx bound err cnt 're-search-forward) |
yuuji@23 | 31 ) |
yuuji@23 | 32 (defun YaTeX-search-active-backward (string cmntrx &optional bound err cnt) |
yuuji@23 | 33 "Search STRING backward which is not commented out by regexp CMNTRX. |
yuuji@23 | 34 See also YaTeX-search-active-forward." |
yuuji@23 | 35 (YaTeX-search-active-forward string cmntrx bound err cnt 'search-backward) |
yuuji@23 | 36 ) |
yuuji@23 | 37 (defun YaTeX-re-search-active-backward (regexp cmntrx &optional bound err cnt) |
yuuji@23 | 38 "Search REGEXP backward which is not commented out by regexp CMNTRX. |
yuuji@23 | 39 See also YaTeX-search-active-forward." |
yuuji@23 | 40 (YaTeX-search-active-forward regexp cmntrx bound err cnt 're-search-backward) |
yuuji@23 | 41 ) |
yuuji@23 | 42 |
yuuji@23 | 43 |
yuuji@23 | 44 ;;;###autoload |
yuuji@23 | 45 (defun YaTeX-switch-to-buffer (file &optional setbuf) |
yuuji@23 | 46 "Switch to buffer if buffer exists, find file if not. |
yuuji@23 | 47 Optional second arg SETBUF t make use set-buffer instead of switch-to-buffer." |
yuuji@23 | 48 (interactive "Fswitch to file: ") |
yuuji@23 | 49 (let (buf) |
yuuji@23 | 50 (if (setq buf (get-buffer (file-name-nondirectory file))) |
yuuji@23 | 51 (progn |
yuuji@23 | 52 (funcall (if setbuf 'set-buffer 'switch-to-buffer) |
yuuji@23 | 53 (file-name-nondirectory file)) |
yuuji@23 | 54 buf) |
yuuji@23 | 55 (if (file-exists-p file) |
yuuji@46 | 56 (funcall |
yuuji@46 | 57 (if setbuf 'find-file-noselect 'find-file) |
yuuji@46 | 58 file) |
yuuji@23 | 59 (message "%s was not found in this directory." file) |
yuuji@23 | 60 nil))) |
yuuji@23 | 61 ) |
yuuji@23 | 62 |
yuuji@23 | 63 ;;;###autoload |
yuuji@23 | 64 (defun YaTeX-switch-to-buffer-other-window (file) |
yuuji@23 | 65 "Switch to buffer if buffer exists, find file if not." |
yuuji@23 | 66 (interactive "Fswitch to file: ") |
yuuji@23 | 67 (if (get-buffer (file-name-nondirectory file)) |
yuuji@23 | 68 (progn (switch-to-buffer-other-window file) t) |
yuuji@23 | 69 (if (file-exists-p file) |
yuuji@23 | 70 (progn (find-file-other-window file) t) |
yuuji@23 | 71 (message "%s was not found in this directory." file) |
yuuji@23 | 72 nil)) |
yuuji@23 | 73 ) |
yuuji@23 | 74 |
yuuji@23 | 75 (defun YaTeX-replace-format-sub (string format repl) |
yuuji@23 | 76 (let ((beg (or (string-match (concat "^\\(%" format "\\)") string) |
yuuji@23 | 77 (string-match (concat "[^%]\\(%" format "\\)") string))) |
yuuji@23 | 78 (len (length format))) |
yuuji@23 | 79 (if (null beg) string ;no conversion |
yuuji@23 | 80 (concat |
yuuji@23 | 81 (substring string 0 (match-beginning 1)) repl |
yuuji@23 | 82 (substring string (match-end 1))))) |
yuuji@23 | 83 ) |
yuuji@23 | 84 |
yuuji@23 | 85 ;;;###autoload |
yuuji@23 | 86 (defun YaTeX-replace-format (string format repl) |
yuuji@23 | 87 "In STRING, replace first appearance of FORMAT to REPL as if |
yuuji@23 | 88 function `format' does. FORMAT does not contain `%'" |
yuuji@23 | 89 (let ((ans string)) |
yuuji@23 | 90 (while (not (string= |
yuuji@23 | 91 ans (setq string (YaTeX-replace-format-sub ans format repl)))) |
yuuji@23 | 92 (setq ans string)) |
yuuji@23 | 93 string) |
yuuji@23 | 94 ) |
yuuji@23 | 95 |
yuuji@23 | 96 ;;;###autoload |
yuuji@23 | 97 (defun YaTeX-replace-format-args (string &rest args) |
yuuji@23 | 98 "Translate the argument mark #1, #2, ... #n in the STRING into the |
yuuji@23 | 99 corresponding real arguments ARGS." |
yuuji@23 | 100 (let ((argp 1)) |
yuuji@23 | 101 (while args |
yuuji@23 | 102 (setq string |
yuuji@23 | 103 (YaTeX-replace-format string (int-to-string argp) (car args))) |
yuuji@23 | 104 (setq args (cdr args) argp (1+ argp)))) |
yuuji@23 | 105 string |
yuuji@23 | 106 ) |
yuuji@23 | 107 |
yuuji@23 | 108 ;;;###autoload |
yuuji@23 | 109 (defun rindex (string char) |
yuuji@23 | 110 (let ((pos (1- (length string)))(index -1)) |
yuuji@23 | 111 (while (>= pos 0) |
yuuji@23 | 112 (cond |
yuuji@23 | 113 ((= (aref string pos) char) |
yuuji@23 | 114 (setq index pos) (setq pos -1)) |
yuuji@23 | 115 (t (setq pos (1- pos)))) |
yuuji@23 | 116 ) |
yuuji@23 | 117 index) |
yuuji@23 | 118 ) |
yuuji@23 | 119 |
yuuji@23 | 120 ;;;###autoload |
yuuji@23 | 121 (defun YaTeX-showup-buffer (buffer &optional func select) |
yuuji@23 | 122 "Make BUFFER show up in certain window (but current window) |
yuuji@23 | 123 that gives the maximum value by the FUNC. FUNC should take an argument |
yuuji@23 | 124 of its window object. Non-nil for optional third argument SELECT selects |
yuuji@23 | 125 that window." |
yuuji@47 | 126 (or (and (if YaTeX-emacs-19 |
yuuji@47 | 127 (get-buffer-window buffer t) |
yuuji@47 | 128 (get-buffer-window buffer)) |
yuuji@47 | 129 (progn |
yuuji@47 | 130 (if select |
yuuji@47 | 131 (cond |
yuuji@47 | 132 (YaTeX-emacs-19 |
yuuji@47 | 133 (let ((frame (window-frame (get-buffer-window buffer t)))) |
yuuji@47 | 134 (select-frame frame) |
yuuji@47 | 135 (focus-frame frame) |
yuuji@47 | 136 (set-mouse-position frame 0 0) |
yuuji@47 | 137 (raise-frame frame) |
yuuji@47 | 138 (select-window (get-buffer-window buffer)) |
yuuji@47 | 139 (if (and (featurep 'windows) |
yuuji@47 | 140 (win:frame-window frame)) |
yuuji@47 | 141 (win:adjust-window)))) |
yuuji@47 | 142 (t |
yuuji@47 | 143 (select-window (get-buffer-window buffer))))) |
yuuji@47 | 144 t)) |
yuuji@23 | 145 (let ((window (selected-window)) |
yuuji@23 | 146 (wlist (YaTeX-window-list)) win w (x 0)) |
yuuji@23 | 147 (cond |
yuuji@23 | 148 ((> (length wlist) 2) |
yuuji@23 | 149 (if func |
yuuji@23 | 150 (while wlist |
yuuji@23 | 151 (setq w (car wlist)) |
yuuji@23 | 152 (if (and (not (eq window w)) |
yuuji@23 | 153 (> (funcall func w) x)) |
yuuji@23 | 154 (setq win w x (funcall func w))) |
yuuji@23 | 155 (setq wlist (cdr wlist))) |
yuuji@23 | 156 (setq win (get-lru-window))) |
yuuji@23 | 157 (select-window win) |
yuuji@23 | 158 (switch-to-buffer buffer) |
yuuji@23 | 159 (or select (select-window window))) |
yuuji@23 | 160 ((= (length wlist) 2) |
yuuji@23 | 161 (other-window 1) |
yuuji@23 | 162 (switch-to-buffer buffer) |
yuuji@23 | 163 (or select (select-window window))) |
yuuji@23 | 164 (t ;if one-window |
yuuji@23 | 165 (cond |
yuuji@47 | 166 ((and YaTeX-emacs-19 (get-buffer-window buffer t)) |
yuuji@47 | 167 nil) ;if found in other frame |
yuuji@23 | 168 (YaTeX-default-pop-window-height |
yuuji@23 | 169 (split-window |
yuuji@23 | 170 (selected-window) |
yuuji@23 | 171 (max |
yuuji@23 | 172 (min |
yuuji@23 | 173 (- (screen-height) |
yuuji@23 | 174 (if (numberp YaTeX-default-pop-window-height) |
yuuji@23 | 175 (+ YaTeX-default-pop-window-height 2) |
yuuji@23 | 176 (/ (* (screen-height) |
yuuji@23 | 177 (string-to-int YaTeX-default-pop-window-height)) |
yuuji@23 | 178 100))) |
yuuji@23 | 179 (- (screen-height) window-min-height 1)) |
yuuji@23 | 180 window-min-height)) |
yuuji@23 | 181 (pop-to-buffer buffer) |
yuuji@23 | 182 (or select (select-window window))) |
yuuji@23 | 183 (t nil))) |
yuuji@23 | 184 ))) |
yuuji@23 | 185 ) |
yuuji@23 | 186 |
yuuji@23 | 187 ;;;###autoload |
yuuji@23 | 188 (defun YaTeX-window-list () |
yuuji@23 | 189 (let*((curw (selected-window)) (win curw) (wlist (list curw))) |
yuuji@23 | 190 (while (not (eq curw (setq win (next-window win)))) |
yuuji@23 | 191 (or (eq win (minibuffer-window)) |
yuuji@23 | 192 (setq wlist (cons win wlist)))) |
yuuji@23 | 193 wlist) |
yuuji@23 | 194 ) |
yuuji@23 | 195 |
yuuji@23 | 196 ;;;###autoload |
yuuji@23 | 197 (defun substitute-all-key-definition (olddef newdef keymap) |
yuuji@23 | 198 "Replace recursively OLDDEF with NEWDEF for any keys in KEYMAP now |
yuuji@23 | 199 defined as OLDDEF. In other words, OLDDEF is replaced with NEWDEF |
yuuji@23 | 200 where ever it appears." |
yuuji@23 | 201 (mapcar |
yuuji@23 | 202 (function (lambda (key) (define-key keymap key newdef))) |
yuuji@47 | 203 (where-is-internal olddef keymap)) |
yuuji@23 | 204 ) |
yuuji@23 | 205 |
yuuji@23 | 206 ;;;###autoload |
yuuji@23 | 207 (defun YaTeX-match-string (n &optional m) |
yuuji@23 | 208 "Return (buffer-substring (match-beginning n) (match-beginning m))." |
yuuji@23 | 209 (if (match-beginning n) |
yuuji@23 | 210 (buffer-substring (match-beginning n) |
yuuji@23 | 211 (match-end (if m m n)))) |
yuuji@23 | 212 ) |
yuuji@23 | 213 |
yuuji@23 | 214 ;;;###autoload |
yuuji@23 | 215 (defun YaTeX-minibuffer-complete () |
yuuji@23 | 216 "Complete in minibuffer" |
yuuji@23 | 217 (interactive) |
yuuji@23 | 218 (let (beg word compl) |
yuuji@23 | 219 (setq beg (if (and (boundp 'delim) delim) |
yuuji@23 | 220 (save-excursion |
yuuji@23 | 221 (skip-chars-backward (concat "^" delim)) |
yuuji@23 | 222 (1- (point))) |
yuuji@23 | 223 (point-min)) |
yuuji@23 | 224 word (buffer-substring beg (point-max)) |
yuuji@23 | 225 compl (try-completion word minibuffer-completion-table)) |
yuuji@23 | 226 (cond |
yuuji@23 | 227 ((eq compl t) nil) |
yuuji@23 | 228 ((eq compl nil) |
yuuji@23 | 229 (ding) |
yuuji@23 | 230 (save-excursion |
yuuji@23 | 231 (let (p) |
yuuji@23 | 232 (goto-char (setq p (point-max))) |
yuuji@23 | 233 (insert " [No match]") |
yuuji@23 | 234 (goto-char p) |
yuuji@23 | 235 (sit-for 2) |
yuuji@23 | 236 (delete-region p (point-max))))) |
yuuji@23 | 237 ((string= compl word) |
yuuji@23 | 238 (with-output-to-temp-buffer "*Completions*" |
yuuji@23 | 239 (display-completion-list |
yuuji@23 | 240 (all-completions word minibuffer-completion-table)))) |
yuuji@23 | 241 (t (delete-region beg (point-max)) |
yuuji@23 | 242 (insert compl)) |
yuuji@23 | 243 )) |
yuuji@23 | 244 ) |
yuuji@23 | 245 |
yuuji@23 | 246 |
yuuji@23 | 247 (provide 'yatexlib) |