yatex

annotate yatexlib.el @ 46:cd1b63102eed

Support Mule2
author yuuji
date Mon, 19 Sep 1994 16:54:19 +0000
parents b00c74813e56
children d7e7b4654058
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@46 5 ;;; Last modified Fri Sep 16 01:50:34 1994 on figaro
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@23 126 (or (and (get-buffer-window buffer)
yuuji@23 127 (progn (if select (select-window (get-buffer-window buffer)))
yuuji@23 128 t))
yuuji@23 129 (let ((window (selected-window))
yuuji@23 130 (wlist (YaTeX-window-list)) win w (x 0))
yuuji@23 131 (cond
yuuji@23 132 ((> (length wlist) 2)
yuuji@23 133 (if func
yuuji@23 134 (while wlist
yuuji@23 135 (setq w (car wlist))
yuuji@23 136 (if (and (not (eq window w))
yuuji@23 137 (> (funcall func w) x))
yuuji@23 138 (setq win w x (funcall func w)))
yuuji@23 139 (setq wlist (cdr wlist)))
yuuji@23 140 (setq win (get-lru-window)))
yuuji@23 141 (select-window win)
yuuji@23 142 (switch-to-buffer buffer)
yuuji@23 143 (or select (select-window window)))
yuuji@23 144 ((= (length wlist) 2)
yuuji@23 145 (other-window 1)
yuuji@23 146 (switch-to-buffer buffer)
yuuji@23 147 (or select (select-window window)))
yuuji@23 148 (t ;if one-window
yuuji@23 149 (cond
yuuji@23 150 (YaTeX-default-pop-window-height
yuuji@23 151 (split-window
yuuji@23 152 (selected-window)
yuuji@23 153 (max
yuuji@23 154 (min
yuuji@23 155 (- (screen-height)
yuuji@23 156 (if (numberp YaTeX-default-pop-window-height)
yuuji@23 157 (+ YaTeX-default-pop-window-height 2)
yuuji@23 158 (/ (* (screen-height)
yuuji@23 159 (string-to-int YaTeX-default-pop-window-height))
yuuji@23 160 100)))
yuuji@23 161 (- (screen-height) window-min-height 1))
yuuji@23 162 window-min-height))
yuuji@23 163 (pop-to-buffer buffer)
yuuji@23 164 (or select (select-window window)))
yuuji@23 165 (t nil)))
yuuji@23 166 )))
yuuji@23 167 )
yuuji@23 168
yuuji@23 169 ;;;###autoload
yuuji@23 170 (defun YaTeX-window-list ()
yuuji@23 171 (let*((curw (selected-window)) (win curw) (wlist (list curw)))
yuuji@23 172 (while (not (eq curw (setq win (next-window win))))
yuuji@23 173 (or (eq win (minibuffer-window))
yuuji@23 174 (setq wlist (cons win wlist))))
yuuji@23 175 wlist)
yuuji@23 176 )
yuuji@23 177
yuuji@23 178 ;;;###autoload
yuuji@23 179 (defun substitute-all-key-definition (olddef newdef keymap)
yuuji@23 180 "Replace recursively OLDDEF with NEWDEF for any keys in KEYMAP now
yuuji@23 181 defined as OLDDEF. In other words, OLDDEF is replaced with NEWDEF
yuuji@23 182 where ever it appears."
yuuji@23 183 (mapcar
yuuji@23 184 (function (lambda (key) (define-key keymap key newdef)))
yuuji@23 185 (where-is-internal olddef))
yuuji@23 186 )
yuuji@23 187
yuuji@23 188 ;;;###autoload
yuuji@23 189 (defun YaTeX-match-string (n &optional m)
yuuji@23 190 "Return (buffer-substring (match-beginning n) (match-beginning m))."
yuuji@23 191 (if (match-beginning n)
yuuji@23 192 (buffer-substring (match-beginning n)
yuuji@23 193 (match-end (if m m n))))
yuuji@23 194 )
yuuji@23 195
yuuji@23 196 ;;;###autoload
yuuji@23 197 (defun YaTeX-minibuffer-complete ()
yuuji@23 198 "Complete in minibuffer"
yuuji@23 199 (interactive)
yuuji@23 200 (let (beg word compl)
yuuji@23 201 (setq beg (if (and (boundp 'delim) delim)
yuuji@23 202 (save-excursion
yuuji@23 203 (skip-chars-backward (concat "^" delim))
yuuji@23 204 (1- (point)))
yuuji@23 205 (point-min))
yuuji@23 206 word (buffer-substring beg (point-max))
yuuji@23 207 compl (try-completion word minibuffer-completion-table))
yuuji@23 208 (cond
yuuji@23 209 ((eq compl t) nil)
yuuji@23 210 ((eq compl nil)
yuuji@23 211 (ding)
yuuji@23 212 (save-excursion
yuuji@23 213 (let (p)
yuuji@23 214 (goto-char (setq p (point-max)))
yuuji@23 215 (insert " [No match]")
yuuji@23 216 (goto-char p)
yuuji@23 217 (sit-for 2)
yuuji@23 218 (delete-region p (point-max)))))
yuuji@23 219 ((string= compl word)
yuuji@23 220 (with-output-to-temp-buffer "*Completions*"
yuuji@23 221 (display-completion-list
yuuji@23 222 (all-completions word minibuffer-completion-table))))
yuuji@23 223 (t (delete-region beg (point-max))
yuuji@23 224 (insert compl))
yuuji@23 225 ))
yuuji@23 226 )
yuuji@23 227
yuuji@23 228
yuuji@23 229 (provide 'yatexlib)