Wed 23 Jul 2008 07:04:54 AM UTC, comment #7:
Ok, I see what you missed... we're getting closer to it :)
(Sorry it's gonna be long)
First, I don't use any input-method program. My dead keys and key composition rules are those from standard Xorg keyboard layout.
More precisely, my layout is:
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "fr"
But I think you don't have to switch to this layout for testing. Dead keys are specific to it, but the same composition rules should be available in any layout (except where disabled).
I don't think locale is important either; It should matter to vile for file-encoding purpose, but not to Xorg's keyboard driver.
Now, to the "composition" thing.
Composing keys is the act of successively typing the compose-sequence-start key followed by 2 or more other keys. (each typing is press-release, you must not hold the compose key while typing other keys, like you would do with Alt Ctrl or Shift)
On my layout, Multi_key is mapped to keycode 109 which is originally Control_R (french keyboard). Additionally this key need not be mapped as a modifier, thus I also do:
echo "remove control = Multi_key" | xmodmap -
Then I can do the following sample combinations:
Multi_key ' e -> é
Multi_key ' E -> É
Multi_key o e -> œ
Multi_key : - -> ÷
Multi_key - n -> ñ
Multi_key / o -> ø
Multi_key - , -> ¬
(and many more)
What you did looks like some form of simple mode shift, like Alt-q (which is mapped to another symbol on my layout). This is confirmed by my keysymdef.h which tells 0xffe9 is Alt_L. This works in all xvile versions so far, but this is definitely not key composition...
I tried to build with --with-trace too but then didn't understood what's going on in xvile 9.6l or 9.7, since it looks like mashing keycodes somewhat.
Maybe it's more clear with xev (though what it does doesn't look like XIM -- I'm lost):
KeyPress event, serial 31, synthetic NO, window 0x4a00001,
root 0x45, subw 0x0, time 1319396824, (12,-179), root:(1229,664),
state 0x10, keycode 109 (keysym 0xff20, Multi_key), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: True
KeyRelease event, serial 31, synthetic NO, window 0x4a00001,
root 0x45, subw 0x0, time 1319396888, (12,-179), root:(1229,664),
state 0x14, keycode 109 (keysym 0xff20, Multi_key), same_screen YES,
XLookupString gives 0 bytes:
KeyPress event, serial 31, synthetic NO, window 0x4a00001,
root 0x45, subw 0x0, time 1319397224, (12,-179), root:(1229,664),
state 0x10, keycode 13 (keysym 0x27, apostrophe), same_screen YES,
XLookupString gives 1 bytes: (27) "'"
XmbLookupString gives 1 bytes: (27) "'"
XFilterEvent returns: True
KeyRelease event, serial 31, synthetic NO, window 0x4a00001,
root 0x45, subw 0x0, time 1319397304, (12,-179), root:(1229,664),
state 0x10, keycode 13 (keysym 0x27, apostrophe), same_screen YES,
XLookupString gives 1 bytes: (27) "'"
KeyPress event, serial 31, synthetic NO, window 0x4a00001,
root 0x45, subw 0x0, time 1319397608, (12,-179), root:(1229,664),
state 0x10, keycode 26 (keysym 0x65, e), same_screen YES,
XLookupString gives 1 bytes: (65) "e"
XmbLookupString gives 1 bytes: (65) "e"
XFilterEvent returns: True
KeyPress event, serial 31, synthetic NO, window 0x4a00001,
root 0x45, subw 0x0, time 1319397608, (12,-179), root:(1229,664),
state 0x10, keycode 0 (keysym 0xe9, eacute), same_screen YES,
XKeysymToKeycode returns keycode: 11
XLookupString gives 0 bytes:
XmbLookupString gives 1 bytes: (e9) "é"
XFilterEvent returns: False
KeyRelease event, serial 31, synthetic NO, window 0x4a00001,
root 0x45, subw 0x0, time 1319397688, (12,-179), root:(1229,664),
state 0x10, keycode 26 (keysym 0x65, e), same_screen YES,
XLookupString gives 1 bytes: (65) "e"
The case of dead keys is different because the compose-sequence-start key doesn't have to be typed, it's something like:
^ e -> ê (^ is a key by itself on french keyboard)
In xev this gives:
KeyPress event, serial 31, synthetic NO, window 0x4a00001,
root 0x45, subw 0x0, time 1320900072, (865,339), root:(866,390),
state 0x10, keycode 34 (keysym 0xfe52, dead_circumflex), same_screen YES,
XLookupString gives 1 bytes: (5e) "^"
XmbLookupString gives 0 bytes:
XFilterEvent returns: True
KeyRelease event, serial 31, synthetic NO, window 0x4a00001,
root 0x45, subw 0x0, time 1320900136, (865,339), root:(866,390),
state 0x10, keycode 34 (keysym 0xfe52, dead_circumflex), same_screen YES,
XLookupString gives 1 bytes: (5e) "^"
KeyPress event, serial 31, synthetic NO, window 0x4a00001,
root 0x45, subw 0x0, time 1320900376, (865,339), root:(866,390),
state 0x10, keycode 26 (keysym 0x65, e), same_screen YES,
XLookupString gives 1 bytes: (65) "e"
XmbLookupString gives 1 bytes: (65) "e"
XFilterEvent returns: True
KeyPress event, serial 31, synthetic NO, window 0x4a00001,
root 0x45, subw 0x0, time 1320900376, (865,339), root:(866,390),
state 0x10, keycode 0 (keysym 0xea, ecircumflex), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 1 bytes: (ea) "ê"
XFilterEvent returns: False
KeyRelease event, serial 31, synthetic NO, window 0x4a00001,
root 0x45, subw 0x0, time 1320900440, (865,339), root:(866,390),
state 0x10, keycode 26 (keysym 0x65, e), same_screen YES,
XLookupString gives 1 bytes: (65) "e"
|