From xemacs-m  Fri Jul 11 05:05:53 1997
Received: from frege.math.ethz.ch (root@frege-d-math-north-g-west.math.ethz.ch [129.132.145.3])
	by xemacs.org (8.8.5/8.8.5) with SMTP id FAA18484;
	Fri, 11 Jul 1997 05:05:51 -0500 (CDT)
Received: from midget.math.ethz.ch (vroonhof@midget [129.132.145.4]) by frege.math.ethz.ch (8.6.12/Main-STAT-mailer) with ESMTP id MAA07640; Fri, 11 Jul 1997 12:03:44 +0200
Received: (vroonhof@localhost) by midget.math.ethz.ch (8.6.12/D-MATH-client) id MAA22089; Fri, 11 Jul 1997 12:02:07 +0200
To: Jamie Zawinski <jwz@netscape.com>, xemacs-beta@xemacs.org,
        steve@xemacs.org
Subject: Re: Dead_Tilde
References: <33AFB192.F5803C95@onb.ac.at> 	    <m23eq663z9.fsf@dwarf.bb.bawue.de> <kigafke8qwq.fsf@jagor.srce.hr> 	    <m2en9l3ero.fsf@dwarf.bb.bawue.de> <5pi961$5ja$1@held.mind.de> <33C35D7B.35E9DDBA@netscape.com> <byn2nwo2yf.fsf@midget.math.ethz.ch> <33C4A381.ACD3F9A1@netscape.com> <byk9iyu986.fsf@midget.math.ethz.ch> <33C57BBB.3555906C@netscape.com>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: multipart/mixed;
 boundary="Multipart_Fri_Jul_11_12:02:06_1997-1"
Content-Transfer-Encoding: 7bit
From: Jan Vroonhof <vroonhof@math.ethz.ch>
Date: 11 Jul 1997 12:02:06 +0200
In-Reply-To: Jamie Zawinski's message of Thu, 10 Jul 1997 17:18:03 -0700
Message-ID: <by4ta1vrdt.fsf@midget.math.ethz.ch>
Lines: 376
X-Mailer: Gnus v5.4.55/XEmacs 19.15

--Multipart_Fri_Jul_11_12:02:06_1997-1
Content-Type: text/plain; charset=US-ASCII

Jamie Zawinski <jwz@netscape.com> writes:

> Right, so you're saying that when embedded in a key sequence, the
> x-compose simulation of a compose key doesn't behave as xlib would 
> have -- and that's true (it hadn't occurred to me.)

That's what I was saying.

> I think the nature of the bug is that Multi_key is bound in global-map,
> rather than function-key-map.  That is, these sequences should edit the
> input stream, rather than being top-level bindings.  (I haven't tried
> this, but I think that's probably the right approach to take, if someone
> wants to try and make it work better.)

I tried it and it seems to work. Patch below. (includes probable xfree86
keysyms).

It still needs some improvements

1. Currently compose-help doesn't work in an inferior keymap.
2. It would be nice to have this autoloaded (or preloaded or whatever).
3. References to xkeycaps should be updated.

Jan

P.S. Patch (has had 10 minutes of testing. Seems to work so far).

--Multipart_Fri_Jul_11_12:02:06_1997-1
Content-Type: application/octet-stream; type=patch
Content-Disposition: attachment; filename="x-compose.patch"
Content-Transfer-Encoding: 8bit

--- x-compose.el.orig	Sat Jan 11 23:10:37 1997
+++ x-compose.el	Fri Jul 11 11:54:46 1997
@@ -1,5 +1,5 @@
 ;; Compose-key processing in emacs.
-;; Copyright (C) 1992, 1993 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1993, 1997 Free Software Foundation, Inc.
 
 ;; This file is part of XEmacs.
 
@@ -18,6 +18,11 @@
 ;; Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 
 ;;; created by jwz, 14-jun-92.
+;;; changed by Heiko Muenkel, 11-jun-97: Fixed the degree bug.
+;;; changed by Jan Vroonhof, July 1997: Use function-key-map instead
+;;;                                     of global map.
+;;;                                     Preliminary support for
+;;;                                     XFree86 deadkeys
 
 ;;; This file implements DEC-, OpenWindows-, and HP-compatible "Compose"
 ;;; processing for XEmacs.  
@@ -94,20 +99,28 @@
 
 ;;; The command `compose-key' exists so that this file may be autoloaded.
 ;;;this doesn't work yet###autoload
-(define-function 'compose-key compose-map)
+;; (define-function 'compose-key compose-map)
 
 ;; The "Compose" key:
 ;; (keysym is lower case because we downcase everything in the Symbol font...)
 ;;
 ;;;this doesn't work yet###autoload
-(define-key global-map [multi-key]	'compose-key)
+;; Ditched JV, (define-key function-key-map [multi-key]	'compose-key)
+(define-key function-key-map [multi-key]	compose-map)
 
+;; The following is necessary, because one can't rebind [degree]
+;; and use it to insert the degree sign!
+(defun compose-insert-degree ()
+  "Inserts a degree sign."
+  (interactive)
+  (insert ?\260))
+
 ;; The "Dead" keys:
 ;;
-(define-key global-map [acute]		compose-acute-map)
-(define-key global-map [cedilla]	compose-cedilla-map)
-(define-key global-map [diaeresis]	compose-diaeresis-map)
-(define-key global-map [degree]		compose-ring-map)
+(define-key function-key-map [acute]		compose-acute-map)
+(define-key function-key-map [cedilla]		compose-cedilla-map)
+(define-key function-key-map [diaeresis]	compose-diaeresis-map)
+(define-key function-key-map [degree]		compose-ring-map)
 
 ;; The dead keys as seen by the "Compose" map:
 ;;
@@ -143,126 +156,178 @@
 ;; Sun according to MIT:
 ;;
 (cond ((x-valid-keysym-name-p "SunFA_Acute")
-       (define-key global-map  [SunFA_Acute]		compose-acute-map)
+       (define-key function-key-map  [SunFA_Acute]
+	 compose-acute-map) 
        (define-key compose-map [SunFA_Acute]		compose-acute-map)
-       (define-key global-map  [SunFA_Grave]		compose-grave-map)
+       (define-key function-key-map  [SunFA_Grave]
+	 compose-grave-map) 
        (define-key compose-map [SunFA_Grave]		compose-grave-map)
-       (define-key global-map  [SunFA_Cedilla]		compose-cedilla-map)
+       (define-key function-key-map  [SunFA_Cedilla]
+	 compose-cedilla-map) 
        (define-key compose-map [SunFA_Cedilla]		compose-cedilla-map)
-       (define-key global-map  [SunFA_Diaeresis]	compose-diaeresis-map)
+       (define-key function-key-map  [SunFA_Diaeresis]	compose-diaeresis-map)
        (define-key compose-map [SunFA_Diaeresis]	compose-diaeresis-map)
-       (define-key global-map  [SunFA_Circum]		compose-circumflex-map)
+       (define-key function-key-map  [SunFA_Circum]
+	 compose-circumflex-map) 
        (define-key compose-map [SunFA_Circum]		compose-circumflex-map)
-       (define-key global-map  [SunFA_Tilde]		compose-tilde-map)
+       (define-key function-key-map  [SunFA_Tilde]
+	 compose-tilde-map) 
        (define-key compose-map [SunFA_Tilde]		compose-tilde-map)
        ))
 
 ;; Sun according to OpenWindows 2:
 ;;
 (cond ((x-valid-keysym-name-p "Dead_Grave")
-       (define-key global-map  [Dead_Grave]		compose-grave-map)
+       (define-key function-key-map  [Dead_Grave]
+	 compose-grave-map) 
        (define-key compose-map [Dead_Grave]		compose-grave-map)
-       (define-key global-map  [Dead_Circum]		compose-circumflex-map)
+       (define-key function-key-map  [Dead_Circum]
+	 compose-circumflex-map) 
        (define-key compose-map [Dead_Circum]		compose-circumflex-map)
-       (define-key global-map  [Dead_Tilde]		compose-tilde-map)
+       (define-key function-key-map  [Dead_Tilde]
+	 compose-tilde-map) 
        (define-key compose-map [Dead_Tilde]		compose-tilde-map)
        ))
 
 ;; Sun according to OpenWindows 3:
 ;;
 (cond ((x-valid-keysym-name-p "SunXK_FA_Acute")
-       (define-key global-map  [SunXK_FA_Acute]		compose-acute-map)
+       (define-key function-key-map  [SunXK_FA_Acute]
+	 compose-acute-map) 
        (define-key compose-map [SunXK_FA_Acute]		compose-acute-map)
-       (define-key global-map  [SunXK_FA_Grave]		compose-grave-map)
+       (define-key function-key-map  [SunXK_FA_Grave]
+	 compose-grave-map) 
        (define-key compose-map [SunXK_FA_Grave]		compose-grave-map)
-       (define-key global-map  [SunXK_FA_Cedilla]	compose-cedilla-map)
+       (define-key function-key-map  [SunXK_FA_Cedilla]	compose-cedilla-map)
        (define-key compose-map [SunXK_FA_Cedilla]	compose-cedilla-map)
-       (define-key global-map  [SunXK_FA_Diaeresis]	compose-diaeresis-map)
+       (define-key function-key-map  [SunXK_FA_Diaeresis]
+	 compose-diaeresis-map) 
        (define-key compose-map [SunXK_FA_Diaeresis]	compose-diaeresis-map)
-       (define-key global-map  [SunXK_FA_Circum]	compose-circumflex-map)
+       (define-key function-key-map  [SunXK_FA_Circum]	compose-circumflex-map)
        (define-key compose-map [SunXK_FA_Circum]	compose-circumflex-map)
-       (define-key global-map  [SunXK_FA_Tilde]		compose-tilde-map)
+       (define-key function-key-map  [SunXK_FA_Tilde]
+	 compose-tilde-map) 
        (define-key compose-map [SunXK_FA_Tilde]		compose-tilde-map)
        ))
 
 ;; DEC according to MIT:
 ;;
 (cond ((x-valid-keysym-name-p "Dacute_accent")
-       (define-key global-map  [Dacute_accent]		compose-acute-map)
+       (define-key function-key-map  [Dacute_accent]
+	 compose-acute-map) 
        (define-key compose-map [Dacute_accent]		compose-acute-map)
-       (define-key global-map  [Dgrave_accent]		compose-grave-map)
+       (define-key function-key-map  [Dgrave_accent]
+	 compose-grave-map) 
        (define-key compose-map [Dgrave_accent]		compose-grave-map)
-       (define-key global-map  [Dcedilla_accent]	compose-cedilla-map)
+       (define-key function-key-map  [Dcedilla_accent]	compose-cedilla-map)
        (define-key compose-map [Dcedilla_accent]	compose-cedilla-map)
-       (define-key global-map  [Dcircumflex_accent]	compose-circumflex-map)
+       (define-key function-key-map  [Dcircumflex_accent]
+	 compose-circumflex-map) 
        (define-key compose-map [Dcircumflex_accent]	compose-circumflex-map)
-       (define-key global-map  [Dtilde]			compose-tilde-map)
+       (define-key function-key-map  [Dtilde]
+	 compose-tilde-map) 
        (define-key compose-map [Dtilde]			compose-tilde-map)
-       (define-key global-map  [Dring_accent]		compose-ring-map)
+       (define-key function-key-map  [Dring_accent]
+	 compose-ring-map) 
        (define-key compose-map [Dring_accent]		compose-ring-map)
        ))
 
 ;; DEC according to OpenWindows 3:
 ;;
 (cond ((x-valid-keysym-name-p "DXK_acute_accent")
-       (define-key global-map  [DXK_acute_accent]	compose-acute-map)
+       (define-key function-key-map  [DXK_acute_accent]	compose-acute-map)
        (define-key compose-map [DXK_acute_accent]	compose-acute-map)
-       (define-key global-map  [DXK_grave_accent]	compose-grave-map)
+       (define-key function-key-map  [DXK_grave_accent]	compose-grave-map)
        (define-key compose-map [DXK_grave_accent]	compose-grave-map)
-       (define-key global-map  [DXK_cedilla_accent]	compose-cedilla-map)
+       (define-key function-key-map  [DXK_cedilla_accent]
+	 compose-cedilla-map) 
        (define-key compose-map [DXK_cedilla_accent]	compose-cedilla-map)
-       (define-key global-map  [DXK_circumflex_accent]	compose-circumflex-map)
+       (define-key function-key-map  [DXK_circumflex_accent]
+	 compose-circumflex-map) 
        (define-key compose-map [DXK_circumflex_accent]	compose-circumflex-map)
-       (define-key global-map  [DXK_tilde]		compose-tilde-map)
+       (define-key function-key-map  [DXK_tilde]
+	 compose-tilde-map) 
        (define-key compose-map [DXK_tilde]		compose-tilde-map)
-       (define-key global-map  [DXK_ring_accent]	compose-ring-map)
+       (define-key function-key-map  [DXK_ring_accent]	compose-ring-map)
        (define-key compose-map [DXK_ring_accent]	compose-ring-map)
        ))
 
 ;; HP according to MIT:
 ;;
 (cond ((x-valid-keysym-name-p "hpmute_acute")
-       (define-key global-map  [hpmute_acute]		compose-acute-map)
+       (define-key function-key-map  [hpmute_acute]
+	 compose-acute-map) 
        (define-key compose-map [hpmute_acute]		compose-acute-map)
-       (define-key global-map  [hpmute_grave]		compose-grave-map)
+       (define-key function-key-map  [hpmute_grave]
+	 compose-grave-map) 
        (define-key compose-map [hpmute_grave]		compose-grave-map)
-       (define-key global-map  [hpmute_diaeresis]	compose-diaeresis-map)
+       (define-key function-key-map  [hpmute_diaeresis]	compose-diaeresis-map)
        (define-key compose-map [hpmute_diaeresis]	compose-diaeresis-map)
-       (define-key global-map  [hpmute_asciicircum]	compose-circumflex-map)
+       (define-key function-key-map  [hpmute_asciicircum]
+	 compose-circumflex-map) 
        (define-key compose-map [hpmute_asciicircum]	compose-circumflex-map)
-       (define-key global-map  [hpmute_asciitilde]	compose-tilde-map)
+       (define-key function-key-map  [hpmute_asciitilde]
+	 compose-tilde-map) 
        (define-key compose-map [hpmute_asciitilde]	compose-tilde-map)
        ))
 
 ;; HP according to OpenWindows 3:
 ;;
 (cond ((x-valid-keysym-name-p "hpXK_mute_acute")
-       (define-key global-map  [hpXK_mute_acute]	compose-acute-map)
+       (define-key function-key-map  [hpXK_mute_acute]	compose-acute-map)
        (define-key compose-map [hpXK_mute_acute]	compose-acute-map)
-       (define-key global-map  [hpXK_mute_grave]	compose-grave-map)
+       (define-key function-key-map  [hpXK_mute_grave]	compose-grave-map)
        (define-key compose-map [hpXK_mute_grave]	compose-grave-map)
-       (define-key global-map  [hpXK_mute_diaeresis]	compose-diaeresis-map)
+       (define-key function-key-map  [hpXK_mute_diaeresis]
+	 compose-diaeresis-map)
        (define-key compose-map [hpXK_mute_diaeresis]	compose-diaeresis-map)
-       (define-key global-map  [hpXK_mute_asciicircum]	compose-circumflex-map)
+       (define-key function-key-map  [hpXK_mute_asciicircum]
+	 compose-circumflex-map)
        (define-key compose-map [hpXK_mute_asciicircum]	compose-circumflex-map)
-       (define-key global-map  [hpXK_mute_asciitilde]	compose-tilde-map)
+       (define-key function-key-map  [hpXK_mute_asciitilde]
+	 compose-tilde-map)
        (define-key compose-map [hpXK_mute_asciitilde]	compose-tilde-map)
        ))
 
 ;; HP according to HP-UX 8.0:
 ;;
 (cond ((x-valid-keysym-name-p "XK_mute_acute")
-       (define-key global-map  [XK_mute_acute]		compose-acute-map)
+       (define-key function-key-map  [XK_mute_acute]
+	 compose-acute-map)    
        (define-key compose-map [XK_mute_acute]		compose-acute-map)
-       (define-key global-map  [XK_mute_grave]		compose-grave-map)
+       (define-key function-key-map  [XK_mute_grave]
+	 compose-grave-map) 
        (define-key compose-map [XK_mute_grave]		compose-grave-map)
-       (define-key global-map  [XK_mute_diaeresis]	compose-diaeresis-map)
+       (define-key function-key-map  [XK_mute_diaeresis]
+	 compose-diaeresis-map) 
        (define-key compose-map [XK_mute_diaeresis]	compose-diaeresis-map)
-       (define-key global-map  [XK_mute_asciicircum]	compose-circumflex-map)
+       (define-key function-key-map  [XK_mute_asciicircum]
+	 compose-circumflex-map) 
        (define-key compose-map [XK_mute_asciicircum]	compose-circumflex-map)
-       (define-key global-map  [XK_mute_asciitilde]	compose-tilde-map)
+       (define-key function-key-map
+	   [XK_mute_asciitilde]	compose-tilde-map)
        (define-key compose-map [XK_mute_asciitilde]	compose-tilde-map)
        ))
+;; Xfree seems to use lower case
+(cond ((x-valid-keysym-name-p "dead_tilde")
+       (define-key function-key-map  [dead_acute]
+	 compose-acute-map) 
+       (define-key compose-map [dead_acute]		compose-acute-map)
+       (define-key function-key-map  [dead_grave]
+	 compose-grave-map) 
+       (define-key compose-map [dead_grave]		compose-grave-map)
+       (define-key function-key-map  [dead_cedilla]	compose-cedilla-map)
+       (define-key compose-map [dead_cedilla]	compose-cedilla-map)
+       (define-key function-key-map  [dead_diaeresis]	compose-diaeresis-map)
+       (define-key compose-map [dead_diaeresis]	compose-diaeresis-map)
+       (define-key function-key-map  [dead_circum]	compose-circumflex-map)
+       (define-key compose-map [dead_circum]	compose-circumflex-map)
+       (define-key function-key-map  [dead_tilde]
+	 compose-tilde-map)  
+       (define-key compose-map [dead_tilde]		compose-tilde-map)
+       ))
+
+
 
 ;;; The contents of the "dead key" maps.  These are shared by the
 ;;; compose-map.
@@ -284,7 +349,8 @@
 (define-key compose-acute-map "y"	[yacute])
 
 (set-keymap-name compose-grave-map 'compose-grave-map)
-(define-key compose-grave-map " "	[grave])
+(define-key compose-grave-map " "	"`")
+(define-key compose-grave-map "`"	[grave])
 (define-key compose-grave-map "A"	[Agrave])
 (define-key compose-grave-map "E"	[Egrave])
 (define-key compose-grave-map "I"	[Igrave])
@@ -297,6 +363,7 @@
 (define-key compose-grave-map "u"	[ugrave])
 
 (set-keymap-name compose-cedilla-map 'compose-cedilla-map)
+(define-key compose-cedilla-map " "     ",")
 (define-key compose-cedilla-map ","	[cedilla])
 (define-key compose-cedilla-map "C"	[Ccedilla])
 (define-key compose-cedilla-map "c"	[ccedilla])
@@ -322,7 +389,7 @@
 (define-key compose-circumflex-map "!"	[brokenbar])
 (define-key compose-circumflex-map "-"	[macron])
 (define-key compose-circumflex-map "_"	[macron])
-(define-key compose-circumflex-map "0"	[degree])
+(define-key compose-circumflex-map "0"	'compose-insert-degree)
 (define-key compose-circumflex-map "1"	[onesuperior])
 (define-key compose-circumflex-map "2"	[twosuperior])
 (define-key compose-circumflex-map "3"	[threesuperior])
@@ -348,7 +415,7 @@
 (define-key compose-tilde-map "o"	[otilde])
 
 (set-keymap-name compose-ring-map 'compose-ring-map)
-(define-key compose-ring-map " "	[degree])
+(define-key compose-ring-map " "	'compose-insert-degree)
 (define-key compose-ring-map "A"	[Aring])
 (define-key compose-ring-map "a"	[aring])
 
@@ -363,7 +430,7 @@
 (define-key compose-map " ~"	"~")
 (define-key compose-map "  "	[nobreakspace])
 (define-key compose-map " \""	[diaeresis])
-(define-key compose-map " *"	[degree])
+(define-key compose-map " *"	'compose-insert-degree)
 
 (define-key compose-map "!!"	[exclamdown])
 (define-key compose-map "!^"	[brokenbar])
@@ -417,7 +484,7 @@
 (define-key compose-map "0c"	[copyright])
 (define-key compose-map "0R"	[registered])
 (define-key compose-map "0r"	[registered])
-(define-key compose-map "0^"	[degree])
+(define-key compose-map "0^"	'compose-insert-degree)
 
 (define-key compose-map "1^"	[onesuperior])
 (define-key compose-map "14"	[onequarter])

--Multipart_Fri_Jul_11_12:02:06_1997-1
Content-Type: text/plain; charset=US-ASCII






--Multipart_Fri_Jul_11_12:02:06_1997-1--

