changeset 83315:13371344a3ba

Make function-key-map a terminal-local variable (move it inside the kboard struct). * src/keyboard.h (kboard): Move Vfunction_key_map inside the kboard struct. * src/keyboard.c (Vfunction_key_map): Remove declaration. (read_key_sequence, init_kboard): Update references to Vfunction_key_map. (syms_of_keyboard): Declare function-key-map as a terminal-local variable. (mark_kboards): Mark Vfunction_key_map. * src/keymap.c (Vfunction_key_map): Remove. (Fdescribe_buffer_bindings): Update references to Vfunction_key_map. (syms_of_keymap): Remove DEFVAR for Vfunction_key_map. * src/term.c (term_get_fkeys_1): Update references to Vfunction_key_map. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-355
author Karoly Lorentey <lorentey@elte.hu>
date Sat, 25 Jun 2005 16:34:30 +0000
parents d07fdd5d7d4e
children 102194c6d773
files src/keyboard.c src/keyboard.h src/keymap.c src/term.c
diffstat 4 files changed, 40 insertions(+), 44 deletions(-) [+]
line wrap: on
line diff
--- a/src/keyboard.c	Sat Jun 25 15:00:08 2005 +0000
+++ b/src/keyboard.c	Sat Jun 25 16:34:30 2005 +0000
@@ -417,9 +417,6 @@
 /* User-supplied table to translate input characters.  */
 Lisp_Object Vkeyboard_translate_table;
 
-/* Keymap mapping ASCII function key sequences onto their preferred forms.  */
-extern Lisp_Object Vfunction_key_map;
-
 /* Another keymap that maps key sequences into key sequences.
    This one takes precedence over ordinary definitions.  */
 extern Lisp_Object Vkey_translation_map;
@@ -8654,7 +8651,7 @@
   last_nonmenu_event = Qnil;
 
   delayed_switch_frame = Qnil;
-  fkey.map = fkey.parent = Vfunction_key_map;
+  fkey.map = fkey.parent = current_kboard->Vfunction_key_map;
   keytran.map = keytran.parent = Vkey_translation_map;
   /* If there is no translation-map, turn off scanning.  */
   fkey.start = fkey.end = KEYMAPP (fkey.map) ? 0 : bufsize + 1;
@@ -10766,6 +10763,7 @@
   kb->reference_count = 0;
   kb->Vsystem_key_alist = Qnil;
   kb->system_key_syms = Qnil;
+  kb->Vfunction_key_map = Fmake_sparse_keymap (Qnil);
   kb->Vdefault_minibuffer_frame = Qnil;
 }
 
@@ -11465,6 +11463,29 @@
 numeric keysym code (sans the \"system-specific\" bit 1<<28)
 and SYMBOL is its name.  */);
 
+  DEFVAR_KBOARD ("function-key-map", Vfunction_key_map,
+                 doc: /* Keymap mapping ASCII function key sequences onto their preferred forms.
+This allows Emacs to recognize function keys sent from ASCII
+terminals at any point in a key sequence.
+
+The `read-key-sequence' function replaces any subsequence bound by
+`function-key-map' with its binding.  More precisely, when the active
+keymaps have no binding for the current key sequence but
+`function-key-map' binds a suffix of the sequence to a vector or string,
+`read-key-sequence' replaces the matching suffix with its binding, and
+continues with the new sequence.
+
+The events that come from bindings in `function-key-map' are not
+themselves looked up in `function-key-map'.
+
+For example, suppose `function-key-map' binds `ESC O P' to [f1].
+Typing `ESC O P' to `read-key-sequence' would return [f1].  Typing
+`C-x ESC O P' would return [?\\C-x f1].  If [f1] were a prefix
+key, typing `ESC O P x' would return [f1 x].
+
+`function-key-map' has a separate binding for each display device.
+See Info node `(elisp)Multiple displays'.  */);
+
   DEFVAR_LISP ("deferred-action-list", &Vdeferred_action_list,
 	       doc: /* List of deferred actions to be performed at a later time.
 The precise format isn't relevant here; we just check whether it is nil.  */);
@@ -11628,6 +11649,7 @@
       mark_object (kb->Vlast_kbd_macro);
       mark_object (kb->Vsystem_key_alist);
       mark_object (kb->system_key_syms);
+      mark_object (kb->Vfunction_key_map);
       mark_object (kb->Vdefault_minibuffer_frame);
       mark_object (kb->echo_string);
     }
--- a/src/keyboard.h	Sat Jun 25 15:00:08 2005 +0000
+++ b/src/keyboard.h	Sat Jun 25 16:34:30 2005 +0000
@@ -120,6 +120,11 @@
     /* Cache for modify_event_symbol.  */
     Lisp_Object system_key_syms;
 
+    /* Keymap mapping ASCII function key sequences onto their
+       preferred forms.  Initialized by the terminal-specific lisp
+       files.  See the DEFVAR for more documentation.  */
+    Lisp_Object Vfunction_key_map;
+    
     /* Minibufferless frames on this display use this frame's minibuffer.  */
     Lisp_Object Vdefault_minibuffer_frame;
 
@@ -187,10 +192,6 @@
 /* Nonzero means polling for input is temporarily suppressed.  */
 extern int poll_suppress_count;
 
-/* Keymap mapping ASCII function key sequences onto their preferred forms.
-   Initialized by the terminal-specific lisp files.  */
-extern Lisp_Object Vfunction_key_map;
-
 /* Vector holding the key sequence that invoked the current command.
    It is reused for each command, and it may be longer than the current
    sequence; this_command_key_count indicates how many elements
--- a/src/keymap.c	Sat Jun 25 15:00:08 2005 +0000
+++ b/src/keymap.c	Sat Jun 25 16:34:30 2005 +0000
@@ -79,11 +79,6 @@
 /* List of emulation mode keymap alists.  */
 Lisp_Object Vemulation_mode_map_alists;
 
-/* Keymap mapping ASCII function key sequences onto their preferred forms.
-   Initialized by the terminal-specific lisp files.  See DEFVAR for more
-   documentation.  */
-Lisp_Object Vfunction_key_map;
-
 /* Keymap mapping ASCII function key sequences onto their preferred forms.  */
 Lisp_Object Vkey_translation_map;
 
@@ -2939,8 +2934,8 @@
 		     "\f\nGlobal Bindings", nomenu, 0, 1, 0);
 
   /* Print the function-key-map translations under this prefix.  */
-  if (!NILP (Vfunction_key_map))
-    describe_map_tree (Vfunction_key_map, 0, Qnil, prefix,
+  if (!NILP (current_kboard->Vfunction_key_map))
+    describe_map_tree (current_kboard->Vfunction_key_map, 0, Qnil, prefix,
 		       "\f\nFunction key map translations", nomenu, 1, 0, 0);
 
   UNGCPRO;
@@ -3802,28 +3797,6 @@
 `minor-mode-map-alist' and `minor-mode-overriding-map-alist'.  */);
   Vemulation_mode_map_alists = Qnil;
 
-
-  DEFVAR_LISP ("function-key-map", &Vfunction_key_map,
-	       doc: /* Keymap mapping ASCII function key sequences onto their preferred forms.
-This allows Emacs to recognize function keys sent from ASCII
-terminals at any point in a key sequence.
-
-The `read-key-sequence' function replaces any subsequence bound by
-`function-key-map' with its binding.  More precisely, when the active
-keymaps have no binding for the current key sequence but
-`function-key-map' binds a suffix of the sequence to a vector or string,
-`read-key-sequence' replaces the matching suffix with its binding, and
-continues with the new sequence.
-
-The events that come from bindings in `function-key-map' are not
-themselves looked up in `function-key-map'.
-
-For example, suppose `function-key-map' binds `ESC O P' to [f1].
-Typing `ESC O P' to `read-key-sequence' would return [f1].  Typing
-`C-x ESC O P' would return [?\\C-x f1].  If [f1] were a prefix
-key, typing `ESC O P x' would return [f1 x].  */);
-  Vfunction_key_map = Fmake_sparse_keymap (Qnil);
-
   DEFVAR_LISP ("key-translation-map", &Vkey_translation_map,
 	       doc: /* Keymap of key translations that can override keymaps.
 This keymap works like `function-key-map', but comes after that,
--- a/src/term.c	Sat Jun 25 15:00:08 2005 +0000
+++ b/src/term.c	Sat Jun 25 16:34:30 2005 +0000
@@ -1344,13 +1344,13 @@
 
   /* This can happen if CANNOT_DUMP or with strange options.  */
   if (!initialized)
-    Vfunction_key_map = Fmake_sparse_keymap (Qnil);
+    current_kboard->Vfunction_key_map = Fmake_sparse_keymap (Qnil);
 
   for (i = 0; i < (sizeof (keys)/sizeof (keys[0])); i++)
     {
       char *sequence = tgetstr (keys[i].cap, address);
       if (sequence)
-	Fdefine_key (Vfunction_key_map, build_string (sequence),
+	Fdefine_key (current_kboard->Vfunction_key_map, build_string (sequence),
 		     Fmake_vector (make_number (1),
 				   intern (keys[i].name)));
     }
@@ -1370,13 +1370,13 @@
 	if (k0)
 	  /* Define f0 first, so that f10 takes precedence in case the
 	     key sequences happens to be the same.  */
-	  Fdefine_key (Vfunction_key_map, build_string (k0),
+	  Fdefine_key (current_kboard->Vfunction_key_map, build_string (k0),
 		       Fmake_vector (make_number (1), intern ("f0")));
-	Fdefine_key (Vfunction_key_map, build_string (k_semi),
+	Fdefine_key (current_kboard->Vfunction_key_map, build_string (k_semi),
 		     Fmake_vector (make_number (1), intern ("f10")));
       }
     else if (k0)
-      Fdefine_key (Vfunction_key_map, build_string (k0),
+      Fdefine_key (current_kboard->Vfunction_key_map, build_string (k0),
 		   Fmake_vector (make_number (1), intern (k0_name)));
   }
 
@@ -1399,7 +1399,7 @@
 	  if (sequence)
 	    {
 	      sprintf (fkey, "f%d", i);
-	      Fdefine_key (Vfunction_key_map, build_string (sequence),
+	      Fdefine_key (current_kboard->Vfunction_key_map, build_string (sequence),
 			   Fmake_vector (make_number (1),
 					 intern (fkey)));
 	    }
@@ -1416,7 +1416,7 @@
 	{								\
 	  char *sequence = tgetstr (cap2, address);			\
 	  if (sequence)							\
-	    Fdefine_key (Vfunction_key_map, build_string (sequence),	\
+	    Fdefine_key (current_kboard->Vfunction_key_map, build_string (sequence),	\
 			 Fmake_vector (make_number (1),	\
 				       intern (sym)));	\
 	}