Mercurial > emacs
changeset 61769:ff6d0a7e180e
(imenu--generic-function): The official position of a
definition is the start of the line that BEG is in.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 23 Apr 2005 16:43:30 +0000 |
parents | cf0109fd6158 |
children | 18224d5c1322 |
files | lisp/imenu.el |
diffstat | 1 files changed, 13 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- 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.