# HG changeset patch # User Richard M. Stallman # Date 819855787 0 # Node ID 36556403b62bc6a85bcc501ff02ab95f662c9beb # Parent 398b490f2df214e0ec647842f4116dab98e07250 (makefile-add-log-defun): Rewrite to scan back checking one line at a time. Notice blank lines and comments. diff -r 398b490f2df2 -r 36556403b62b lisp/progmodes/make-mode.el --- a/lisp/progmodes/make-mode.el Mon Dec 25 01:24:56 1995 +0000 +++ b/lisp/progmodes/make-mode.el Mon Dec 25 01:43:07 1995 +0000 @@ -1328,19 +1328,30 @@ ;;; Support for other packages, like add-log and imenu. (defun makefile-add-log-defun () - ;; "Return name of target or macro point is in, or nil." + "Return name of target or variable assignment that point is in. +If it isn't in one, return nil." (save-excursion - (beginning-of-line) - (cond - ((looking-at makefile-macroassign-regex) - (buffer-substring (match-beginning 1) - (match-end 1))) - ((progn - (or (eobp) (forward-char)) - (re-search-backward makefile-dependency-regex nil t)) - (buffer-substring (match-beginning 1) - (match-end 1))) - (t nil)))) + (let (found) + (beginning-of-line) + ;; Scan back line by line, noticing when we come to a + ;; variable or rule definition, and giving up when we see + ;; a line that is not part of either of those. + (while (not found) + (cond + ((looking-at makefile-macroassign-regex) + (setq found (buffer-substring-no-properties (match-beginning 1) + (match-end 1)))) + ((looking-at makefile-dependency-regex) + (setq found (buffer-substring-no-properties (match-beginning 1) + (match-end 1)))) + ;; Don't keep looking across a blank line or comment. Give up. + ((looking-at "$\\|#") + (setq found 'bobp)) + ((bobp) + (setq found 'bobp))) + (or found + (forward-line -1))) + (if (stringp found) found)))) ;; FIXME it might be nice to have them separated by macro vs target. (defun makefile-menu-index-function ()