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…
:) /\


Hi, That’s a surprising issue, especially if the scratch buffer is the only text buffer in which the
undodoesn’t work. Here is what I’m thinking right now:C-x C-q.C-h k C-/(for example, for checkingC-/).undofunction directly withM-x undoto see if you can get some meaningful error messages.I confirmed with both my personal config that uses
undo-tree(great tool btw) and also in a default configuration of Emacs; both cases work fine toundoin scratch.Hope any of that can help!
Cheers
Hello Sunoc.
read-only, but it always start as so.undo, emacs says “no undo information in this buffer” (searching for this didn’t seem to give relevant information except something from 2006 and then something about specific of a table-spreadsheet that I don’t use).From this and @ouigol@beehaw.org (I will relpy after this one) it looks that it may be my configuration, since I’m using vanilla emacs with my own configuration.
Anyway, thanks a lot for your time! :)
After checking the source, it looks like this error is triggered when the
buffer-undo-listvariable is equal tot, which means the buffer is unmodified, or at least that this variable is not modified from thescratchbuffer.There is something else in the documentation of this variable: <If the value of the variable is t, undo information is not recorded.> Maybe you can try to fix your issue by forcing the
buffer-undo-listvariable tonilfor 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…:
(setq initial-major-mode 'org-mode) (setq-default major-mode 'org-mode)(setq-default major-mode 'org-mode)was(setq default-major-mode 'org-mode). Both expressions seems indistinguishable in the resulted behavior.org-roammode (andread-onlymode), 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?
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-modeshould be kept aslisp-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-modeagain. The additional hook I provided in my previous post shouldn’t be needed either.