diff options
author | Glenn Morris <rgm@gnu.org> | 2008-09-30 03:38:42 +0000 |
---|---|---|
committer | Glenn Morris <rgm@gnu.org> | 2008-09-30 03:38:42 +0000 |
commit | c27c178cd23dcc5b977c6f97ccc7005b4f712088 (patch) | |
tree | 68f31caddbc2ef9e66b0b1d4e5209ebde7b54614 /lisp/imenu.el | |
parent | 4043c1949e6c5f6c6eb2a0024043e24d61a994fa (diff) | |
download | emacs-c27c178cd23dcc5b977c6f97ccc7005b4f712088.tar.gz |
Daniel Colascione <danc at merrillpress.com>
(imenu--split-menu): Fix bug with shared lists that deleted some
nested menu items.
Diffstat (limited to 'lisp/imenu.el')
-rw-r--r-- | lisp/imenu.el | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lisp/imenu.el b/lisp/imenu.el index 8573486b5aa..370875c3d54 100644 --- a/lisp/imenu.el +++ b/lisp/imenu.el @@ -483,6 +483,8 @@ element recalculates the buffer's index alist.") ;; Split LIST into sublists of max length N. ;; Example (imenu--split '(1 2 3 4 5 6 7 8) 3)-> '((1 2 3) (4 5 6) (7 8)) +;; +;; The returned list DOES NOT share structure with LIST. (defun imenu--split (list n) (let ((remain list) (result '()) @@ -504,10 +506,15 @@ element recalculates the buffer's index alist.") ;;; Split the alist MENULIST into a nested alist, if it is long enough. ;;; In any case, add TITLE to the front of the alist. +;;; If IMENU--RESCAN-ITEM is present in MENULIST, it is moved to the +;;; beginning of the returned alist. +;;; +;;; The returned alist DOES NOT share structure with MENULIST. (defun imenu--split-menu (menulist title) - (let (keep-at-top tail) + (let ((menulist (copy-sequence menulist)) + keep-at-top tail) (if (memq imenu--rescan-item menulist) - (setq keep-at-top (cons imenu--rescan-item nil) + (setq keep-at-top (list imenu--rescan-item) menulist (delq imenu--rescan-item menulist))) (setq tail menulist) (dolist (item tail) @@ -515,7 +522,7 @@ element recalculates the buffer's index alist.") (push item keep-at-top) (setq menulist (delq item menulist)))) (if imenu-sort-function - (setq menulist (sort (copy-sequence menulist) imenu-sort-function))) + (setq menulist (sort menulist imenu-sort-function))) (if (> (length menulist) imenu-max-items) (setq menulist (mapcar @@ -527,6 +534,9 @@ element recalculates the buffer's index alist.") ;;; Split up each long alist that are nested within ALIST ;;; into nested alists. +;;; +;;; Return a split and sorted copy of ALIST. The returned alist DOES +;;; NOT share structure with ALIST. (defun imenu--split-submenus (alist) (mapcar (function (lambda (elt) |