X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/38002bffc7c201935ac4610b779ae0d98be35d62..b0c9a334c2f0eb881eff47f590997e746cc3bdb3:/lisp/abbrev.el diff --git a/lisp/abbrev.el b/lisp/abbrev.el index 3be0014fd0..774bb1892b 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el @@ -1,6 +1,7 @@ ;;; abbrev.el --- abbrev mode commands for Emacs -;; Copyright (C) 1985, 1986, 1987, 1992 Free Software Foundation, Inc. +;; Copyright (C) 1985, 1986, 1987, 1992, 2002, 2003, 2004, +;; 2005 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: abbrev convenience @@ -19,8 +20,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: @@ -29,7 +30,7 @@ ;;; Code: (defcustom only-global-abbrevs nil - "*t means user plans to use global abbrevs only. + "Non-nil means user plans to use global abbrevs only. This makes the commands that normally define mode-specific abbrevs define global abbrevs instead." :type 'boolean @@ -59,13 +60,12 @@ to enable or disable Abbrev mode in the current buffer." :group 'abbrev-mode) -(defvar edit-abbrevs-map nil +(defvar edit-abbrevs-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-x\C-s" 'edit-abbrevs-redefine) + (define-key map "\C-c\C-c" 'edit-abbrevs-redefine) + map) "Keymap used in `edit-abbrevs'.") -(if edit-abbrevs-map - nil - (setq edit-abbrevs-map (make-sparse-keymap)) - (define-key edit-abbrevs-map "\C-x\C-s" 'edit-abbrevs-redefine) - (define-key edit-abbrevs-map "\C-c\C-c" 'edit-abbrevs-redefine)) (defun kill-all-abbrevs () "Undefine all defined abbrevs." @@ -93,11 +93,11 @@ Mark is set after the inserted text." (interactive) (push-mark (save-excursion - (let ((tables abbrev-table-name-list)) - (while tables - (insert-abbrev-table-description (car tables) t) - (setq tables (cdr tables)))) - (point)))) + (let ((tables abbrev-table-name-list)) + (while tables + (insert-abbrev-table-description (car tables) t) + (setq tables (cdr tables)))) + (point)))) (defun list-abbrevs (&optional local) "Display a list of defined abbrevs. @@ -135,9 +135,11 @@ Otherwise display all abbrevs." "Major mode for editing the list of abbrev definitions. \\{edit-abbrevs-map}" (interactive) + (kill-all-local-variables) (setq major-mode 'edit-abbrevs-mode) (setq mode-name "Edit-Abbrevs") - (use-local-map edit-abbrevs-map)) + (use-local-map edit-abbrevs-map) + (run-mode-hooks 'edit-abbrevs-mode-hook)) (defun edit-abbrevs () "Alter abbrev definitions by editing a list of them. @@ -169,20 +171,23 @@ the ones defined from the buffer now." (interactive "P") (if arg (kill-all-abbrevs)) (save-excursion - (goto-char (point-min)) - (while (and (not (eobp)) (re-search-forward "^(" nil t)) - (let* ((buf (current-buffer)) - (table (read buf)) - abbrevs name hook exp count) - (forward-line 1) - (while (progn (forward-line 1) - (not (eolp))) - (setq name (read buf) count (read buf) exp (read buf)) - (skip-chars-backward " \t\n\f") - (setq hook (if (not (eolp)) (read buf))) - (skip-chars-backward " \t\n\f") - (setq abbrevs (cons (list name exp hook count) abbrevs))) - (define-abbrev-table table abbrevs))))) + (goto-char (point-min)) + (while (and (not (eobp)) (re-search-forward "^(" nil t)) + (let* ((buf (current-buffer)) + (table (read buf)) + abbrevs name hook exp count sys) + (forward-line 1) + (while (progn (forward-line 1) + (not (eolp))) + (setq name (read buf) count (read buf)) + (if (equal count '(sys)) + (setq sys t count (read buf))) + (setq exp (read buf)) + (skip-chars-backward " \t\n\f") + (setq hook (if (not (eolp)) (read buf))) + (skip-chars-backward " \t\n\f") + (setq abbrevs (cons (list name exp hook count sys) abbrevs))) + (define-abbrev-table table abbrevs))))) (defun read-abbrev-file (&optional file quietly) "Read abbrev definitions from file written with `write-abbrev-file'. @@ -195,11 +200,11 @@ Optional second argument QUIETLY non-nil means don't display a message." (setq abbrevs-changed nil)) (defun quietly-read-abbrev-file (&optional file) - "Read abbrev definitions from file written with write-abbrev-file. + "Read abbrev definitions from file written with `write-abbrev-file'. Optional argument FILE is the name of the file to read; it defaults to the value of `abbrev-file-name'. Does not display any message." - ;(interactive "fRead abbrev file: ") + ;(interactive "fRead abbrev file: ") (read-abbrev-file file t)) (defun write-abbrev-file (&optional file) @@ -219,7 +224,17 @@ specified in `abbrev-file-name' is used." (let ((coding-system-for-write 'emacs-mule)) (with-temp-file file (insert ";;-*-coding: emacs-mule;-*-\n") - (dolist (table abbrev-table-name-list) + (dolist (table + ;; We sort the table in order to ease the automatic + ;; merging of different versions of the user's abbrevs + ;; file. This is useful, for example, for when the + ;; user keeps their home directory in a revision + ;; control system, and is therefore keeping multiple + ;; slightly-differing copies loosely synchronized. + (sort (copy-sequence abbrev-table-name-list) + (lambda (s1 s2) + (string< (symbol-name s1) + (symbol-name s2))))) (insert-abbrev-table-description table nil))))) (defun add-mode-abbrev (arg) @@ -267,7 +282,7 @@ Don't use this function in a Lisp program; use `define-abbrev' instead." name (abbrev-expansion name table)))) (define-abbrev table (downcase name) exp)))) -(defun inverse-add-mode-abbrev (arg) +(defun inverse-add-mode-abbrev (n) "Define last word before point as a mode-specific abbrev. With prefix argument N, defines the Nth word before point. This command uses the minibuffer to read the expansion. @@ -278,15 +293,15 @@ Expands the abbreviation after defining it." global-abbrev-table (or local-abbrev-table (error "No per-mode abbrev table"))) - "Mode" arg)) + "Mode" n)) -(defun inverse-add-global-abbrev (arg) +(defun inverse-add-global-abbrev (n) "Define last word before point as a global (mode-independent) abbrev. With prefix argument N, defines the Nth word before point. This command uses the minibuffer to read the expansion. Expands the abbreviation after defining it." (interactive "p") - (inverse-add-abbrev global-abbrev-table "Global" arg)) + (inverse-add-abbrev global-abbrev-table "Global" n)) (defun inverse-add-abbrev (table type arg) (let (name exp start end) @@ -324,9 +339,8 @@ ARG is non-nil. Interactively, ARG is the prefix argument." (defun expand-region-abbrevs (start end &optional noquery) "For abbrev occurrence in the region, offer to expand it. -The user is asked to type y or n for each occurrence. -A prefix argument means don't query; expand all abbrevs. -If called from a Lisp program, arguments are START END &optional NOQUERY." +The user is asked to type `y' or `n' for each occurrence. +A prefix argument means don't query; expand all abbrevs." (interactive "r\nP") (save-excursion (goto-char start)