this post was submitted on 16 Jul 2023
5 points (85.7% liked)

Emacs

2256 readers
1 users here now

Our infinitely powerful editor.

founded 5 years ago
MODERATORS
 

Dear fellow emacsers.

How can we make undo work on the scratch buffer? I'm sure it is a simple configuration issue, but I'm not getting the appropriate keyword to find the relevant documentation.

Thanks a lot in advance for your help and attention...
:) /\

you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 1 points 1 year ago (1 children)

Maybe you can try to fix your issue by forcing the buffer-undo-list variable to nil for the elisp mode, as follow: (add-hook 'elisp-mode (lambda () (setq-local buffer-undo-list nil)))

I tried it but still no joy...

Looking at this issue I noticed 3 things that may help to pinpoint the origin...:

  • I have 2 variables set that affect the scratch buffer in my config (without yours, that it's the 3rd):
                  (setq initial-major-mode 'org-mode)
                  (setq-default major-mode 'org-mode)
  • Before this reply, (setq-default major-mode 'org-mode) was (setq default-major-mode 'org-mode). Both expressions seems indistinguishable in the resulted behavior.
  • The scratch buffer starts in org-roam mode (and read-only mode), which is very strange, but can obviously be related and/or part of the problem. The org-roam section (my config is literate in org-mode) comes before this variables being set.

What does this info may imply?

[โ€“] [email protected] 1 points 1 year ago

Okay, I could reproduce your situation by evaluating

(setq initial-major-mode 'org-mode)
(setq-default major-mode 'org-mode)

This setup forces the scratch buffer to be in org-mode, apparently breaking most of the available keybindings for it, including the undo.

The value for the initial-major-mode should be kept as lisp-interaction-mode, if your configuration requires to set it.

Otherwise I would remove both of these lines all together and see if the default behavior brings back the scratch buffer to be in the expected lisp-interaction-mode again. The additional hook I provided in my previous post shouldn't be needed either.