# HG changeset patch # User Jim Blandy # Date 696618853 0 # Node ID 2f2206ac3dbaa034e54901537585ca53cef9e9cc # Parent ccadad491483d7138cb287d63f5cd272b004e2e4 *** empty log message *** diff -r ccadad491483 -r 2f2206ac3dba src/keymap.c --- a/src/keymap.c Tue Jan 28 16:01:00 1992 +0000 +++ b/src/keymap.c Tue Jan 28 17:14:13 1992 +0000 @@ -24,6 +24,7 @@ #include "lisp.h" #include "commands.h" #include "buffer.h" +#include "keyboard.h" #define min(a, b) ((a) < (b) ? (a) : (b)) @@ -67,6 +68,11 @@ /* Alist of minor mode variables and keymaps. */ Lisp_Object Vminor_mode_map_alist; +/* 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; + Lisp_Object Qkeymapp, Qkeymap; /* A char over 0200 in a key sequence @@ -220,8 +226,8 @@ /* If idx is a list (some sort of mouse click, perhaps?), the index we want to use is the car of the list, which ought to be a symbol. */ - if (XTYPE (idx) == Lisp_Cons) - idx = XCONS (idx)->car; + if (EVENT_HAS_PARAMETERS (idx)) + idx = EVENT_HEAD (idx); if (XTYPE (idx) == Lisp_Int && (XINT (idx) < 0 || XINT (idx) >= DENSE_TABLE_SIZE)) @@ -295,8 +301,8 @@ /* If idx is a list (some sort of mouse click, perhaps?), the index we want to use is the car of the list, which ought to be a symbol. */ - if (XTYPE (idx) == Lisp_Cons) - idx = Fcar (idx); + if (EVENT_HAS_PARAMETERS (idx)) + idx = EVENT_HEAD (idx); if (XTYPE (idx) == Lisp_Int && (XINT (idx) < 0 || XINT (idx) >= DENSE_TABLE_SIZE)) @@ -569,7 +575,8 @@ /* Global, local, and minor mode keymap stuff. */ /* We can't put these variables inside current_minor_maps, since under - DGUX they dump as pure. Bleah. */ + some systems, static gets macro-defined to be the empty string. + Ickypoo. */ static Lisp_Object *cmm_modes, *cmm_maps; static int cmm_size; @@ -594,15 +601,15 @@ Lisp_Object **modeptr, **mapptr; { int i = 0; - Lisp_Object alist, assoc, var; + Lisp_Object alist, assoc, var, val; for (alist = Vminor_mode_map_alist; CONSP (alist); alist = XCONS (alist)->cdr) if (CONSP (assoc = XCONS (alist)->car) && XTYPE (var = XCONS (assoc)->car) == Lisp_Symbol - && ! NILP (Fboundp (var)) - && ! NILP (Fsymbol_value (var))) + && ! EQ ((val = find_symbol_value (var)), Qunbound) + && ! NILP (val)) { if (i >= cmm_size) { @@ -687,7 +694,9 @@ DEFUN ("global-key-binding", Fglobal_key_binding, Sglobal_key_binding, 1, 1, 0, "Return the binding for command KEYS in current global keymap only.\n\ KEYS is a string, a sequence of keystrokes.\n\ -The binding is probably a symbol with a function definition.") +The binding is probably a symbol with a function definition.\n\ +This function's return values are the same as those of lookup-key\n\ +(which see).") (keys) Lisp_Object keys; { @@ -1089,6 +1098,9 @@ register unsigned char c; char tem[6]; + if (EVENT_HAS_PARAMETERS (key)) + key = EVENT_HEAD (key); + switch (XTYPE (key)) { case Lisp_Int: /* Normal character */ @@ -1099,13 +1111,6 @@ case Lisp_Symbol: /* Function key or event-symbol */ return Fsymbol_name (key); - case Lisp_Cons: /* Mouse event */ - key = XCONS (key)->car; - if (XTYPE (key) == Lisp_Symbol) - return Fsymbol_name (key); - /* Mouse events should have an identifying symbol as their car; - fall through when this isn't the case. */ - default: error ("KEY must be an integer, cons, or symbol."); } @@ -1804,6 +1809,24 @@ in the list takes precedence."); Vminor_mode_map_alist = Qnil; + DEFVAR_LISP ("function-key-map", &Vfunction_key_map, + "Keymap mapping ASCII function key sequences onto their preferred forms.\n\ +This allows Emacs to recognize function keys sent from ASCII\n\ +terminals at any point in a key sequence.\n\ +\n\ +The read-key-sequence function replaces subsequences bound by\n\ +function-key-map with their bindings. When the current local and global\n\ +keymaps have no binding for the current key sequence but\n\ +function-key-map binds a suffix of the sequence to a vector,\n\ +read-key-sequence replaces the matching suffix with its binding, and\n\ +continues with the new sequence.\n\ +\n\ +For example, suppose function-key-map binds `ESC O P' to [pf1].\n\ +Typing `ESC O P' to read-key-sequence would return [pf1]. Typing\n\ +`C-x ESC O P' would return [?\C-x pf1]. If [pf1] were a prefix\n\ +key, typing `ESC O P x' would return [pf1 x]."); + Vfunction_key_map = Fmake_sparse_keymap (); + Qsingle_key_description = intern ("single-key-description"); staticpro (&Qsingle_key_description); diff -r ccadad491483 -r 2f2206ac3dba src/xterm.c --- a/src/xterm.c Tue Jan 28 16:01:00 1992 +0000 +++ b/src/xterm.c Tue Jan 28 17:14:13 1992 +0000 @@ -1286,21 +1286,12 @@ text_window, }; -/* Symbol returned in input stream to indicate mouse movement. */ -Lisp_Object Qmouse_moved; - /* Position of the mouse in characters */ unsigned int x_mouse_x, x_mouse_y; -/* Emacs window the mouse is in, if any. */ -extern Lisp_Object Vmouse_window; - /* Offset in buffer of character under the pointer, or 0. */ extern int mouse_buffer_offset; -/* Part of the screen the mouse is in. */ -extern Lisp_Object Vmouse_screen_part; - extern int buffer_posn_from_coords (); /* Symbols from xfns.c to denote the different parts of a window. */ @@ -1701,10 +1692,6 @@ #define XEvent XKeyPressedEvent #endif /* HAVE_X11 */ -/* Symbols returned in the input stream to indicate various X events. */ -Lisp_Object Qmouse_click; -Lisp_Object Qscrollbar_click; - /* Timestamp of enter window event. This is only used by XTread_socket, but we have to put it out here, since static variables within functions sometimes don't work. */ @@ -1888,7 +1875,6 @@ disabled; you don't want to spend time updating a display that won't ever be seen. */ s->visible = 0; - Vmouse_window = Vmouse_screen_part = Qnil; x_mouse_x = x_mouse_y = -1; } } @@ -3323,7 +3309,6 @@ #endif /* not HAVE_X11 */ } - XRaiseWindow (XDISPLAY s->display.x->window_desc); XFlushQueue (); UNBLOCK_INPUT; @@ -3761,10 +3746,6 @@ { staticpro (&invocation_name); invocation_name = Qnil; - - Qmouse_moved = intern ("mouse-moved"); - Qmouse_click = intern ("mouse-click"); - Qscrollbar_click = intern ("scrollbar-click"); } #endif /* HAVE_X11 */ #endif /* HAVE_X_WINDOWS */