[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
buffer-string considered as a Bad Thing.
From: |
Alan Mackenzie |
Subject: |
buffer-string considered as a Bad Thing. |
Date: |
Tue, 4 Jun 2024 19:05:22 +0000 |
Hello, Emacs.
In master (or any other non-prehistoric version of Emacs), buffer-string
gets misused. In particular, function attempting to "print to a string"
first print to a temporary buffer, then call buffer-string to get that
printed object into the string.
As an example, in pp, the function pp-to-string does this. To see the
effect, try
M-: (pp "foo \"bar\" baz")
.. This gets printed correctly to the temporary buffer *temp* as:
"foo \"bar\" baz" ;; (a 13 character string)
, but buffer-string wrongly converts those literal characters to
"foo \\\"bar\\\" baz" ;; (a 15 character string)
..
Printing to a temporary buffer then converting that to a string (without
reading it) appears to be a workaround for the Emacs core failing to
allow a string as a possibility for PRINTCHARFUN in functions like
prin1 and princ.
An ideal solution seems to be somehow allowing a string to be
PRINTCHARFUN for these functions. However print1 and friends don't
return values; instead they append to buffers or output to output
streams like stdout. Allowing a string output would be somewhat
awkward.
If this awkwardness rules out output to strings, we need better
machinery than buffer-string to get a correct string from a buffer. We
need to expose some more functionality from the reader to Lisp. With
that we could write a function for filter-buffer-substring-function and
thus correctly convert the temp buffer back to a string. Or something
like that.
Before I raise a bug report, what do people think about this?
--
Alan Mackenzie (Nuremberg, Germany).
- buffer-string considered as a Bad Thing.,
Alan Mackenzie <=