]> code.delx.au - gnu-emacs/commitdiff
* doc/lispref/modes.texi (Imenu): Make it clear that sub-alist is the cdr.
authorAndreas Politz <politza@fh-trier.de>
Fri, 29 Nov 2013 03:38:20 +0000 (05:38 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Fri, 29 Nov 2013 03:38:20 +0000 (05:38 +0200)
* lisp/imenu.el (imenu--subalist-p): Don't error on non-conses and
allow non-lambda lists as functions.
(imenu--in-alist): Don't recurse into non-subalists.
(imenu): Don't pass function itself as an argument.

Fixes: debbugs:14029
doc/lispref/ChangeLog
doc/lispref/modes.texi
lisp/ChangeLog
lisp/imenu.el

index ba7fe63a1b5cf9ff3447f5f32ae9fc8771053486..59e61bbdc74ca0b25dad8402300208bed9f9819b 100644 (file)
@@ -1,3 +1,8 @@
+2013-11-29  Andreas Politz  <politza@fh-trier.de>
+
+       * modes.texi (Imenu): Make it clear that sub-alist is the cdr
+       (Bug#14029).
+
 2013-11-27  Glenn Morris  <rgm@gnu.org>
 
        * loading.texi (Library Search):
index 180fef7241d86eebf2342c1512f9a31c2a8508ff..dc643bda9c8669d2f8b6559942d3f5407e091976 100644 (file)
@@ -2483,7 +2483,7 @@ Selecting a special element performs:
 A nested sub-alist element looks like this:
 
 @example
-(@var{menu-title} @var{sub-alist})
+(@var{menu-title} @var{sub-alist})
 @end example
 
 It creates the submenu @var{menu-title} specified by @var{sub-alist}.
index 6e1e8d17feec27739649157297cd4c3e25fca30b..ab72f160670e9fdf8cea733e0a208c971b4e5628 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-29  Andreas Politz  <politza@fh-trier.de>
+       * imenu.el (imenu--subalist-p): Don't error on non-conses and
+       allow non-lambda lists as functions.
+       (imenu--in-alist): Don't recurse into non-subalists.
+       (imenu): Don't pass function itself as an argument (Bug#14029).
+
 2013-11-29  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * progmodes/python.el (python-mode-map): Remove binding for ":".
index f41fcda2713df71f99c2149b98217578cd37e9a6..5e03a3a90814409eedc2479e9be6a005835a47ae 100644 (file)
@@ -293,8 +293,10 @@ The function in this variable is called when selecting a normal index-item.")
 
 
 (defun imenu--subalist-p (item)
-  (and (consp (cdr item)) (listp (cadr item))
-       (not (eq (car (cadr item)) 'lambda))))
+  (and (consp item)
+       (consp (cdr item))
+       (listp (cadr item))
+       (not (functionp (cadr item)))))
 
 (defmacro imenu-progress-message (_prevpos &optional _relpos _reverse)
   "Macro to display a progress message.
@@ -645,9 +647,11 @@ Non-nil arguments are in recursive calls."
       ;;   (INDEX-NAME (INDEX-NAME . INDEX-POSITION) ...)
       ;; while a bottom-level element looks like
       ;;   (INDEX-NAME . INDEX-POSITION)
+      ;; or
+      ;;   (INDEX-NAME INDEX-POSITION FUNCTION ARGUMENTS...)
       ;; We are only interested in the bottom-level elements, so we need to
-      ;; recurse if TAIL is a list.
-      (cond ((listp tail)
+      ;; recurse if TAIL is a nested ALIST.
+      (cond ((imenu--subalist-p elt)
             (if (setq res (imenu--in-alist str tail))
                 (setq alist nil)))
            ((if imenu-name-lookup-function
@@ -1033,8 +1037,8 @@ for more information."
                (nth 2 index-item) imenu-default-goto-function))
           (position (if is-special-item
                         (cadr index-item) (cdr index-item)))
-          (rest (if is-special-item (cddr index-item))))
-      (apply function (car index-item) position rest))
+          (args (if is-special-item (cdr (cddr index-item)))))
+      (apply function (car index-item) position args))
     (run-hooks 'imenu-after-jump-hook)))
 
 (provide 'imenu)