APPROVE COMMIT
NOTE: This patch has been committed.
# HG changeset patch
# User Aidan Kehoe <kehoea(a)parhasard.net>
# 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  <kehoea(a)parhasard.net>
	* 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  <kehoea(a)parhasard.net>
	* 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  <kehoea(a)parhasard.net>
	* 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  <kehoea(a)parhasard.net>
+
+	* 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  <didier(a)xemacs.org>
 
 	From smitchel <smitchel(a)bnin.net>
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  <kehoea(a)parhasard.net>
+
+	* lispref/os.texi (Translating Input):
+	Document the just-added function-key-map-parent.
+
 2011-05-20  Jerry James  <james(a)xemacs.org>
 
 	* 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  <kehoea(a)parhasard.net>
+
+	* 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  <kehoea(a)parhasard.net>
 
 	* 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 @@
 \[#<keypress-event control-X> #<keypress-event f1>].  If [f1]
 were a prefix key, typing `ESC O P x' would return
 \[#<keypress-event f1> #<keypress-event x>].
+
+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 *);
 
-- 
‘Iodine deficiency was endemic in parts of the UK until, through what has been
described as “an unplanned and accidental public health triumph”, iodine was
added to cattle feed to improve milk production in the 1930s.’
(EN Pearce, Lancet, June 2011)
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://lists.xemacs.org/mailman/listinfo/xemacs-patches