GNU bug report logs -
#20707
[PROPOSED PATCH] Use curved quoting in C-generated errors
Previous Next
Reported by: Paul Eggert <eggert <at> cs.ucla.edu>
Date: Mon, 1 Jun 2015 07:41:05 UTC
Severity: wishlist
Tags: patch
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
Alan Mackenzie wrote:
> a typical use of Q would look like this:
>
> error ("Buffer name " Q(%s) " is in use", SDATA (name));
I'm afraid that's not sufficient, as sometimes we have code like this:
insert_string ("\nUses keymap `");
with unbalanced quotes. We can fix this by using another macro, uLSQM in the
originally proposed patch:
insert_string ("\nUses keymap "uLSQM);
though this is starting to get ugly.
The more serious problem, though is that neither approach will work well in the
Elisp code, which is where the vast majority of these quotes live. It would be
quite painful to change this:
(format "Parsing `%s': expected %s `%s', got `%s'." a b c d)
to this:
(format (concat "Parsing " (q "%s") ": expected %s " (q "%s")
", got " (q "%s") ".")
a b c)
I considered changing 'format' so that it automatically curves quotes in the
format string. But that would mishandle common cases like this:
(format "\\`%s" path-separator)
where 'format' is being used to compose a regular expression containing '\`'.
More reasonable would be to add a new function, 'format-message', that behaves
like 'format' except it also curves quotes, and to change functions like
'message' and 'error' to use 'format-message' instead of plain 'format'. But
even here we have lots of examples like this:
(y-or-n-p (format "File `%s' exists; overwrite? " filename))
where we'd have to change 'format' to 'format-message'.
We could go the GCC route and add a new format flag 'q', so that the above
examples could be written like this:
(format "Parsing %qs: expected %s %qs, got %qs." a b c d)
(y-or-n-p (format "File %qs exists; overwrite? " filename))
This approach would make sense if 8-bit environments were still common, as they
were when GCC added the 'q' flag to its message formatter. However, nowadays
8-bit environments are obsolescent (sorry) and so this approach seems like
overkill now. If we are bothering to go through code to fix quotes, it's better
to change the above examples to:
(format "Parsing ‘%s’: expected %s ‘%s’, got ‘%s’." a b c d)
(y-or-n-p (format "File ‘%s’ exists; overwrite? " filename))
for two reasons. First, unlike %qs the resulting code will work on older Emacs
implementations and thus will make the code more backward-compatible. Second,
it's easier to read and maintain quote marks that you can see.
This bug report was last modified 4 years and 361 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.