]> git.eshelyaron.com Git - emacs.git/commitdiff
Daniel Colascione <danc at merrillpress.com>
authorGlenn Morris <rgm@gnu.org>
Tue, 30 Sep 2008 03:38:42 +0000 (03:38 +0000)
committerGlenn Morris <rgm@gnu.org>
Tue, 30 Sep 2008 03:38:42 +0000 (03:38 +0000)
(imenu--split-menu): Fix bug with shared lists that deleted some
nested menu items.

lisp/ChangeLog
lisp/imenu.el

index d77a8b9f99484c14f6c353c2c3cae6288639c8f3..f2e06d8550616b62cf5cb0a01055c6c281d3b02c 100644 (file)
@@ -1,3 +1,8 @@
+2008-09-30  Daniel Colascione  <danc@merrillpress.com>
+
+       * imenu.el (imenu--split-menu): Fix bug with shared lists that deleted
+       some nested menu items.
+
 2008-09-30  Jay Belanger  <jay.p.belanger@gmail.com>
 
        * calc/calc-units.el (math-standard-units): Add entries used to
index 8573486b5aa3f78d9c7b15e49c67054135cb8416..370875c3d5418e956d66749e12d64c4fa5da8f69 100644 (file)
@@ -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)