# HG changeset patch # User Richard M. Stallman # Date 1114274610 0 # Node ID ff6d0a7e180eccf2f05d1c9be6a9a0cc4b2aa29a # Parent cf0109fd61582ca8a5fce19cbc1b66aee90e3075 (imenu--generic-function): The official position of a definition is the start of the line that BEG is in. diff -r cf0109fd6158 -r ff6d0a7e180e lisp/imenu.el --- a/lisp/imenu.el Sat Apr 23 16:41:33 2005 +0000 +++ b/lisp/imenu.el Sat Apr 23 16:43:30 2005 +0000 @@ -777,7 +777,7 @@ depending on PATTERNS." (let ((index-alist (list 'dummy)) - prev-pos beg + prev-pos (case-fold-search (if (or (local-variable-p 'imenu-case-fold-search) (not (local-variable-p 'font-lock-defaults))) imenu-case-fold-search @@ -807,7 +807,7 @@ (index (nth 2 pat)) (function (nth 3 pat)) (rest (nthcdr 4 pat)) - start) + start beg) ;; Go backwards for convenience of adding items in order. (goto-char (point-max)) (while (and (re-search-backward regexp nil t) @@ -815,32 +815,35 @@ ;; because it means a bad regexp was specified. (not (= (match-beginning 0) (match-end 0)))) (setq start (point)) - (goto-char (match-end index)) - (setq beg (match-beginning index)) - ;; Go to the start of the match. + ;; Record the start of the line in which the match starts. ;; That's the official position of this definition. - (goto-char start) + (goto-char (match-beginning index)) + (beginning-of-line) + (setq beg (point)) (imenu-progress-message prev-pos nil t) ;; Add this sort of submenu only when we've found an ;; item for it, avoiding empty, duff menus. (unless (assoc menu-title index-alist) (push (list menu-title) index-alist)) (if imenu-use-markers - (setq start (copy-marker start))) + (setq beg (copy-marker beg))) (let ((item (if function (nconc (list (match-string-no-properties index) - start function) + beg function) rest) (cons (match-string-no-properties index) - start))) + beg))) ;; This is the desired submenu, ;; starting with its title (or nil). (menu (assoc menu-title index-alist))) ;; Insert the item unless it is already present. (unless (member item (cdr menu)) (setcdr menu - (cons item (cdr menu)))))))) + (cons item (cdr menu))))) + ;; Go to the start of the match, to make sure we + ;; keep making progress backwards. + (goto-char start)))) (set-syntax-table old-table))) (imenu-progress-message prev-pos 100 t) ;; Sort each submenu by position.