From 8917710efd63f7a253aec77fa190d6c5ec870bf3 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 23 Apr 2014 23:59:19 -0400 Subject: [PATCH] * src/window.c (Fset_window_configuration): Deactivate the mark before 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 | 10 ++++++++++ src/buffer.c | 6 +++--- src/buffer.h | 2 +- src/keyboard.c | 4 ++-- src/window.c | 28 ++++++++++++++-------------- src/xdisp.c | 8 ++++---- 6 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 1a4c29f258..654b942577 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2014-04-24 Stefan Monnier + + * 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 * conf_post.h (ADDRESS_SANITIZER_WORKAROUND): Port to GCC 4.9.0 diff --git a/src/buffer.c b/src/buffer.c index 6a1a74ac1e..e6968e88d0 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -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; diff --git a/src/buffer.h b/src/buffer.h index de117eb9c6..5c1e1bb278 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -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); diff --git a/src/keyboard.c b/src/keyboard.c index 705e9191c6..d52483e6a1 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -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; diff --git a/src/window.c b/src/window.c index 8e8252d3b7..ebcc41180f 100644 --- a/src/window.c +++ b/src/window.c @@ -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 diff --git a/src/xdisp.c b/src/xdisp.c index bb91d6f5e1..6728a0275e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -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)) { -- 2.20.1