GNU bug report logs - #24739
25.1; conf-mode can't handle non escaped single quotes

Previous Next

Package: emacs;

Reported by: Diego Berrocal <cestdiego <at> gmail.com>

Date: Wed, 19 Oct 2016 16:39:02 UTC

Severity: minor

Tags: confirmed

Found in version 25.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

Full log


Message #19 received at 24739 <at> debbugs.gnu.org (full text, mbox):

From: "Michalis V." <mvar.40k <at> gmail.com>
To: Diego Berrocal <cestdiego <at> gmail.com>
Cc: Lars Ingebrigtsen <larsi <at> gnus.org>, Noam Postavsky <npostavs <at> gmail.com>,
 24739 <at> debbugs.gnu.org
Subject: Re: bug#24739: 25.1; conf-mode can't handle non escaped single quotes
Date: Sat, 21 Aug 2021 18:39:04 +0300
Lars Ingebrigtsen <larsi <at> gnus.org> writes:

> Noam Postavsky <npostavs <at> gmail.com> writes:
>
>> Lars Ingebrigtsen <larsi <at> gnus.org> writes:
>>
>>>> firstProperty=Hi I'm Diego
>>>> secondProperty=I have a stringquote style.
>>
>>> No font-lock-string-face in sight, and there's no mention of it in the
>>> file.  So is this some general font-lock thing that's configured
>>> somewhere else?  Anybody know how this stuff works?
>>
>> font-lock-string-face comes from font-lock-syntactic-face-function,
>> because ' has string delimiter syntax in conf-mode (see
>> conf-mode-syntax-table).
>
> Hm...  Oh!
>
>     (modify-syntax-entry ?\' "\"" table)
>
> I was searching for ?' and only found the entry in
> conf-toml-mode-syntax-table.  I'll remove that superfluous backslash.
>
>> I think it should be possible to make a syntax-propertize rule that
>> catches unmatched quotes and sets them to punctuation syntax.  We do
>> something similar in sgml-syntax-propertize.
>
> I see.

hi,

this conf-mode doesn't seem to follow the syntax-propertize structure so
it doesn't look very trivial to do something similar as in sgml mode
(at least as far as i managed to grasp the concept in there)..But the
conf-mode author(s) seem like they were aware of this font-locking
problem and had this workaround instead:

(defun conf-quote-normal (arg)
  "Set the syntax of \\=' and \" to punctuation.
With prefix ARG, only do it for \\=' if 1, or only for \" if 2.
This only affects the current buffer.  Some conf files use quotes
to delimit strings, while others allow quotes as simple parts of
the assigned value.  In those files font locking will be wrong,
and you can correct it with this command.  (Some files even do
both, i.e. quotes delimit strings, except when they are
unbalanced, but hey...)"
  (interactive "P")
  (let ((table (copy-syntax-table (syntax-table))))
    (when (or (not arg) (= (prefix-numeric-value arg) 1))
      (modify-syntax-entry ?\' "." table))
    (when (or (not arg) (= (prefix-numeric-value arg) 2))
      (modify-syntax-entry ?\" "." table))
    (set-syntax-table table)
    (font-lock-flush)))


which is bound to C-c C-q and it will temporarily fix the incorrect string
font-locking.. Any chance if it is sufficient for you Diego or do you think
a more permanent solution should be implemented instead?

thank you in advance,
Michalis




This bug report was last modified 3 years and 269 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.