Subject: bug#59575: closed (Re: bug#59575: 29.0.50; add-log-current-defun-header-regexp matches Windows drive letter)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 27 Nov 2022 14:04:02 +0000

Your bug report

#59575: 29.0.50; add-log-current-defun-header-regexp matches Windows drive letter

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
59575: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=59575
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#59575: 29.0.50; add-log-current-defun-header-regexp matches Windows drive letter
From: Juanma Barranquero <[email-masked]>
To: Dmitry Gutov <[email-masked]>
Cc: Eli Zaretskii <[email-masked]>, [email-masked]
Date: Sun, 27 Nov 2022 15:02:42 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Fixed in commit 31cfd6d311 of 2022-11-27
Fix xref interaction with which-func (bug#59575)

Subject: 29.0.50; add-log-current-defun-header-regexp matches Windows drive letter
From: Juanma Barranquero <[email-masked]>
To: Bug-Gnu-Emacs <[email-masked]>
Date: Fri, 25 Nov 2022 16:53:51 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

If you have an *xref* buffer with absolute Windows filenames, like

~/.emacs.d/init.el
  93:             server-name    (replace-regexp-in-string "\\\\+" "\\"
serv t t)
1102:   (let ((s (when server-name
1104:                (string-match (rx (+ (not (any ?\\))) line-end)
server-name)
1105:                (upcase (match-string 0 server-name))))))
d:/Devel/emacs/repo/trunk/lisp/erc/erc-backend.el
1820:   (pcase-let ((`(,server-name ,server-version)
1823:     (setq erc-server-announced-name server-name)
1827:      's004 ?s server-name ?v server-version

and put the cursor in an absolute filename line (like the one
d:/Devel/[etc] above), calling `add-log-current-defun' returns the drive
letter "d", because it matches a-l-c-d-header-regexp.

The effect is visible when you have which-function-mode enabled, because
the function returns non-nil, so which-function does not resort to imenu,
and you end with "d" in the mode-line.

I suppose this should be fixed in xref.el, which apparently assumes that
file name lines will be either relative or Unix-style (/path/file works
correctly, it's just d:/path/file that fails) and the add-log heuristics
will always fail.