]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/window.c (Fset_window_configuration): Deactivate the mark before
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 24 Apr 2014 03:59:19 +0000 (23:59 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 24 Apr 2014 03:59:19 +0000 (23:59 -0400)
unsetting the mark.
(set_window_buffer): Ignore window_initialized.
(window_initialized): Remove.
* src/keyboard.c (Qdeactivate_mark): Not static any more.
* src/buffer.c (buffer_local_value): Rename from buffer_local_value_1.
Update all callers.

src/ChangeLog
src/buffer.c
src/buffer.h
src/keyboard.c
src/window.c
src/xdisp.c

index 1a4c29f258042861b8fef2cda4b6309844825ecf..654b9425770e2883ba16986fb6c931911466e256 100644 (file)
@@ -1,3 +1,13 @@
+2014-04-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * window.c (Fset_window_configuration): Deactivate the mark before
+       unsetting the mark.
+       (set_window_buffer): Ignore window_initialized.
+       (window_initialized): Remove.
+       * keyboard.c (Qdeactivate_mark): Not static any more.
+       * buffer.c (buffer_local_value): Rename from buffer_local_value_1.
+       Update all callers.
+
 2014-04-23  Paul Eggert  <eggert@cs.ucla.edu>
 
        * conf_post.h (ADDRESS_SANITIZER_WORKAROUND): Port to GCC 4.9.0
index 6a1a74ac1ec23263ac0e0a13d7f2c5beef51d3c3..e6968e88d017a1c25f31344be2c9df9959d15563 100644 (file)
@@ -1158,10 +1158,10 @@ DEFUN ("buffer-local-value", Fbuffer_local_value,
        Sbuffer_local_value, 2, 2, 0,
        doc: /* Return the value of VARIABLE in BUFFER.
 If VARIABLE does not have a buffer-local binding in BUFFER, the value
-is the default binding of the variable. */)
+is the default binding of the variable.  */)
   (register Lisp_Object variable, register Lisp_Object buffer)
 {
-  register Lisp_Object result = buffer_local_value_1 (variable, buffer);
+  register Lisp_Object result = buffer_local_value (variable, buffer);
 
   if (EQ (result, Qunbound))
     xsignal1 (Qvoid_variable, variable);
@@ -1174,7 +1174,7 @@ is the default binding of the variable. */)
    locally unbound.  */
 
 Lisp_Object
-buffer_local_value_1 (Lisp_Object variable, Lisp_Object buffer)
+buffer_local_value (Lisp_Object variable, Lisp_Object buffer)
 {
   register struct buffer *buf;
   register Lisp_Object result;
index de117eb9c61a15a9a42f1e5f5e86f9bd6b93cffd..5c1e1bb278c18cea16dde342b8bad7d9bdaf1c8c 100644 (file)
@@ -1079,7 +1079,7 @@ extern ptrdiff_t overlay_strings (ptrdiff_t, struct window *, unsigned char **);
 extern void validate_region (Lisp_Object *, Lisp_Object *);
 extern void set_buffer_internal_1 (struct buffer *);
 extern void set_buffer_temp (struct buffer *);
-extern Lisp_Object buffer_local_value_1 (Lisp_Object, Lisp_Object);
+extern Lisp_Object buffer_local_value (Lisp_Object, Lisp_Object);
 extern void record_buffer (Lisp_Object);
 extern void fix_overlays_before (struct buffer *, ptrdiff_t, ptrdiff_t);
 extern void mmap_set_vars (bool);
index 705e9191c61ebab8dc6182313c3234949f650acd..d52483e6a187fccab85400db1ba0c6c26e0dc6aa 100644 (file)
@@ -228,14 +228,14 @@ static Lisp_Object Qbackward_char;
 Lisp_Object Qundefined;
 static Lisp_Object Qtimer_event_handler;
 
-/* read_key_sequence stores here the command definition of the
+/* `read_key_sequence' stores here the command definition of the
    key sequence that it reads.  */
 static Lisp_Object read_key_sequence_cmd;
 static Lisp_Object read_key_sequence_remapped;
 
 static Lisp_Object Qinput_method_function;
 
-static Lisp_Object Qdeactivate_mark;
+Lisp_Object Qdeactivate_mark;
 
 Lisp_Object Qrecompute_lucid_menubar, Qactivate_menubar_hook;
 
index 8e8252d3b76534bcc88e5d7e50312ce0fe5dc9b6..ebcc41180f3562c32bcde9df2821b6e478f25b98 100644 (file)
@@ -119,9 +119,6 @@ static Lisp_Object Qtemp_buffer_show_hook;
 /* Incremented for each window created.  */
 static int sequence_number;
 
-/* Nonzero after init_window_once has finished.  */
-static int window_initialized;
-
 /* Hook to run when window config changes.  */
 static Lisp_Object Qwindow_configuration_change_hook;
 
@@ -3439,14 +3436,10 @@ set_window_buffer (Lisp_Object window, Lisp_Object buffer,
   wset_redisplay (w);
   w->update_mode_line = true;
 
-  /* We must select BUFFER for running the window-scroll-functions.  */
-  /* We can't check ! NILP (Vwindow_scroll_functions) here
-     because that might itself be a local variable.  */
-  if (window_initialized)
-    {
-      record_unwind_current_buffer ();
-      Fset_buffer (buffer);
-    }
+  /* We must select BUFFER to run the window-scroll-functions and to look up
+     the buffer-local value of Vwindow_point_insertion_type.  */
+  record_unwind_current_buffer ();
+  Fset_buffer (buffer);
 
   XMARKER (w->pointm)->insertion_type = !NILP (Vwindow_point_insertion_type);
 
@@ -6267,6 +6260,15 @@ the return value is nil.  Otherwise the value is t.  */)
              set_marker_restricted (w->start, p->start, w->contents);
              set_marker_restricted (w->pointm, p->pointm,
                                     w->contents);
+             if (MARKERP (p->mark) && !XMARKER (p->mark)->buffer
+                 && !NILP (BVAR (XBUFFER (w->contents), mark_active)))
+               {
+                 struct buffer *old = current_buffer;
+                 extern Lisp_Object Qdeactivate_mark;
+                 set_buffer_internal (XBUFFER (w->contents));
+                 call0 (Qdeactivate_mark);
+                 set_buffer_internal (old);
+               }
              Fset_marker (BVAR (XBUFFER (w->contents), mark),
                           p->mark, w->contents);
 
@@ -6619,7 +6621,7 @@ save_window_save (Lisp_Object window, struct Lisp_Vector *vector, int i)
          else
            p->pointm = Fcopy_marker (w->pointm, Qnil);
          XMARKER (p->pointm)->insertion_type
-           = !NILP (buffer_local_value_1 /* Don't signal error if void.  */
+           = !NILP (buffer_local_value /* Don't signal error if void.  */
                     (Qwindow_point_insertion_type, w->contents));
 
          p->start = Fcopy_marker (w->start, Qnil);
@@ -7138,8 +7140,6 @@ init_window_once (void)
   Vterminal_frame = selected_frame;
   minibuf_window = f->minibuffer_window;
   selected_window = f->selected_window;
-
-  window_initialized = 1;
 }
 
 void
index bb91d6f5e1f462a8262feafd13370d17b4298b16..6728a0275ea9ae316ffe5276fc850d1474618fea 100644 (file)
@@ -23422,7 +23422,7 @@ calc_pixel_width_or_height (double *res, struct it *it, Lisp_Object prop,
            return OK_PIXELS (WINDOW_SCROLL_BAR_AREA_WIDTH (it->w));
        }
 
-      prop = buffer_local_value_1 (prop, it->w->contents);
+      prop = buffer_local_value (prop, it->w->contents);
       if (EQ (prop, Qunbound))
        prop = Qnil;
     }
@@ -23474,7 +23474,7 @@ calc_pixel_width_or_height (double *res, struct it *it, Lisp_Object prop,
              return OK_PIXELS (pixels);
            }
 
-         car = buffer_local_value_1 (car, it->w->contents);
+         car = buffer_local_value (car, it->w->contents);
          if (EQ (car, Qunbound))
            car = Qnil;
        }
@@ -28543,8 +28543,8 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y,
          else if (area == ON_MODE_LINE)
            {
              Lisp_Object default_help
-               = buffer_local_value_1 (Qmode_line_default_help_echo,
-                                       w->contents);
+               = buffer_local_value (Qmode_line_default_help_echo,
+                                     w->contents);
 
              if (STRINGP (default_help))
                {