summaryrefslogtreecommitdiff
path: root/lisp/abbrev.el
diff options
context:
space:
mode:
authorLeo Liu <sdl.web@gmail.com>2011-03-28 22:34:32 +0800
committerLeo Liu <sdl.web@gmail.com>2011-03-28 22:34:32 +0800
commit947b656632a76ebb01eda0550c34b1ac43684a98 (patch)
treedd27cff98bb4d52c07ec1df5a736ea9452a01b85 /lisp/abbrev.el
parent1db5b1ad87a145871fc1120ec949fee9211de9cb (diff)
downloademacs-947b656632a76ebb01eda0550c34b1ac43684a98.tar.gz
Place empty abbrev tables after nonempty ones when editing
Diffstat (limited to 'lisp/abbrev.el')
-rw-r--r--lisp/abbrev.el22
1 files changed, 20 insertions, 2 deletions
diff --git a/lisp/abbrev.el b/lisp/abbrev.el
index 3b383a5f5b8..504d9fcbbce 100644
--- a/lisp/abbrev.el
+++ b/lisp/abbrev.el
@@ -123,8 +123,13 @@ Otherwise display all abbrevs."
(if local
(insert-abbrev-table-description
(abbrev-table-name local-table) t)
- (dolist (table abbrev-table-name-list)
- (insert-abbrev-table-description table t)))
+ (let (empty-tables)
+ (dolist (table abbrev-table-name-list)
+ (if (abbrev-table-empty-p (symbol-value table))
+ (push table empty-tables)
+ (insert-abbrev-table-description table t)))
+ (dolist (table (nreverse empty-tables))
+ (insert-abbrev-table-description table t))))
(goto-char (point-min))
(set-buffer-modified-p nil)
(edit-abbrevs-mode)
@@ -420,6 +425,19 @@ PROPS is a list of properties."
(and (vectorp object)
(numberp (abbrev-table-get object :abbrev-table-modiff))))
+(defun abbrev-table-empty-p (object &optional ignore-system)
+ "Return nil if there are no abbrev symbols in OBJECT.
+If IGNORE-SYSTEM is non-nil, system definitions are ignored."
+ (unless (abbrev-table-p object)
+ (error "Non abbrev table object"))
+ (not (catch 'some
+ (mapatoms (lambda (abbrev)
+ (unless (or (zerop (length (symbol-name abbrev)))
+ (and ignore-system
+ (abbrev-get abbrev :system)))
+ (throw 'some t)))
+ object))))
+
(defvar global-abbrev-table (make-abbrev-table)
"The abbrev table whose abbrevs affect all buffers.
Each buffer may also have a local abbrev table.