GNU bug report logs -
#74307
30.0.92; emacs-lisp font-locking word regexp
Previous Next
Reported by: Roland Winkler <winkler <at> gnu.org>
Date: Mon, 11 Nov 2024 06:30:02 UTC
Severity: normal
Merged with 74308
Found in version 30.0.92
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #32 received at 74307 <at> debbugs.gnu.org (full text, mbox):
> From: Juri Linkov <juri <at> linkov.net>
> Cc: Roland Winkler <winkler <at> gnu.org>, Stefan Monnier
> <monnier <at> iro.umontreal.ca>, 74307 <at> debbugs.gnu.org
> Date: Thu, 05 Dec 2024 09:20:16 +0200
>
> >> (setq foo "\\<foo\\>")
> >>
> >> The part "foo\\" of the string "\\<foo\\>" will get
> >> font-lock-variable-name-face, which looks odd.
> >>
> >> I believe, this is due to a clause in lisp-mode.el that says
> >>
> >> ;; Words inside \\[], \\<>, \\{} or \\`' tend to be for
> >> ;; `substitute-command-keys'.
> >>
> >> But this assumption is not always correct, in particular if ">" is
> >> preceded by "\\", which happens when constructing regexps.
> >
> > I believe you are saying that in
> >
> > (,(rx "\\\\" (or (seq "<" (group-n 1 lisp-mode-symbol) ">")
> > (seq "{" (group-n 1 lisp-mode-symbol) "}")))
> > (1 font-lock-variable-name-face prepend))
> >
> > we should use something like the below instead?
> >
> > (,(rx "\\\\" (or (seq "<" (group-n 1 lisp-mode-symbol) (not "\\\\") ">")
> > (seq "{" (group-n 1 lisp-mode-symbol) (not "\\\\") "}"))
>
> The problem is that this removes highlighting from the last character
> because it doesn't get into the group:
>
> (rx (seq "[" (group-n 1 lisp-mode-symbol) (not "\\") "]"))
> => "\\[\\(?1:\\(?:\\w\\|\\s_\\|\\\\.\\)+\\)[^\\]]"
>
> A possible solution is to move (not "\\") inside the group:
>
> (rx (seq "[" (group-n 1 (seq lisp-mode-symbol (not "\\"))) "]"))
> => "\\[\\(?1:\\(?:\\w\\|\\s_\\|\\\\.\\)+[^\\]\\)]"
>
> But this removes highlighting completely from the reported case of
> (setq foo "\\<foo\\>"). However, I guess it should not have highlighting
> anyway because this is an incorrect syntax of `substitute-command-keys'
> that should match only \\[], \\<>, \\{} or \\`' without the second \\
Sorry, I don't understand: the change which was supposed to fix this
was already installed. If you are saying it caused regressions, could
you please show a recipe for reproducing those regressions?
This bug report was last modified 262 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.