# HG changeset patch # User Aidan Kehoe # Date 1309006848 -3600 # Node ID 3d1f8f0e690f27b4b12aa8c8c025fe3da95dbf92 # Parent dc88f282ddc346bc5298a95734012370bea4a430 Add `function-key-map-parent', for non-console-specific `function-key-map' bindings src/ChangeLog addition: 2011-06-25 Aidan Kehoe * console.c: * console.c (allocate_console): * console.c (vars_of_console): * console.c (complex_vars_of_console): * lisp.h: Add a new keymap variable, function-key-map-parent; use it as the parent of each console-specific function-key-map. This is appropriate for things like x-compose processing. lisp/ChangeLog addition: 2011-06-25 Aidan Kehoe * gtk-init.el: * gtk-init.el (make-device-late-gtk-entry-point): * gtk-init.el (gtk-initialize-compose): Removed. * keymap.el: * keymap.el (function-key-map-parent): * x-init.el (x-initialize-compose): Removed. * x-init.el (make-device-late-x-entry-point): Make the bindings for dead-acute and friends in function-key-map-parent, rather than function-key-map; do this in keymap.el rather than in window-system-specific code, since the compose processing is generally useful and not X11-specific. It's probably reasonable to rename x-compose.el to compose.el at this point, but I haven't done that. man/ChangeLog addition: 2011-06-25 Aidan Kehoe * lispref/os.texi (Translating Input): Document the just-added function-key-map-parent. diff -r dc88f282ddc3 -r 3d1f8f0e690f lisp/ChangeLog --- a/lisp/ChangeLog Fri Jun 24 19:59:35 2011 +0100 +++ b/lisp/ChangeLog Sat Jun 25 14:00:48 2011 +0100 @@ -1,3 +1,19 @@ +2011-06-25 Aidan Kehoe + + * gtk-init.el: + * gtk-init.el (make-device-late-gtk-entry-point): + * gtk-init.el (gtk-initialize-compose): Removed. + * keymap.el: + * keymap.el (function-key-map-parent): + * x-init.el (x-initialize-compose): Removed. + * x-init.el (make-device-late-x-entry-point): + Make the bindings for dead-acute and friends in + function-key-map-parent, rather than function-key-map; do this in + keymap.el rather than in window-system-specific code, since the + compose processing is generally useful and not X11-specific. + It's probably reasonable to rename x-compose.el to compose.el at + this point, but I haven't done that. + 2011-06-23 Didier Verna From smitchel diff -r dc88f282ddc3 -r 3d1f8f0e690f lisp/gtk-init.el --- a/lisp/gtk-init.el Fri Jun 24 19:59:35 2011 +0100 +++ b/lisp/gtk-init.el Sat Jun 25 14:00:48 2011 +0100 @@ -109,7 +109,6 @@ (defun make-device-late-gtk-entry-point (device) "Entry-Point to do any Lisp-level GTK device-specific initialization." - (gtk-initialize-compose device) (unless make-device-late-gtk-entry-point-called-p (setq make-device-late-gtk-entry-point-called-p t))) @@ -149,120 +148,3 @@ (push '("-geometry" . gtk-init-handle-geometry) command-switch-alist) -;;; Stuff to get compose keys working on GTK -(eval-when-compile - (defmacro gtk-define-dead-key (key map device) - `(when (gtk-keysym-on-keyboard-p ',key device) - (define-key function-key-map [,key] ',map)))) - -(defun gtk-initialize-compose (device) - "Enable compose processing" - (autoload 'compose-map "gtk-compose" nil t 'keymap) - (autoload 'compose-acute-map "gtk-compose" nil t 'keymap) - (autoload 'compose-grave-map "gtk-compose" nil t 'keymap) - (autoload 'compose-cedilla-map "gtk-compose" nil t 'keymap) - (autoload 'compose-diaeresis-map "gtk-compose" nil t 'keymap) - (autoload 'compose-circumflex-map "gtk-compose" nil t 'keymap) - (autoload 'compose-tilde-map "gtk-compose" nil t 'keymap) - - (when (gtk-keysym-on-keyboard-p 'multi-key device) - (define-key function-key-map [multi-key] 'compose-map)) - - ;; The dead keys might really be called just about anything, depending - ;; on the vendor. MIT thinks that the prefixes are "SunFA_", "D", and - ;; "hpmute_" for Sun, DEC, and HP respectively. However, OpenWindows 3 - ;; thinks that the prefixes are "SunXK_FA_", "DXK_", and "hpXK_mute_". - ;; And HP (who don't mention Sun and DEC at all) use "XK_mute_". - ;; Go figure. - - ;; Presumably if someone is running OpenWindows, they won't be using - ;; the DEC or HP keysyms, but if they are defined then that is possible, - ;; so in that case we accept them all. - - ;; If things seem not to be working, you might want to check your - ;; /usr/lib/X11/XKeysymDB file to see if your vendor has an equally - ;; mixed up view of what these keys should be called. - - ;; Canonical names: - (gtk-define-dead-key acute compose-acute-map device) - (gtk-define-dead-key grave compose-grave-map device) - (gtk-define-dead-key cedilla compose-cedilla-map device) - (gtk-define-dead-key diaeresis compose-diaeresis-map device) - (gtk-define-dead-key circumflex compose-circumflex-map device) - (gtk-define-dead-key tilde compose-tilde-map device) - (gtk-define-dead-key degree compose-ring-map device) - - ;; Sun according to MIT: - (gtk-define-dead-key SunFA_Acute compose-acute-map device) - (gtk-define-dead-key SunFA_Grave compose-grave-map device) - (gtk-define-dead-key SunFA_Cedilla compose-cedilla-map device) - (gtk-define-dead-key SunFA_Diaeresis compose-diaeresis-map device) - (gtk-define-dead-key SunFA_Circum compose-circumflex-map device) - (gtk-define-dead-key SunFA_Tilde compose-tilde-map device) - - ;; Sun according to OpenWindows 2: - (gtk-define-dead-key Dead_Grave compose-grave-map device) - (gtk-define-dead-key Dead_Circum compose-circumflex-map device) - (gtk-define-dead-key Dead_Tilde compose-tilde-map device) - - ;; Sun according to OpenWindows 3: - (gtk-define-dead-key SunXK_FA_Acute compose-acute-map device) - (gtk-define-dead-key SunXK_FA_Grave compose-grave-map device) - (gtk-define-dead-key SunXK_FA_Cedilla compose-cedilla-map device) - (gtk-define-dead-key SunXK_FA_Diaeresis compose-diaeresis-map device) - (gtk-define-dead-key SunXK_FA_Circum compose-circumflex-map device) - (gtk-define-dead-key SunXK_FA_Tilde compose-tilde-map device) - - ;; DEC according to MIT: - (gtk-define-dead-key Dacute_accent compose-acute-map device) - (gtk-define-dead-key Dgrave_accent compose-grave-map device) - (gtk-define-dead-key Dcedilla_accent compose-cedilla-map device) - (gtk-define-dead-key Dcircumflex_accent compose-circumflex-map device) - (gtk-define-dead-key Dtilde compose-tilde-map device) - (gtk-define-dead-key Dring_accent compose-ring-map device) - - ;; DEC according to OpenWindows 3: - (gtk-define-dead-key DXK_acute_accent compose-acute-map device) - (gtk-define-dead-key DXK_grave_accent compose-grave-map device) - (gtk-define-dead-key DXK_cedilla_accent compose-cedilla-map device) - (gtk-define-dead-key DXK_circumflex_accent compose-circumflex-map device) - (gtk-define-dead-key DXK_tilde compose-tilde-map device) - (gtk-define-dead-key DXK_ring_accent compose-ring-map device) - - ;; HP according to MIT: - (gtk-define-dead-key hpmute_acute compose-acute-map device) - (gtk-define-dead-key hpmute_grave compose-grave-map device) - (gtk-define-dead-key hpmute_diaeresis compose-diaeresis-map device) - (gtk-define-dead-key hpmute_asciicircum compose-circumflex-map device) - (gtk-define-dead-key hpmute_asciitilde compose-tilde-map device) - - ;; Empirically discovered on Linux XFree86 MetroX: - (gtk-define-dead-key usldead_acute compose-acute-map device) - (gtk-define-dead-key usldead_grave compose-grave-map device) - (gtk-define-dead-key usldead_diaeresis compose-diaeresis-map device) - (gtk-define-dead-key usldead_asciicircum compose-circumflex-map device) - (gtk-define-dead-key usldead_asciitilde compose-tilde-map device) - - ;; HP according to OpenWindows 3: - (gtk-define-dead-key hpXK_mute_acute compose-acute-map device) - (gtk-define-dead-key hpXK_mute_grave compose-grave-map device) - (gtk-define-dead-key hpXK_mute_diaeresis compose-diaeresis-map device) - (gtk-define-dead-key hpXK_mute_asciicircum compose-circumflex-map device) - (gtk-define-dead-key hpXK_mute_asciitilde compose-tilde-map device) - - ;; HP according to HP-UX 8.0: - (gtk-define-dead-key XK_mute_acute compose-acute-map device) - (gtk-define-dead-key XK_mute_grave compose-grave-map device) - (gtk-define-dead-key XK_mute_diaeresis compose-diaeresis-map device) - (gtk-define-dead-key XK_mute_asciicircum compose-circumflex-map device) - (gtk-define-dead-key XK_mute_asciitilde compose-tilde-map device) - - ;; Xfree86 seems to use lower case and a hyphen - (gtk-define-dead-key dead-acute compose-acute-map device) - (gtk-define-dead-key dead-grave compose-grave-map device) - (gtk-define-dead-key dead-cedilla compose-cedilla-map device) - (gtk-define-dead-key dead-diaeresis compose-diaeresis-map device) - (gtk-define-dead-key dead-circum compose-circumflex-map device) - (gtk-define-dead-key dead-circumflex compose-circumflex-map device) - (gtk-define-dead-key dead-tilde compose-tilde-map device)) - diff -r dc88f282ddc3 -r 3d1f8f0e690f lisp/keymap.el --- a/lisp/keymap.el Fri Jun 24 19:59:35 2011 +0100 +++ b/lisp/keymap.el Sat Jun 25 14:00:48 2011 +0100 @@ -510,18 +510,141 @@ (error "Event has no character equivalent: %s" event)))) (vector (intern (concat "" (nreverse list)))))) -;; This looks dirty. The following code should maybe go to another -;; file, and `create-console-hook' should maybe default to nil. -(add-hook - 'create-console-hook - #'(lambda (console) - (letf (((selected-console) console)) - (define-key function-key-map [?\C-x ?@ ?h] 'event-apply-hyper-modifier) - (define-key function-key-map [?\C-x ?@ ?s] 'event-apply-super-modifier) - (define-key function-key-map [?\C-x ?@ ?m] 'event-apply-meta-modifier) - (define-key function-key-map [?\C-x ?@ ?S] 'event-apply-shift-modifier) - (define-key function-key-map [?\C-x ?@ ?c] 'event-apply-control-modifier) - (define-key function-key-map [?\C-x ?@ ?a] 'event-apply-alt-modifier) - (define-key function-key-map [?\C-x ?@ ?k] 'synthesize-keysym)))) +(define-key function-key-map-parent [?\C-x ?@ ?h] 'event-apply-hyper-modifier) +(define-key function-key-map-parent [?\C-x ?@ ?s] 'event-apply-super-modifier) +(define-key function-key-map-parent [?\C-x ?@ ?m] 'event-apply-meta-modifier) +(define-key function-key-map-parent [?\C-x ?@ ?S] 'event-apply-shift-modifier) +(define-key function-key-map-parent [?\C-x ?@ ?c] 'event-apply-control-modifier) +(define-key function-key-map-parent [?\C-x ?@ ?a] 'event-apply-alt-modifier) +(define-key function-key-map-parent [?\C-x ?@ ?k] 'synthesize-keysym) + +;; The autoloads for the compose map, and their bindings in +;; function-key-map-parent are used by GTK as well as X11. And Julian +;; Bradfield, at least, uses x-compose on the TTY, it's reasonable to make +;; them generally available. + +(loop for map in '(compose-acute-map compose-breve-map compose-caron-map + compose-cedilla-map compose-circumflex-map + compose-diaeresis-map compose-dot-map + compose-doubleacute-map compose-grave-map + compose-hook-map compose-horn-map compose-macron-map + compose-map compose-ogonek-map compose-ring-map + compose-stroke-map compose-tilde-map) + do (autoload map "x-compose" nil t 'keymap)) + +(loop + for (key map) + ;; The dead keys might really be called just about anything, depending + ;; on the vendor. MIT thinks that the prefixes are "SunFA_", "D", and + ;; "hpmute_" for Sun, DEC, and HP respectively. However, OpenWindows 3 + ;; thinks that the prefixes are "SunXK_FA_", "DXK_", and "hpXK_mute_". + ;; And HP (who don't mention Sun and DEC at all) use "XK_mute_". Go + ;; figure. + + ;; Presumably if someone is running OpenWindows, they won't be using the + ;; DEC or HP keysyms, but if they are defined then that is possible, so + ;; in that case we accept them all. + + ;; If things seem not to be working, you might want to check your + ;; /usr/lib/X11/XKeysymDB file to see if your vendor has an equally + ;; mixed up view of what these keys should be called. + + ;; Canonical names: + in '((acute compose-acute-map) + (grave compose-grave-map) + (cedilla compose-cedilla-map) + (diaeresis compose-diaeresis-map) + (circumflex compose-circumflex-map) + (tilde compose-tilde-map) + (degree compose-ring-map) + (multi-key compose-map) + + ;; Sun according to MIT: + (SunFA_Acute compose-acute-map) + (SunFA_Grave compose-grave-map) + (SunFA_Cedilla compose-cedilla-map) + (SunFA_Diaeresis compose-diaeresis-map) + (SunFA_Circum compose-circumflex-map) + (SunFA_Tilde compose-tilde-map) + + ;; Sun according to OpenWindows 2: + (Dead_Grave compose-grave-map) + (Dead_Circum compose-circumflex-map) + (Dead_Tilde compose-tilde-map) + + ;; Sun according to OpenWindows 3: + (SunXK_FA_Acute compose-acute-map) + (SunXK_FA_Grave compose-grave-map) + (SunXK_FA_Cedilla compose-cedilla-map) + (SunXK_FA_Diaeresis compose-diaeresis-map) + (SunXK_FA_Circum compose-circumflex-map) + (SunXK_FA_Tilde compose-tilde-map) + + ;; DEC according to MIT: + (Dacute_accent compose-acute-map) + (Dgrave_accent compose-grave-map) + (Dcedilla_accent compose-cedilla-map) + (Dcircumflex_accent compose-circumflex-map) + (Dtilde compose-tilde-map) + (Dring_accent compose-ring-map) + + ;; DEC according to OpenWindows 3: + (DXK_acute_accent compose-acute-map) + (DXK_grave_accent compose-grave-map) + (DXK_cedilla_accent compose-cedilla-map) + (DXK_circumflex_accent compose-circumflex-map) + (DXK_tilde compose-tilde-map) + (DXK_ring_accent compose-ring-map) + + ;; HP according to MIT: + (hpmute_acute compose-acute-map) + (hpmute_grave compose-grave-map) + (hpmute_diaeresis compose-diaeresis-map) + (hpmute_asciicircum compose-circumflex-map) + (hpmute_asciitilde compose-tilde-map) + + ;; Empirically discovered on Linux XFree86 MetroX: + (usldead_acute compose-acute-map) + (usldead_grave compose-grave-map) + (usldead_diaeresis compose-diaeresis-map) + (usldead_asciicircum compose-circumflex-map) + (usldead_asciitilde compose-tilde-map) + + ;; HP according to OpenWindows 3: + (hpXK_mute_acute compose-acute-map) + (hpXK_mute_grave compose-grave-map) + (hpXK_mute_diaeresis compose-diaeresis-map) + (hpXK_mute_asciicircum compose-circumflex-map) + (hpXK_mute_asciitilde compose-tilde-map) + + ;; HP according to HP-UX 8.0: + (XK_mute_acute compose-acute-map) + (XK_mute_grave compose-grave-map) + (XK_mute_diaeresis compose-diaeresis-map) + (XK_mute_asciicircum compose-circumflex-map) + (XK_mute_asciitilde compose-tilde-map) + + ;; XFree86 uses lower case and an underscore. XEmacs converts the + ;; underscore to a hyphen in x_keysym_to_emacs_keysym because the + ;; keysym is in the "Keyboard" character set, which seems a very + ;; arbitrary approach. + (dead-acute compose-acute-map) + (dead-grave compose-grave-map) + (dead-cedilla compose-cedilla-map) + (dead-diaeresis compose-diaeresis-map) + (dead-circum compose-circumflex-map) + (dead-circumflex compose-circumflex-map) + (dead-tilde compose-tilde-map) + (dead-abovering compose-ring-map) + (dead-caron compose-caron-map) + (dead-macron compose-macron-map) + (dead-breve compose-breve-map) + (dead-abovedot compose-dot-map) + (dead-doubleacute compose-doubleacute-map) + (dead-ogonek compose-ogonek-map) + (dead-hook compose-hook-map) + (dead-horn compose-horn-map) + (dead-stroke compose-stroke-map)) + do (define-key function-key-map-parent (vector key) map)) ;;; keymap.el ends here diff -r dc88f282ddc3 -r 3d1f8f0e690f lisp/x-init.el --- a/lisp/x-init.el Fri Jun 24 19:59:35 2011 +0100 +++ b/lisp/x-init.el Sat Jun 25 14:00:48 2011 +0100 @@ -79,143 +79,6 @@ (interactive) (ow-find t)) -;; Load X-server specific code. -;; Specifically, load some code to repair the grievous damage that MIT and -;; Sun have done to the default keymap for the Sun keyboards. -(defun x-initialize-compose (device) - "Enable compose key and dead key processing on DEVICE." - (loop for map in '(compose-map compose-acute-map compose-grave-map - compose-cedilla-map compose-diaeresis-map - compose-circumflex-map compose-tilde-map - compose-ring-map compose-caron-map compose-macron-map - compose-breve-map compose-dot-map - compose-doubleacute-map compose-ogonek-map - compose-hook-map compose-horn-map compose-stroke-map) - do (autoload map "x-compose" nil t 'keymap)) - - (loop - for (key map) - ;; The dead keys might really be called just about anything, depending - ;; on the vendor. MIT thinks that the prefixes are "SunFA_", "D", and - ;; "hpmute_" for Sun, DEC, and HP respectively. However, OpenWindows 3 - ;; thinks that the prefixes are "SunXK_FA_", "DXK_", and "hpXK_mute_". - ;; And HP (who don't mention Sun and DEC at all) use "XK_mute_". Go - ;; figure. - - ;; Presumably if someone is running OpenWindows, they won't be using the - ;; DEC or HP keysyms, but if they are defined then that is possible, so - ;; in that case we accept them all. - - ;; If things seem not to be working, you might want to check your - ;; /usr/lib/X11/XKeysymDB file to see if your vendor has an equally - ;; mixed up view of what these keys should be called. - - ;; Canonical names: - in '((acute compose-acute-map) - (grave compose-grave-map) - (cedilla compose-cedilla-map) - (diaeresis compose-diaeresis-map) - (circumflex compose-circumflex-map) - (tilde compose-tilde-map) - (degree compose-ring-map) - (multi-key compose-map) - - ;; Sun according to MIT: - (SunFA_Acute compose-acute-map) - (SunFA_Grave compose-grave-map) - (SunFA_Cedilla compose-cedilla-map) - (SunFA_Diaeresis compose-diaeresis-map) - (SunFA_Circum compose-circumflex-map) - (SunFA_Tilde compose-tilde-map) - - ;; Sun according to OpenWindows 2: - (Dead_Grave compose-grave-map) - (Dead_Circum compose-circumflex-map) - (Dead_Tilde compose-tilde-map) - - ;; Sun according to OpenWindows 3: - (SunXK_FA_Acute compose-acute-map) - (SunXK_FA_Grave compose-grave-map) - (SunXK_FA_Cedilla compose-cedilla-map) - (SunXK_FA_Diaeresis compose-diaeresis-map) - (SunXK_FA_Circum compose-circumflex-map) - (SunXK_FA_Tilde compose-tilde-map) - - ;; DEC according to MIT: - (Dacute_accent compose-acute-map) - (Dgrave_accent compose-grave-map) - (Dcedilla_accent compose-cedilla-map) - (Dcircumflex_accent compose-circumflex-map) - (Dtilde compose-tilde-map) - (Dring_accent compose-ring-map) - - ;; DEC according to OpenWindows 3: - (DXK_acute_accent compose-acute-map) - (DXK_grave_accent compose-grave-map) - (DXK_cedilla_accent compose-cedilla-map) - (DXK_circumflex_accent compose-circumflex-map) - (DXK_tilde compose-tilde-map) - (DXK_ring_accent compose-ring-map) - - ;; HP according to MIT: - (hpmute_acute compose-acute-map) - (hpmute_grave compose-grave-map) - (hpmute_diaeresis compose-diaeresis-map) - (hpmute_asciicircum compose-circumflex-map) - (hpmute_asciitilde compose-tilde-map) - - ;; Empirically discovered on Linux XFree86 MetroX: - (usldead_acute compose-acute-map) - (usldead_grave compose-grave-map) - (usldead_diaeresis compose-diaeresis-map) - (usldead_asciicircum compose-circumflex-map) - (usldead_asciitilde compose-tilde-map) - - ;; HP according to OpenWindows 3: - (hpXK_mute_acute compose-acute-map) - (hpXK_mute_grave compose-grave-map) - (hpXK_mute_diaeresis compose-diaeresis-map) - (hpXK_mute_asciicircum compose-circumflex-map) - (hpXK_mute_asciitilde compose-tilde-map) - - ;; HP according to HP-UX 8.0: - (XK_mute_acute compose-acute-map) - (XK_mute_grave compose-grave-map) - (XK_mute_diaeresis compose-diaeresis-map) - (XK_mute_asciicircum compose-circumflex-map) - (XK_mute_asciitilde compose-tilde-map) - - ;; [[ XFree86 seems to use lower case and a hyphen ]] Not true; - ;; they use lower case and an underscore. XEmacs converts the - ;; underscore to a hyphen in x_keysym_to_emacs_keysym because the - ;; keysym is in the "Keyboard" character set, which is just totally - ;; fucking random, considering it doesn't happen for any other - ;; character sets. - (dead-acute compose-acute-map) - (dead-grave compose-grave-map) - (dead-cedilla compose-cedilla-map) - (dead-diaeresis compose-diaeresis-map) - (dead-circum compose-circumflex-map) - (dead-circumflex compose-circumflex-map) - (dead-tilde compose-tilde-map) - (dead-abovering compose-ring-map) - (dead-caron compose-caron-map) - (dead-macron compose-macron-map) - (dead-breve compose-breve-map) - (dead-abovedot compose-dot-map) - (dead-doubleacute compose-doubleacute-map) - (dead-ogonek compose-ogonek-map) - (dead-hook compose-hook-map) - (dead-horn compose-horn-map) - (dead-stroke compose-stroke-map)) - - ;; Get the correct value for function-key-map - with function-key-map = (symbol-value-in-console 'function-key-map - (device-console device) - function-key-map) - do (when (x-keysym-on-keyboard-p key device) - (define-key function-key-map (vector key) map)))) - (eval-when-compile (load "x-win-sun" nil t) (load "x-win-xfree86" nil t)) @@ -291,7 +154,6 @@ "Entry point to do any Lisp-level X device-specific initialization." ;; General code, called on every X device created: (x-initialize-keyboard device) - (x-initialize-compose device) ;; And the following code is to be called once, the first time an X11 ;; device is created: (unless make-device-late-x-entry-point-called-p diff -r dc88f282ddc3 -r 3d1f8f0e690f man/ChangeLog --- a/man/ChangeLog Fri Jun 24 19:59:35 2011 +0100 +++ b/man/ChangeLog Sat Jun 25 14:00:48 2011 +0100 @@ -1,3 +1,8 @@ +2011-06-25 Aidan Kehoe + + * lispref/os.texi (Translating Input): + Document the just-added function-key-map-parent. + 2011-05-20 Jerry James * Makefile (DESTDIR): New variable for all Makefiles, unused in this diff -r dc88f282ddc3 -r 3d1f8f0e690f man/lispref/os.texi --- a/man/lispref/os.texi Fri Jun 24 19:59:35 2011 +0100 +++ b/man/lispref/os.texi Sat Jun 25 14:00:48 2011 +0100 @@ -1301,10 +1301,10 @@ @end ignore @defvar function-key-map -This variable holds a keymap that describes the character sequences -sent by function keys on an ordinary character terminal. This keymap -uses the same data structure as other keymaps, but is used differently: it -specifies translations to make while reading events. +This console-local variable holds a keymap that describes the character +sequences sent by function keys on an ordinary character terminal. This +keymap uses the same data structure as other keymaps, but is used +differently: it specifies translations to make while reading events. If @code{function-key-map} ``binds'' a key sequence @var{k} to a vector @var{v}, then when @var{k} appears as a subsequence @emph{anywhere} in a @@ -1337,6 +1337,14 @@ the character sequences that represent function keys. @end defvar +@defvar function-key-map-parent +The parent keymap of @code{function-key-map} is a non-console-local keymap, +@code{function-key-map-parent}, and any additions to +@code{function-key-map} that are not specific to a given console should +normally go into @code{function-key-map-parent} rather than +@code{function-key-map}. +@end defvar + @defvar key-translation-map This variable is another keymap used just like @code{function-key-map} to translate input events into other events. It differs from diff -r dc88f282ddc3 -r 3d1f8f0e690f src/ChangeLog --- a/src/ChangeLog Fri Jun 24 19:59:35 2011 +0100 +++ b/src/ChangeLog Sat Jun 25 14:00:48 2011 +0100 @@ -1,3 +1,14 @@ +2011-06-25 Aidan Kehoe + + * console.c: + * console.c (allocate_console): + * console.c (vars_of_console): + * console.c (complex_vars_of_console): + * lisp.h: + Add a new keymap variable, function-key-map-parent; use it as the + parent of each console-specific function-key-map. This is + appropriate for things like x-compose processing. + 2011-06-19 Aidan Kehoe * fns.c: diff -r dc88f282ddc3 -r 3d1f8f0e690f src/console.c --- a/src/console.c Fri Jun 24 19:59:35 2011 +0100 +++ b/src/console.c Sat Jun 25 14:00:48 2011 +0100 @@ -45,6 +45,8 @@ Lisp_Object Vcreate_console_hook, Vdelete_console_hook; +Lisp_Object Vfunction_key_map_parent; + Lisp_Object Qconsolep, Qconsole_live_p; Lisp_Object Qcreate_console_hook; Lisp_Object Qdelete_console_hook; @@ -203,6 +205,7 @@ con->contype = get_console_variant (type); con->command_builder = allocate_command_builder (console, 1); con->function_key_map = Fmake_sparse_keymap (Qnil); + Fset_keymap_parents (con->function_key_map, Vfunction_key_map_parent); set_quit_events (con, make_char (7)); /* C-g */ UNGCPRO; @@ -1306,6 +1309,15 @@ */ ); Vdelete_console_hook = Qnil; + DEFVAR_LISP ("function-key-map-parent", &Vfunction_key_map_parent /* +Parent keymap for `function-key-map'. + +This keymap is appropriate for bindings that are not console-specific, but +yet should take advantage of the substitution made by `read-key-sequence' +for bindings in `function-key-map'. +*/ ); + Vfunction_key_map_parent = Fmake_sparse_keymap (Qnil); + #ifdef HAVE_WINDOW_SYSTEM Fprovide (intern ("window-system")); #endif @@ -1530,6 +1542,11 @@ \[# #]. If [f1] were a prefix key, typing `ESC O P x' would return \[# #]. + +The parent keymap of `function-key-map' when created is +`function-key-map-parent', which is not a console-local variable. Bindings +appropriate for `function-key-map' but which are likely to be relevant to +every created console should be created in `function-key-map-parent'. */ ); #ifdef HAVE_TTY diff -r dc88f282ddc3 -r 3d1f8f0e690f src/lisp.h --- a/src/lisp.h Fri Jun 24 19:59:35 2011 +0100 +++ b/src/lisp.h Sat Jun 25 14:00:48 2011 +0100 @@ -5418,6 +5418,7 @@ EXFUN (Fkey_description, 1); EXFUN (Flookup_key, 3); EXFUN (Fmake_sparse_keymap, 1); +EXFUN (Fset_keymap_parents, 2); void where_is_to_char (Lisp_Object, Eistring *);