Subject: Re: bug#21201: 25.0.50; (buffer-modified-p) errors inside cl-letf

From: Noam Postavsky <[email-masked]>
Date: Tue, 17 Jul 2018 08:16:09 -0400

tags 21201 + patch
quit

Nicolas Richard <[email-masked]> writes:

> Artur Malabarba <[email-masked]> writes:
>> 2015-08-06 21:07 GMT+01:00 Nicolas Richard <[email-masked]>:
>>>  (gv-define-setter buffer-modified-p (flag &optional buf)
>>> -  `(with-current-buffer ,buf
>>> -     (set-buffer-modified-p ,flag)))
>>> +  (if buf
>>> +      `(with-current-buffer ,buf
>>> +         (set-buffer-modified-p ,flag))
>>> +    `(set-buffer-modified-p ,flag)))
>>
>> Don't know if it's possible, but shouldn't it try to ensure that it's
>> in the same buffer as before?
>
> I agree with you, but I don't know how to do that.

This seems to work.

>From 1481f8893ff04a83b578f403cd22c7bdd2ec65f0 Mon Sep 17 00:00:00 2001
From: Noam Postavsky <[email-masked]>
Date: Mon, 16 Jul 2018 22:14:32 -0400
Subject: [PATCH] Allow setf of buffer-modified-p without argument (Bug#21201)

* lisp/emacs-lisp/cl-lib.el (setf buffer-modified-p): Take current
buffer if optional argument BUF is not passed.
---
 lisp/emacs-lisp/cl-lib.el | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el
index 381784d1fd..ba5f9d64a1 100644
--- a/lisp/emacs-lisp/cl-lib.el
+++ b/lisp/emacs-lisp/cl-lib.el
@@ -521,8 +521,9 @@ cl-pairlis
 ;; Some more Emacs-related place types.
 (gv-define-simple-setter buffer-file-name set-visited-file-name t)
 (gv-define-setter buffer-modified-p (flag &optional buf)
-  `(with-current-buffer ,buf
-     (set-buffer-modified-p ,flag)))
+  (macroexp-let2 nil buffer `(or ,buf (current-buffer))
+    `(with-current-buffer ,buffer
+       (set-buffer-modified-p ,flag))))
 (gv-define-simple-setter buffer-name rename-buffer t)
 (gv-define-setter buffer-string (store)
   `(insert (prog1 ,store (erase-buffer))))
-- 
2.11.0