Hi all - Assuming no objections, I'll apply the patch below to master later this week. Alex On Thu 10 Jan 2019 at 13:55, Alex Branham wrote: > Hi - > > I guess this fell through the cracks with the holidays. Would someone > mind following up with either comments or applying this patch? > > Thanks, > Alex > > On Wed 19 Dec 2018 at 09:42, Alex Branham wrote: > >> Hello - >> >> The following patch fixes `which-function' returning outdated imenu >> information by: >> >> 1. Preferring `add-log-current-defun' over `imenu--index-alist' and >> >> 2. Updating `imenu--index-alist' more aggressively if we fall back to >> it. >> >> Thanks, >> Alex >> >> From a06b1318f23b3f67ed0e1041f50ccea67d46ea48 Mon Sep 17 00:00:00 2001 >> From: Alex Branham >> Date: Tue, 11 Dec 2018 08:29:50 -0600 >> Subject: [PATCH] which-function: Do not display outdated imenu information >> >> * lisp/progmodes/which-func.el (which-function): Check >> `add-log-current-defun' before imenu. Update `imenu--index-alist' if >> needed. Bug #33695 >> --- >> lisp/progmodes/which-func.el | 17 +++++++++-------- >> 1 file changed, 9 insertions(+), 8 deletions(-) >> >> diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el >> index 7604be0c25..7cc75e0edb 100644 >> --- a/lisp/progmodes/which-func.el >> +++ b/lisp/progmodes/which-func.el >> @@ -272,16 +272,21 @@ which-func-functions >> >> (defun which-function () >> "Return current function name based on point. >> -Uses `which-func-functions', `imenu--index-alist' >> -or `add-log-current-defun'. >> +Uses `which-func-functions', `add-log-current-defun'. >> +or `imenu--index-alist' >> If no function name is found, return nil." >> (let ((name >> ;; Try the `which-func-functions' functions first. >> (run-hook-with-args-until-success 'which-func-functions))) >> - >> + ;; Try using add-log support. >> + (when (null name) >> + (setq name (add-log-current-defun))) >> ;; If Imenu is loaded, try to make an index alist with it. >> (when (and (null name) >> - (boundp 'imenu--index-alist) (null imenu--index-alist) >> + (boundp 'imenu--index-alist) >> + (or (null imenu--index-alist) >> + ;; Update if outdated >> + (/= (buffer-chars-modified-tick) imenu-menubar-modified-tick)) >> (null which-function-imenu-failed)) >> (ignore-errors (imenu--make-index-alist t)) >> (unless imenu--index-alist >> @@ -323,10 +328,6 @@ which-function >> (funcall >> which-func-imenu-joiner-function >> (reverse (cons (car pair) namestack)))))))))))) >> - >> - ;; Try using add-log support. >> - (when (null name) >> - (setq name (add-log-current-defun))) >> ;; Filter the name if requested. >> (when name >> (if which-func-cleanup-function >> -- >> 2.19.2 >> >> >> >> From a06b1318f23b3f67ed0e1041f50ccea67d46ea48 Mon Sep 17 00:00:00 2001 >> From: Alex Branham >> Date: Tue, 11 Dec 2018 08:29:50 -0600 >> Subject: [PATCH] which-function: Do not display outdated imenu information >> >> * lisp/progmodes/which-func.el (which-function): Check >> `add-log-current-defun' before imenu. Update `imenu--index-alist' if >> needed. Bug #33695 >> --- >> lisp/progmodes/which-func.el | 17 +++++++++-------- >> 1 file changed, 9 insertions(+), 8 deletions(-) >> >> diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el >> index 7604be0c25..7cc75e0edb 100644 >> --- a/lisp/progmodes/which-func.el >> +++ b/lisp/progmodes/which-func.el >> @@ -272,16 +272,21 @@ which-func-functions >> >> (defun which-function () >> "Return current function name based on point. >> -Uses `which-func-functions', `imenu--index-alist' >> -or `add-log-current-defun'. >> +Uses `which-func-functions', `add-log-current-defun'. >> +or `imenu--index-alist' >> If no function name is found, return nil." >> (let ((name >> ;; Try the `which-func-functions' functions first. >> (run-hook-with-args-until-success 'which-func-functions))) >> - >> + ;; Try using add-log support. >> + (when (null name) >> + (setq name (add-log-current-defun))) >> ;; If Imenu is loaded, try to make an index alist with it. >> (when (and (null name) >> - (boundp 'imenu--index-alist) (null imenu--index-alist) >> + (boundp 'imenu--index-alist) >> + (or (null imenu--index-alist) >> + ;; Update if outdated >> + (/= (buffer-chars-modified-tick) imenu-menubar-modified-tick)) >> (null which-function-imenu-failed)) >> (ignore-errors (imenu--make-index-alist t)) >> (unless imenu--index-alist >> @@ -323,10 +328,6 @@ which-function >> (funcall >> which-func-imenu-joiner-function >> (reverse (cons (car pair) namestack)))))))))))) >> - >> - ;; Try using add-log support. >> - (when (null name) >> - (setq name (add-log-current-defun))) >> ;; Filter the name if requested. >> (when name >> (if which-func-cleanup-function > > From a06b1318f23b3f67ed0e1041f50ccea67d46ea48 Mon Sep 17 00:00:00 2001 > From: Alex Branham > Date: Tue, 11 Dec 2018 08:29:50 -0600 > Subject: [PATCH] which-function: Do not display outdated imenu information > > * lisp/progmodes/which-func.el (which-function): Check > `add-log-current-defun' before imenu. Update `imenu--index-alist' if > needed. Bug #33695 > --- > lisp/progmodes/which-func.el | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el > index 7604be0c25..7cc75e0edb 100644 > --- a/lisp/progmodes/which-func.el > +++ b/lisp/progmodes/which-func.el > @@ -272,16 +272,21 @@ which-func-functions > > (defun which-function () > "Return current function name based on point. > -Uses `which-func-functions', `imenu--index-alist' > -or `add-log-current-defun'. > +Uses `which-func-functions', `add-log-current-defun'. > +or `imenu--index-alist' > If no function name is found, return nil." > (let ((name > ;; Try the `which-func-functions' functions first. > (run-hook-with-args-until-success 'which-func-functions))) > - > + ;; Try using add-log support. > + (when (null name) > + (setq name (add-log-current-defun))) > ;; If Imenu is loaded, try to make an index alist with it. > (when (and (null name) > - (boundp 'imenu--index-alist) (null imenu--index-alist) > + (boundp 'imenu--index-alist) > + (or (null imenu--index-alist) > + ;; Update if outdated > + (/= (buffer-chars-modified-tick) imenu-menubar-modified-tick)) > (null which-function-imenu-failed)) > (ignore-errors (imenu--make-index-alist t)) > (unless imenu--index-alist > @@ -323,10 +328,6 @@ which-function > (funcall > which-func-imenu-joiner-function > (reverse (cons (car pair) namestack)))))))))))) > - > - ;; Try using add-log support. > - (when (null name) > - (setq name (add-log-current-defun))) > ;; Filter the name if requested. > (when name > (if which-func-cleanup-function