Subject: bug#71370: 30.0.50; Please un-obsolete buffer-substring as a generalized variable

From: Stefan Kangas <[email-masked]>
Date: Sun, 23 Mar 2025 14:33:48 +0000

Eli Zaretskii <[email-masked]> writes:

>> Cc: [email-masked], Ihor Radchenko <[email-masked]>,
>>  Stefan Monnier <[email-masked]>, Adam Porter <[email-masked]>,
>>  Andrea Corallo <[email-masked]>, Sean Whitton <[email-masked]>
>> From: Stefan Kangas <[email-masked]>
>> Date: Sun, 23 Mar 2025 12:48:26 +0000
>>
>> Stefan Kangas <[email-masked]> writes:
>>
>> > Michael Heerdegen <[email-masked]> writes:
>> >
>> >> Stefan Kangas <[email-masked]> writes:
>> >>
>> >>> If not, I think what Sean writes above is the way to go.
>> >>
>> >> What about what I said and Sean agreed to?  Did you read my replies?
>> >
>> > Yes, if you mean this part:
>> >
>> >         Please let's keep those two separate questions separate: (1) is a
>> >         certain functionality useful, and (2) if it is, should it be provided,
>> >         maybe even only, as a gv setter function.
>> >
>> > As for `buffer-substring`, if we can't have a function that provides
>> > that functionality (the proposed `replace-region`), then (setf
>> > (buffer-substring ...) ...) is clearly _not_ obsolete and shouldn't be
>> > marked as such.
>> >
>> > As for `buffer-string`, I don't know any proposed replacement function,
>> > so I think it's not obsolete on these grounds too.  FWIW, I don't see a
>> > huge need for a replacement function, and I think a generalized variable
>> > is perfectly serviceable in that case.
>>
>> It seems like we can't find agreement on a way forward for adding
>> `replace-region` in Bug#76313, or even on which functions to obsolete
>> or how.
>
> That is not a necessary condition for making buffer-substring a
> generalized variable.  We could have an internal function, maybe not
> even exposed to Lisp, to replace the buffer substring.  That will not
> solve the more general replace-region dispute, but no one said we must
> always kill all the birds in one blow.

I'm not sure we need to do that much, at least not immediately.

The change I propose to make is just this:

diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el
index b44f7dc87f3..380631d9ac6 100644
--- a/lisp/emacs-lisp/gv.el
+++ b/lisp/emacs-lisp/gv.el
@@ -682,10 +682,8 @@ buffer-name

 (gv-define-setter buffer-string (store)
   `(insert (prog1 ,store (erase-buffer))))
-(make-obsolete-generalized-variable 'buffer-string nil "29.1")

 (gv-define-simple-setter buffer-substring cl--set-buffer-substring)
-(make-obsolete-generalized-variable 'buffer-substring nil "29.1")

 (gv-define-simple-setter current-buffer set-buffer)
 (make-obsolete-generalized-variable 'current-buffer 'set-buffer "29.1")