Annotation of 43BSDReno/contrib/emacs-18.55/lisp/abbrev.el, revision 1.1

1.1     ! root        1: ;; Abbrev mode commands for Emacs
        !             2: 
        !             3: ;; Copyright (C) 1985, 1986 Free Software Foundation, Inc.
        !             4: 
        !             5: ;; This file is part of GNU Emacs.
        !             6: 
        !             7: ;; GNU Emacs is distributed in the hope that it will be useful,
        !             8: ;; but WITHOUT ANY WARRANTY.  No author or distributor
        !             9: ;; accepts responsibility to anyone for the consequences of using it
        !            10: ;; or for whether it serves any particular purpose or works at all,
        !            11: ;; unless he says so in writing.  Refer to the GNU Emacs General Public
        !            12: ;; License for full details.
        !            13: 
        !            14: ;; Everyone is granted permission to copy, modify and redistribute
        !            15: ;; GNU Emacs, but only under the conditions described in the
        !            16: ;; GNU Emacs General Public License.   A copy of this license is
        !            17: ;; supposed to have been given to you along with GNU Emacs so you
        !            18: ;; can know your rights and responsibilities.  It should be in a
        !            19: ;; file named COPYING.  Among other things, the copyright notice
        !            20: ;; and this notice must be preserved on all copies.
        !            21: 
        !            22: 
        !            23: (defun abbrev-mode (arg)
        !            24:   "Toggle abbrev mode.
        !            25: With arg, turn abbrev mode on iff arg is positive.
        !            26: In abbrev mode, inserting an abbreviation causes it to expand
        !            27: and be replaced by its expansion."
        !            28:   (interactive "P")
        !            29:   (setq abbrev-mode
        !            30:        (if (null arg) (not abbrev-mode)
        !            31:          (> (prefix-numeric-value arg) 0)))
        !            32:   (set-buffer-modified-p (buffer-modified-p))) ;No-op, but updates mode line.
        !            33: 
        !            34: (defvar edit-abbrevs-map nil
        !            35:   "Keymap used in edit-abbrevs.")
        !            36: (if edit-abbrevs-map
        !            37:     nil
        !            38:   (setq edit-abbrevs-map (make-sparse-keymap))
        !            39:   (define-key edit-abbrevs-map "\C-x\C-s" 'edit-abbrevs-redefine)
        !            40:   (define-key edit-abbrevs-map "\C-c\C-c" 'edit-abbrevs-redefine))
        !            41: 
        !            42: (defun kill-all-abbrevs ()
        !            43:   "Undefine all defined abbrevs."
        !            44:   (interactive)
        !            45:   (let ((tables abbrev-table-name-list))
        !            46:     (while tables
        !            47:       (clear-abbrev-table (symbol-value (car tables)))
        !            48:       (setq tables (cdr tables)))))
        !            49: 
        !            50: (defun insert-abbrevs ()
        !            51:   "Insert after point a description of all defined abbrevs.
        !            52: Mark is set after the inserted text."
        !            53:   (interactive)
        !            54:   (push-mark
        !            55:    (save-excursion
        !            56:     (let ((tables abbrev-table-name-list))
        !            57:       (while tables
        !            58:        (insert-abbrev-table-description (car tables) t)
        !            59:        (setq tables (cdr tables))))
        !            60:     (point))))
        !            61: 
        !            62: (defun list-abbrevs ()
        !            63:   "Display a list of all defined abbrevs."
        !            64:   (interactive)
        !            65:   (display-buffer (prepare-abbrev-list-buffer)))
        !            66: 
        !            67: (defun prepare-abbrev-list-buffer ()
        !            68:   (save-excursion
        !            69:     (set-buffer (get-buffer-create "*Abbrevs*"))
        !            70:     (erase-buffer)
        !            71:     (let ((tables abbrev-table-name-list))
        !            72:       (while tables
        !            73:        (insert-abbrev-table-description (car tables) t)
        !            74:        (setq tables (cdr tables))))
        !            75:     (goto-char (point-min))
        !            76:     (set-buffer-modified-p nil)
        !            77:     (edit-abbrevs-mode))
        !            78:   (get-buffer-create "*Abbrevs*"))
        !            79: 
        !            80: (defun edit-abbrevs-mode ()
        !            81:   "Major mode for editing the list of abbrev definitions.
        !            82: \\{edit-abbrevs-map}"
        !            83:   (interactive)
        !            84:   (setq major-mode 'edit-abbrevs-mode)
        !            85:   (setq mode-name "Edit-Abbrevs")
        !            86:   (use-local-map edit-abbrevs-map))
        !            87: 
        !            88: (defun edit-abbrevs ()
        !            89:   "Alter abbrev definitions by editing a list of them.
        !            90: Selects a buffer containing a list of abbrev definitions.
        !            91: You can edit them and type C-c C-c to redefine abbrevs
        !            92: according to your editing.
        !            93: Buffer contains a header line for each abbrev table,
        !            94:  which is the abbrev table name in parentheses.
        !            95: This is followed by one line per abbrev in that table:
        !            96: NAME   USECOUNT   EXPANSION   HOOK
        !            97: where NAME and EXPANSION are strings with quotes,
        !            98: USECOUNT is an integer, and HOOK is any valid function
        !            99: or may be omitted (it is usually omitted)."
        !           100:   (interactive)
        !           101:   (switch-to-buffer (prepare-abbrev-list-buffer)))
        !           102: 
        !           103: (defun edit-abbrevs-redefine ()
        !           104:   "Redefine abbrevs according to current buffer contents."
        !           105:   (interactive)
        !           106:   (define-abbrevs t)
        !           107:   (set-buffer-modified-p nil))
        !           108: 
        !           109: (defun define-abbrevs (&optional arg)
        !           110:   "Define abbrevs according to current visible buffer contents.
        !           111: See documentation of edit-abbrevs for info on the format of the
        !           112: text you must have in the buffer.
        !           113: With argument, eliminate all abbrev definitions except
        !           114: the ones defined from the buffer now."
        !           115:   (interactive "P")
        !           116:   (if arg (kill-all-abbrevs))
        !           117:   (save-excursion
        !           118:    (goto-char (point-min))
        !           119:    (while (and (not (eobp)) (re-search-forward "^(" nil t))
        !           120:      (let* ((buf (current-buffer))
        !           121:            (table (read buf))
        !           122:            abbrevs)
        !           123:        (forward-line 1)
        !           124:        (while (progn (forward-line 1)
        !           125:                     (not (eolp)))
        !           126:         (setq name (read buf) count (read buf) exp (read buf))
        !           127:         (skip-chars-backward " \t\n\f")
        !           128:         (setq hook (if (not (eolp)) (read buf)))
        !           129:         (skip-chars-backward " \t\n\f")
        !           130:         (setq abbrevs (cons (list name exp hook count) abbrevs)))
        !           131:        (define-abbrev-table table abbrevs)))))
        !           132: 
        !           133: (defun read-abbrev-file (file &optional quietly)
        !           134:   "Read abbrev definitions from file written with write-abbrev-file.
        !           135: Takes file name as argument.
        !           136: Optional second argument non-nil means don't print anything."
        !           137:   (interactive "fRead abbrev file: ")
        !           138:   (load (if (and file (> (length file) 0)) file abbrev-file-name)
        !           139:        nil quietly)
        !           140:   (setq save-abbrevs t abbrevs-changed nil))
        !           141: 
        !           142: (defun quietly-read-abbrev-file (file)
        !           143:   "Read abbrev definitions from file written with write-abbrev-file.
        !           144: Takes file name as argument.  Does not print anything."
        !           145:   ;(interactive "fRead abbrev file: ")
        !           146:   (read-abbrev-file file t))
        !           147: 
        !           148: (defun write-abbrev-file (file)
        !           149:   "Write all abbrev definitions to file of Lisp code.
        !           150: The file can be loaded to define the same abbrevs."
        !           151:   (interactive "FWrite abbrev file: ")
        !           152:   (or (and file (> (length file) 0))
        !           153:       (setq file abbrev-file-name))
        !           154:   (save-excursion
        !           155:    (set-buffer (get-buffer-create " write-abbrev-file"))
        !           156:    (erase-buffer)
        !           157:    (let ((tables abbrev-table-name-list))
        !           158:      (while tables
        !           159:        (insert-abbrev-table-description (car tables) nil)
        !           160:        (setq tables (cdr tables))))
        !           161:    (write-region 1 (point-max) file)
        !           162:    (erase-buffer)))
        !           163: 
        !           164: (defun add-mode-abbrev (arg)
        !           165:   "Define mode-specific abbrev for last word(s) before point.
        !           166: Argument is how many words before point form the expansion;
        !           167: or zero means the region is the expansion.
        !           168: A negative argument means to undefine the specified abbrev.
        !           169: Reads the abbreviation in the minibuffer."
        !           170:   (interactive "p")
        !           171:   (add-abbrev
        !           172:    (if only-global-abbrevs
        !           173:        global-abbrev-table 
        !           174:      (or local-abbrev-table
        !           175:         (error "No per-mode abbrev table.")))
        !           176:    "Mode" arg))
        !           177: 
        !           178: (defun add-global-abbrev (arg)
        !           179:   "Define global (all modes) abbrev for last word(s) before point.
        !           180: Argument is how many words before point form the expansion;
        !           181: or zero means the region is the expansion.
        !           182: A negative argument means to undefine the specified abbrev.
        !           183: Reads the abbreviation in the minibuffer."
        !           184:   (interactive "p")
        !           185:   (add-abbrev global-abbrev-table "Global" arg))
        !           186: 
        !           187: (defun add-abbrev (table type arg)
        !           188:   (let ((exp (and (>= arg 0)
        !           189:                  (buffer-substring
        !           190:                   (point)
        !           191:                   (if (= arg 0) (mark)
        !           192:                     (save-excursion (forward-word (- arg)) (point))))))
        !           193:        name)
        !           194:     (setq name (read-string (format "%s abbrev for \"%s\": "
        !           195:                                    type exp)))
        !           196:     (if (or (null exp)
        !           197:            (not (abbrev-expansion name table))
        !           198:            (y-or-n-p (format "%s expands to \"%s\"; redefine? "
        !           199:                              name (abbrev-expansion name table))))
        !           200:        (define-abbrev table (downcase name) exp))))
        !           201:        
        !           202: (defun inverse-add-mode-abbrev (arg)
        !           203:   "Define last word before point as a mode-specific abbrev.
        !           204: With argument N, defines the Nth word before point.
        !           205: Reads the expansion in the minibuffer.
        !           206: Expands the abbreviation after defining it."
        !           207:   (interactive "p")
        !           208:   (inverse-add-abbrev
        !           209:    (if only-global-abbrevs
        !           210:        global-abbrev-table 
        !           211:      (or local-abbrev-table
        !           212:         (error "No per-mode abbrev table.")))
        !           213:    "Mode" arg))
        !           214: 
        !           215: (defun inverse-add-global-abbrev (arg)
        !           216:   "Define last word before point as a global (mode-independent) abbrev.
        !           217: With argument N, defines the Nth word before point.
        !           218: Reads the expansion in the minibuffer.
        !           219: Expands the abbreviation after defining it."
        !           220:   (interactive "p")
        !           221:   (inverse-add-abbrev global-abbrev-table "Global" arg))
        !           222: 
        !           223: (defun inverse-add-abbrev (table type arg)
        !           224:   (let (name nameloc exp)
        !           225:     (save-excursion
        !           226:      (forward-word (- arg))
        !           227:      (setq name (buffer-substring (point) (progn (forward-word 1)
        !           228:                                               (setq nameloc (point))))))
        !           229:     (setq exp (read-string (format "%s expansion for \"%s\": "
        !           230:                                   type name)))
        !           231:     (if (or (not (abbrev-expansion name table))
        !           232:            (y-or-n-p (format "%s expands to \"%s\"; redefine? "
        !           233:                              name (abbrev-expansion name table))))
        !           234:        (progn
        !           235:         (define-abbrev table (downcase name) exp)
        !           236:         (save-excursion
        !           237:          (goto-char nameloc)
        !           238:          (expand-abbrev))))))
        !           239: 
        !           240: (defun abbrev-prefix-mark (&optional arg)
        !           241:   "Mark current point as the beginning of an abbrev.
        !           242: Abbrev to be expanded starts here rather than at
        !           243: beginning of word.  This way, you can expand an abbrev
        !           244: with a prefix: insert the prefix, use this command,
        !           245: then insert the abbrev."
        !           246:   (interactive "P")
        !           247:   (or arg (expand-abbrev))
        !           248:   (setq abbrev-start-location (point-marker)
        !           249:        abbrev-start-location-buffer (current-buffer))
        !           250:   (insert "-"))
        !           251: 
        !           252: (defun expand-region-abbrevs (start end &optional noquery)
        !           253:   "For abbrev occurrence in the region, offer to expand it.
        !           254: The user is asked to type y or n for each occurrence.
        !           255: A numeric argument means don't query; expand all abbrevs.
        !           256: Calling from a program, arguments are START END &optional NOQUERY."
        !           257:   (interactive "r")
        !           258:   (save-excursion
        !           259:     (goto-char (min start end))
        !           260:     (let ((lim (- (point-max) (max start end))))
        !           261:       (while (and (not (eobp))
        !           262:                  (progn (forward-word 1)
        !           263:                         (<= (point) (- (point-max) lim))))
        !           264:        (let ((modp (buffer-modified-p)))
        !           265:          (if (expand-abbrev)
        !           266:              (progn
        !           267:               (set-buffer-modified-p modp)
        !           268:               (unexpand-abbrev)
        !           269:               (if (or noquery (y-or-n-p "Expand this? "))
        !           270:                   (expand-abbrev)))))))))

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.