changeset 51024:4efabfff9aa1

(imenu--split-menu): Remove unused var `count'. Don't copy the sequence since we're already modifying it elsewhere. (imenu--create-keymap): Rename from imenu--create-keymap-1. Add optional `cmd' argument. Remove unused var `counter'. (imenu-update-menubar): Use the new arg to get the old behavior. (imenu--mouse-menu): Don't use the new arg to recover the lost behavior.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 16 May 2003 21:09:59 +0000
parents 684391d76c30
children 76f05bb50963
files lisp/imenu.el
diffstat 1 files changed, 50 insertions(+), 55 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/imenu.el	Fri May 16 18:50:24 2003 +0000
+++ b/lisp/imenu.el	Fri May 16 21:09:59 2003 +0000
@@ -1,6 +1,6 @@
 ;;; imenu.el --- framework for mode-specific buffer indexes
 
-;; Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 2003 Free Software Foundation, Inc.
 
 ;; Author: Ake Stenhoff <etxaksf@aom.ericsson.se>
 ;;         Lars Lindberg <lli@sypro.cap.se>
@@ -527,22 +527,17 @@
 	      menulist (delq imenu--rescan-item menulist)))
     (setq tail menulist)
     (dolist (item tail)
-      (if (imenu--subalist-p item)
-	  (setq keep-at-top (cons item keep-at-top)
-		menulist (delq item menulist))))
+      (when (imenu--subalist-p item)
+	(push item keep-at-top)
+	(setq menulist (delq item menulist))))
     (if imenu-sort-function
+	(setq menulist (sort menulist imenu-sort-function)))
+    (if (> (length menulist) imenu-max-items)
 	(setq menulist
-	      (sort
-	       (copy-sequence menulist)
-	       imenu-sort-function)))
-    (if (> (length menulist) imenu-max-items)
-	(let ((count 0))
-	  (setq menulist
-		(mapcar
-		 (function
-		  (lambda (menu)
-		    (cons (format "From: %s" (caar menu)) menu)))
-		 (imenu--split menulist imenu-max-items)))))
+	      (mapcar
+	       (lambda (menu)
+		 (cons (format "From: %s" (caar menu)) menu))
+	       (imenu--split menulist imenu-max-items))))
     (cons title
 	  (nconc (nreverse keep-at-top) menulist))))
 
@@ -634,19 +629,18 @@
 	alist)
        t))
 
-(defun imenu--create-keymap-1 (title alist)
-  (let ((counter 0))
-    (list* 'keymap title
-	   (mapcar
-	    (lambda (item)
-	      (list* (car item) (car item)
-		     (cond
-		      ((imenu--subalist-p item)
-		       (imenu--create-keymap-1 (car item) (cdr item)))
-		      (t
-		       `(lambda () (interactive)
-			  (imenu--menubar-select ',item))))))
-	    alist))))
+(defun imenu--create-keymap (title alist &optional cmd)
+  (list* 'keymap title
+	 (mapcar
+	  (lambda (item)
+	    (list* (car item) (car item)
+		   (cond
+		    ((imenu--subalist-p item)
+		     (imenu--create-keymap (car item) (cdr item) cmd))
+		    (t
+		     `(lambda () (interactive)
+			,(if cmd `(,cmd ',item) (list 'quote item)))))))
+	  alist)))
 
 (defun imenu--in-alist (str alist)
   "Check whether the string STR is contained in multi-level ALIST."
@@ -717,25 +711,25 @@
 	 (error "This buffer cannot use `imenu-default-create-index-function'"))))
 
 ;; Not used and would require cl at run time
-;;; (defun imenu--flatten-index-alist (index-alist &optional concat-names prefix)
-;;;   ;; Takes a nested INDEX-ALIST and returns a flat index alist.
-;;;   ;; If optional CONCAT-NAMES is non-nil, then a nested index has its
-;;;   ;; name and a space concatenated to the names of the children.
-;;;   ;; Third argument PREFIX is for internal use only.
-;;;   (mapcan
-;;;    (lambda (item)
-;;;      (let* ((name (car item))
-;;; 	    (pos (cdr item))
-;;; 	    (new-prefix (and concat-names
-;;; 			     (if prefix
-;;; 				 (concat prefix imenu-level-separator name)
-;;; 			       name))))
-;;;        (cond
-;;; 	((or (markerp pos) (numberp pos))
-;;; 	 (list (cons new-prefix pos)))
-;;; 	(t
-;;; 	 (imenu--flatten-index-alist pos new-prefix)))))
-;;;    index-alist))
+;; (defun imenu--flatten-index-alist (index-alist &optional concat-names prefix)
+;;   ;; Takes a nested INDEX-ALIST and returns a flat index alist.
+;;   ;; If optional CONCAT-NAMES is non-nil, then a nested index has its
+;;   ;; name and a space concatenated to the names of the children.
+;;   ;; Third argument PREFIX is for internal use only.
+;;   (mapcan
+;;    (lambda (item)
+;;      (let* ((name (car item))
+;; 	    (pos (cdr item))
+;; 	    (new-prefix (and concat-names
+;; 			     (if prefix
+;; 				 (concat prefix imenu-level-separator name)
+;; 			       name))))
+;;        (cond
+;; 	((or (markerp pos) (numberp pos))
+;; 	 (list (cons new-prefix pos)))
+;; 	(t
+;; 	 (imenu--flatten-index-alist pos new-prefix)))))
+;;    index-alist))
 
 ;;;
 ;;; Generic index gathering function.
@@ -905,10 +899,10 @@
 Returns t for rescan and otherwise an element or subelement of INDEX-ALIST."
   (setq index-alist (imenu--split-submenus index-alist))
   (let* ((menu (imenu--split-menu index-alist (or title (buffer-name))))
-	 (map (imenu--create-keymap-1 (car menu)
-				      (if (< 1 (length (cdr menu)))
-					  (cdr menu)
-					(cdr (car (cdr menu)))))))
+	 (map (imenu--create-keymap (car menu)
+				    (cdr (if (< 1 (length (cdr menu)))
+					     menu
+					   (car (cdr menu)))))))
     (popup-menu map event)))
 
 (defun imenu-choose-buffer-index (&optional prompt alist)
@@ -1001,10 +995,11 @@
 	  (setq index-alist (imenu--split-submenus index-alist))
 	  (setq menu (imenu--split-menu index-alist
 					(buffer-name)))
-	  (setq menu1 (imenu--create-keymap-1 (car menu)
-					      (if (< 1 (length (cdr menu)))
-						  (cdr menu)
-						(cdr (car (cdr menu))))))
+	  (setq menu1 (imenu--create-keymap (car menu)
+					    (cdr (if (< 1 (length (cdr menu)))
+						     menu
+						   (car (cdr menu))))
+					    'imenu--menubar-select))
 	  (setq old (lookup-key (current-local-map) [menu-bar index]))
 	  (setcdr old (cdr menu1)))))))