From: Martin Rudalics Date: Sun, 30 Dec 2018 14:47:16 +0000 (+0100) Subject: Handle 'unbound' like nil for 'window-point-insertion-type' (Bug#33871) X-Git-Tag: emacs-27.0.90~3900 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d82e73f08f8c12cfa144ff2e404a65e8bff1ab2e;p=emacs.git Handle 'unbound' like nil for 'window-point-insertion-type' (Bug#33871) * src/window.c (save_window_save): When setting the marker insertion type of saved window points treat a buffer local value of 'unbound' for 'window-point-insertion-type' like nil (Bug#33871). --- diff --git a/lisp/window.el b/lisp/window.el index 50aec86a427..4e72d343674 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -4278,7 +4278,7 @@ WINDOW must be a live window and defaults to the selected one." (list (copy-marker start) (copy-marker ;; Preserve window-point-insertion-type - ;; (Bug#12588). + ;; (Bug#12855). point window-point-insertion-type))))) (set-window-prev-buffers window (cons entry (window-prev-buffers window))))) @@ -6110,7 +6110,7 @@ element is BUFFER." (list 'other ;; A quadruple of WINDOW's buffer, start, point and height. (list (current-buffer) (window-start window) - ;; Preserve window-point-insertion-type (Bug#12588). + ;; Preserve window-point-insertion-type (Bug#12855). (copy-marker (window-point window) window-point-insertion-type) (if (window-combined-p window) diff --git a/src/window.c b/src/window.c index 14b3364477e..a69b115e4bb 100644 --- a/src/window.c +++ b/src/window.c @@ -6965,6 +6965,12 @@ save_window_save (Lisp_Object window, struct Lisp_Vector *vector, ptrdiff_t i) if (BUFFERP (w->contents)) { + Lisp_Object buffer_local_window_point_insertion_type + = (buffer_local_value (Qwindow_point_insertion_type, w->contents)); + bool window_point_insertion_type + = (!NILP (buffer_local_window_point_insertion_type) + && !EQ (buffer_local_window_point_insertion_type, Qunbound)); + /* Save w's value of point in the window configuration. If w is the selected window, then get the value of point from the buffer; pointm is garbage in the selected window. */ @@ -6975,12 +6981,8 @@ save_window_save (Lisp_Object window, struct Lisp_Vector *vector, ptrdiff_t i) else p->pointm = Fcopy_marker (w->pointm, Qnil); p->old_pointm = Fcopy_marker (w->old_pointm, Qnil); - XMARKER (p->pointm)->insertion_type - = !NILP (buffer_local_value /* Don't signal error if void. */ - (Qwindow_point_insertion_type, w->contents)); - XMARKER (p->old_pointm)->insertion_type - = !NILP (buffer_local_value /* Don't signal error if void. */ - (Qwindow_point_insertion_type, w->contents)); + XMARKER (p->pointm)->insertion_type = window_point_insertion_type; + XMARKER (p->old_pointm)->insertion_type = window_point_insertion_type; p->start = Fcopy_marker (w->start, Qnil); p->start_at_line_beg = w->start_at_line_beg ? Qt : Qnil;