[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: master f2d2fe6fc8: server-execute: Initialize the *scratch* buffer
From: |
Stefan Monnier |
Subject: |
Re: master f2d2fe6fc8: server-execute: Initialize the *scratch* buffer |
Date: |
Mon, 09 May 2022 14:11:14 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) |
> Here's an updated patch.
LGTM, thank you (feel free to push, as far as I'm concerned).
See further comments below.
Stefan
> +** Functions which recreate the *scratch* buffer now also initialize it.
> +When functions like 'other-buffer' and 'server-execute' recreate
> +*scratch*, they now also insert 'initial-scratch-message' and change
> +the major mode according to 'initial-major-mode', like at Emacs
> +startup. Previously, these functions ignored
> +'initial-scratch-message' and left *scratch* in 'fundamental-mode'.
I'd say "set the major mode" rather than "change the major mode".
> +(defun get-initial-buffer-create ()
I know you didn't like my `scratch-buffer--create` suggestion because of
the double dash, but I think at least "scratch" would be very welcome in it.
> + "Return the \*scratch\* buffer, creating a new one if needed."
> + (or (get-buffer "*scratch*")
> + (let ((scratch (get-buffer-create "*scratch*")))
> + ;; Don't touch the buffer contents or mode unless we know that
> + ;; we just created it.
> + (with-current-buffer scratch
> + (when initial-scratch-message
> + (insert (substitute-command-keys initial-scratch-message))
> + (set-buffer-modified-p nil))
> + (funcall initial-major-mode))
> + scratch)))
> +
> (defun scratch-buffer ()
> "Switch to the \*scratch\* buffer.
> If the buffer doesn't exist, create it first."
> (interactive)
> - (if (get-buffer "*scratch*")
> - (pop-to-buffer-same-window "*scratch*")
> - (pop-to-buffer-same-window (get-buffer-create "*scratch*"))
> - (when initial-scratch-message
> - (insert initial-scratch-message))
> - (funcall initial-major-mode)))
> + (pop-to-buffer-same-window (get-initial-buffer-create)))
Now that I look at it again, it occurs to me that maybe we should do
something like:
(defun scratch-buffer (&optional display)
"Create the \*scratch\* buffer.
If the buffer doesn't exist, create it first.
If DISPLAY (or when used interactively), switch to it."
(interactive (list t))
(let ((buf (get-buffer "*scratch*")))
(unless buf
;; Don't touch the buffer contents or mode unless we know that
;; we just created it.
(with-current-buffer (setq buf (get-buffer-create "*scratch*"))
(when initial-scratch-message
(insert (substitute-command-keys initial-scratch-message))
(set-buffer-modified-p nil))
(funcall initial-major-mode)))
(when display (pop-to-buffer-same-window buf))
buf))
i.e. combine the new function with the existing command, so we don't
need to come up with a new name.
- Re: master f2d2fe6fc8: server-execute: Initialize the *scratch* buffer, (continued)
- Re: master f2d2fe6fc8: server-execute: Initialize the *scratch* buffer, Sean Whitton, 2022/05/07
- Re: master f2d2fe6fc8: server-execute: Initialize the *scratch* buffer, Eli Zaretskii, 2022/05/07
- Re: master f2d2fe6fc8: server-execute: Initialize the *scratch* buffer, Sean Whitton, 2022/05/07
- Re: master f2d2fe6fc8: server-execute: Initialize the *scratch* buffer, Juri Linkov, 2022/05/06
- Re: master f2d2fe6fc8: server-execute: Initialize the *scratch* buffer, Sean Whitton, 2022/05/06
- Re: master f2d2fe6fc8: server-execute: Initialize the *scratch* buffer, Sean Whitton, 2022/05/07
- Re: master f2d2fe6fc8: server-execute: Initialize the *scratch* buffer,
Stefan Monnier <=
- Re: master f2d2fe6fc8: server-execute: Initialize the *scratch* buffer, Sean Whitton, 2022/05/09