From: Alan Mackenzie <acm@muc.de>
To: emacs-devel@gnu.org
Subject: buffer-string considered as a Bad Thing.
Date: Tue, 4 Jun 2024 19:05:22 +0000 [thread overview]
Message-ID: <Zl9lcuxkwBDw3GvZ@ACM> (raw)
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).
next reply other threads:[~2024-06-04 19:05 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-04 19:05 Alan Mackenzie [this message]
2024-06-04 20:22 ` buffer-string considered as a Bad Thing Andreas Schwab
2024-06-04 20:51 ` Alan Mackenzie
2024-06-04 21:24 ` Andreas Schwab
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Zl9lcuxkwBDw3GvZ@ACM \
--to=acm@muc.de \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.