From 89f54e81576d9d9e35b67e7c5831495c4bb444c5 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 16 Dec 2022 16:29:51 +0200 Subject: A better fix for bug#60096 * lisp/startup.el (initial-scratch-message): * lisp/simple.el (get-scratch-buffer-create): Revert last changes. * src/window.c (Fset_window_configuration): Force recalculation of Vwindow_list after restoring the windows. * src/buffer.c (other_buffer_safely): Make sure we always return a valid buffer, even if 'get-scratch-buffer-create' signals an error. --- src/buffer.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src/buffer.c') diff --git a/src/buffer.c b/src/buffer.c index 9a30faa0e1a..443f90ff894 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1747,7 +1747,18 @@ other_buffer_safely (Lisp_Object buffer) if (candidate_buffer (buf, buffer)) return buf; - return safe_call (1, Qget_scratch_buffer_create); + /* This function must return a valid buffer, since it is frequently + our last line of defense in the face of the expected buffers + becoming dead under our feet. safe_call below could return nil + if recreating *scratch* in Lisp, which does some fancy stuff, + signals an error in some weird use case. */ + buf = safe_call (1, Qget_scratch_buffer_create); + if (NILP (buf)) + { + AUTO_STRING (scratch, "*scratch*"); + buf = Fget_buffer_create (scratch, Qnil); + } + return buf; } DEFUN ("buffer-enable-undo", Fbuffer_enable_undo, Sbuffer_enable_undo, -- cgit v1.2.3