]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle 'unbound' like nil for 'window-point-insertion-type' (Bug#33871)
authorMartin Rudalics <rudalics@gmx.at>
Sun, 30 Dec 2018 14:47:16 +0000 (15:47 +0100)
committerMartin Rudalics <rudalics@gmx.at>
Sun, 30 Dec 2018 14:47:16 +0000 (15:47 +0100)
* 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).

lisp/window.el
src/window.c

index 50aec86a4277252a0190a7a780ee7175b0a5a0a5..4e72d343674b8d4ad35e990bf7a19f5429b7a58a 100644 (file)
@@ -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)
index 14b3364477e5e3ac639c5b80af02a6bf14b2487a..a69b115e4bb122abc18c49f681e95f12ab4cd06d 100644 (file)
@@ -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;