changeset 17389:ab5d66b86b2c

(read_key_sequence): New argument FIX_CURRENT_BUFFER. Restore the current buffer from selected window on occasion. All callers changed.
author Richard M. Stallman <rms@gnu.org>
date Fri, 11 Apr 1997 08:21:38 +0000
parents 5c4602f0c45d
children e19bb906e8ef
files src/keyboard.c
diffstat 1 files changed, 16 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/keyboard.c	Fri Apr 11 06:35:54 1997 +0000
+++ b/src/keyboard.c	Fri Apr 11 08:21:38 1997 +0000
@@ -1183,7 +1183,7 @@
 
       /* Read next key sequence; i gets its length.  */
       i = read_key_sequence (keybuf, sizeof keybuf / sizeof keybuf[0],
-			     Qnil, 0, 1);
+			     Qnil, 0, 1, 1);
 
       /* A filter may have run while we were reading the input.  */
       if (XBUFFER (XWINDOW (selected_window)->buffer) != current_buffer)
@@ -5873,16 +5873,20 @@
 
    If the user switches frames in the midst of a key sequence, we put
    off the switch-frame event until later; the next call to
-   read_char will return it.  */
+   read_char will return it.
+
+   If FIX_CURRENT_BUFFER is nonzero, we restore current_buffer
+   from the selected window's buffer.  */
 
 static int
 read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
-		   can_return_switch_frame)
+		   can_return_switch_frame, fix_current_buffer)
      Lisp_Object *keybuf;
      int bufsize;
      Lisp_Object prompt;
      int dont_downcase_last;
      int can_return_switch_frame;
+     int fix_current_buffer;
 {
   int count = specpdl_ptr - specpdl;
 
@@ -6222,6 +6226,14 @@
 	  if (BUFFERP (key))
 	    {
 	      mock_input = t;
+	      /* Reset the current buffer from the selected window
+		 in case something changed the former and not the latter.
+		 This is to be more consistent with the behavior
+		 of the command_loop_1.  */
+	      if (fix_current_buffer)
+		if (XBUFFER (XWINDOW (selected_window)->buffer) != current_buffer)
+		  Fset_buffer (XWINDOW (selected_window)->buffer);
+
 	      orig_local_map = get_local_map (PT, current_buffer);
 	      goto replay_sequence;
 	    }
@@ -6942,7 +6954,7 @@
 
   i = read_key_sequence (keybuf, (sizeof keybuf/sizeof (keybuf[0])),
 			 prompt, ! NILP (dont_downcase_last),
-			 ! NILP (can_return_switch_frame));
+			 ! NILP (can_return_switch_frame), 0);
 
   if (i == -1)
     {