Jeff Hostetler wrote:
> wow!  and i thought i was confused before....
Nobody really understands X keyboard model. Don't be depressed :-)
> let me see if i understand:  on your keyboard, the left ALT key
> (keysym ALT_L) is reported as the Mod4 modified.  and the Meta
> keys (keysyms Meta_L & Meta_R) are reported as the Mod1 modifier.
Sun's keyboards are notorius. This is not a default, though. I've
set it the way I want it. IIRC, X spec says that ALT key is
identified by having one of the modifier bits and either Alt_L
or Alt_R KeySym associated with it. The same goes for Meta.
I didn't write anything about handling Compose characters before.
There are two reasons for this. First, on every system I've seen,
that works with Latin 1 only. Second, the whole concept is ridiculous,
because you have to press 3 keys to get one character. It's only
good if you're writing in two languages at the same time, so your
keyboard probably won't have enough keys for both.
This is the physical layout of the last row on my keyboard (with
the inscriptions on the keys):
<Caps Lock><Alt><Meta><Space><Meta><Compose><Alt Graph>
Keys I've marked with Meta actually have a diamond sign written on
them (something like <>).
I don't even know if the defaults are the same for CDE and
Open Windows. And it's very likely that various L10N settings
have different KeySyms and modifiers by default.
> it was my intention to only support 'shift', 'control' and 'alt',
> so no i hadn't planned anything for Meta (or Super or Hyper :-)
I thought so, but X spec says that ALT is not "whichever key that
happens to have Mod1 associated :-).
> could you send me the output of 'xmodmap -pk' and 'xmodmap -pke'
> -- i'd like to see how they compare with my system.
They are in the attachements, although I'll probably change some
of that RSN. If you want the default settings, let me know. Just don't
ask me to give you the settings for each L10N environment. Login
scripts are messing with keys in a strange (and sometimes utterly
broken) ways. That is a keyboard localized by me, since Sun's Croatian
localization is completely useless.
> also, could you try a small code mod for me?  take a look at
> abi/src/ev/unix/ev_UnixKeyboard.cpp.  search for 'MOD1'.  right
> after the:
> 	if (e->state & GDK_MOD1_MASK)
> 		state |= EV_EMS_ALT;
> could you add:
> 	if (e->state & GDK_MOD4_MASK)
> 		state |= EV_EMS_ALT;
> 
> and see if everything works as it should.  with this both ALT and META
> should behave identically.
They do. However, that's only because today I happen to have Mod4 on Meta.
Tomorrow it might be Mod3. I think you should (on startup) ask X server
about the keys which have Alt_L, ALt_R, Meta_L and Meta_R KeySyms and
then pick up Mod flags from them. So it will all work untill I decide
to write something in Franch. Then I'll click on a certain icon and
the keyboard would change completely. But, there is an X event to
catch when this happens, I think. Yes, I hate X keyboard model, too. :-)
-- 
 .-.   .-.    Life is a sexually transmitted disease.
(_  \ /  _)
     |        dave@srce.hr
     |        dave@fly.cc.fer.hr
--MGYHOYXEY6WxJCY8
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=xmodmap-pk
There are 5 KeySyms per KeyCode; KeyCodes range from 8 to 132.
    KeyCode	Keysym (Keysym)	...
    Value  	Value   (Name) 	...
      8    	0xffc8 (F11)	0xffc8 (F11)	0xff69 (Cancel)	
      9    	0x1005ff77 (SunAudioLowerVolume)	0x1005ff7b (SunVideoLowerBrightness)	
     10    	0xffc9 (F12)	0xffc9 (F12)	0xff66 (Redo)	
     11    	0x1005ff79 (SunAudioRaiseVolume)	0x1005ff7c (SunVideoRaiseBrightness)	
     12    	0xffbe (F1)	
     13    	0xffbf (F2)	
     14    	0xffc7 (F10)	
     15    	0xffc0 (F3)	
     16    	0x1005ff10 (SunF36)	
     17    	0xffc1 (F4)	
     18    	0x1005ff11 (SunF37)	
     19    	0xffc2 (F5)	
     20    	0xffe8 (Meta_R)	
     21    	0xffc3 (F6)	
     22    	
     23    	0xffc4 (F7)	
     24    	0xffc5 (F8)	
     25    	0xffc6 (F9)	
     26    	0xffe9 (Alt_L)	
     27    	0xff52 (Up)	
     28    	0xffd2 (F21)	0xffd2 (F21)	0xff13 (Pause)	0xff6b (Break)	
     29    	0xffd3 (F22)	0xffd3 (F22)	0xff61 (Print)	0x1005ff60 (SunSys_Req)	
     30    	0xffd4 (F23)	0xffd4 (F23)	0xff14 (Scroll_Lock)	
     31    	0xff51 (Left)	
     32    	0xffca (F13)	0xffca (F13)	0x1005ff70 (SunProps)	
     33    	0xffcb (F14)	0xffcb (F14)	0xff65 (Undo)	
     34    	0xff54 (Down)	
     35    	0xff53 (Right)	
     36    	0xff1b (Escape)	
     37    	0x0031 (1)	0x0021 (exclam)	
     38    	0x0032 (2)	0x0040 (at)	
     39    	0x0033 (3)	0x0023 (numbersign)	
     40    	0x0034 (4)	0x0024 (dollar)	0x00a4 (currency)	
     41    	0x0035 (5)	0x0025 (percent)	0x00a4 (currency)	
     42    	0x0036 (6)	0x005e (asciicircum)	
     43    	0x0037 (7)	0x0026 (ampersand)	
     44    	0x0038 (8)	0x002a (asterisk)	
     45    	0x0039 (9)	0x0028 (parenleft)	
     46    	0x0030 (0)	0x0029 (parenright)	
     47    	0x002d (minus)	0x005f (underscore)	
     48    	0x003d (equal)	0x002b (plus)	
     49    	0x0060 (grave)	0x007e (asciitilde)	0x00be (threequarters)	0x00ae (registered)	
     50    	0xff08 (BackSpace)	
     51    	0xff63 (Insert)	
     52    	0x1005ff78 (SunAudioMute)	0x1005ff7a (SunVideoDegauss)	
     53    	0xffd6 (F25)	0xffd6 (F25)	0xffaf (KP_Divide)	
     54    	0xffd7 (F26)	0xffd7 (F26)	0xffaa (KP_Multiply)	
     55    	0x1005ff76 (SunPowerSwitch)	0x1005ff7d (SunPowerSwitchShift)	
     56    	0xffcc (F15)	0xffcc (F15)	0x1005ff71 (SunFront)	
     57    	0xffff (Delete)	0xffff (Delete)	0xffae (KP_Decimal)	
     58    	0xffcd (F16)	0xffcd (F16)	0x1005ff72 (SunCopy)	
     59    	0xff50 (Home)	
     60    	0xff09 (Tab)	
     61    	0x0051 (Q)	
     62    	0x0057 (W)	
     63    	0x0065 (e)	0x0045 (E)	0x00a4 (currency)	
     64    	0x0052 (R)	
     65    	0x0054 (T)	
     66    	0x0059 (Y)	
     67    	0x0055 (U)	
     68    	0x0049 (I)	
     69    	0x004f (O)	
     70    	0x0050 (P)	
     71    	0x005b (bracketleft)	0x007b (braceleft)	0x00b9 (onesuperior)	0x00a9 (copyright)	
     72    	0x005d (bracketright)	0x007d (braceright)	0x00f0 (eth)	0x00d0 (ETH)	
     73    	0xffff (Delete)	
     74    	0xff20 (Multi_key)	
     75    	0xffd8 (F27)	0xffd8 (F27)	0xffb7 (KP_7)	0xff50 (Home)	
     76    	0xff52 (Up)	0xffd9 (F28)	0xffb8 (KP_8)	
     77    	0xffda (F29)	0xffda (F29)	0xffb9 (KP_9)	0xff55 (Prior)	
     78    	0xffd5 (F24)	0xffd5 (F24)	0xffad (KP_Subtract)	
     79    	0xffce (F17)	0xffce (F17)	0x1005ff73 (SunOpen)	
     80    	0xffcf (F18)	0xffcf (F18)	0x1005ff74 (SunPaste)	
     81    	0xff57 (End)	
     82    	
     83    	0xffe3 (Control_L)	
     84    	0x0041 (A)	
     85    	0x0053 (S)	
     86    	0x0044 (D)	
     87    	0x0046 (F)	
     88    	0x0047 (G)	
     89    	0x0048 (H)	
     90    	0x004a (J)	
     91    	0x004b (K)	
     92    	0x004c (L)	
     93    	0x003b (semicolon)	0x003a (colon)	0x00e8 (egrave)	0x00c8 (Egrave)	
     94    	0x0027 (apostrophe)	0x0022 (quotedbl)	0x00e6 (ae)	0x00c6 (AE)	
     95    	0x005c (backslash)	0x007c (bar)	0x00a6 (brokenbar)	
     96    	0xff0d (Return)	
     97    	0xff8d (KP_Enter)	
     98    	0xff51 (Left)	0xffdb (F30)	0xffb4 (KP_4)	
     99    	0xffdc (F31)	0xffdc (F31)	0xffb5 (KP_5)	
    100    	0xff53 (Right)	0xffdd (F32)	0xffb6 (KP_6)	
    101    	0xff9e (KP_Insert)	0xff9e (KP_Insert)	0xffb0 (KP_0)	
    102    	0xffd0 (F19)	0xffd0 (F19)	0xff68 (Find)	
    103    	0xff55 (Prior)	
    104    	0xffd1 (F20)	0xffd1 (F20)	0x1005ff75 (SunCut)	
    105    	0xff7f (Num_Lock)	
    106    	0xffe1 (Shift_L)	
    107    	0x005a (Z)	
    108    	0x0058 (X)	
    109    	0x0043 (C)	
    110    	0x0056 (V)	
    111    	0x0042 (B)	
    112    	0x004e (N)	
    113    	0x004d (M)	
    114    	0x002c (comma)	0x003c (less)	
    115    	0x002e (period)	0x003e (greater)	
    116    	0x002f (slash)	0x003f (question)	
    117    	0xffe2 (Shift_R)	
    118    	
    119    	0xffde (F33)	0xffde (F33)	0xffb1 (KP_1)	0xff57 (End)	
    120    	0xff54 (Down)	0xffdf (F34)	0xffb2 (KP_2)	
    121    	0xffe0 (F35)	0xffe0 (F35)	0xffb3 (KP_3)	0xff56 (Next)	
    122    	
    123    	
    124    	
    125    	0xff6a (Help)	
    126    	0xffe5 (Caps_Lock)	
    127    	0xffe7 (Meta_L)	
    128    	0x0020 (space)	
    129    	0xff7e (Mode_switch)	
    130    	0xff56 (Next)	
    131    	
    132    	0xffab (KP_Add)	
--MGYHOYXEY6WxJCY8
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=xmodmap-pke
keycode   8 = F11 F11 Cancel
keycode   9 = SunAudioLowerVolume SunVideoLowerBrightness
keycode  10 = F12 F12 Redo
keycode  11 = SunAudioRaiseVolume SunVideoRaiseBrightness
keycode  12 = F1
keycode  13 = F2
keycode  14 = F10
keycode  15 = F3
keycode  16 = SunF36
keycode  17 = F4
keycode  18 = SunF37
keycode  19 = F5
keycode  20 = Meta_R
keycode  21 = F6
keycode  22 =
keycode  23 = F7
keycode  24 = F8
keycode  25 = F9
keycode  26 = Alt_L
keycode  27 = Up
keycode  28 = F21 F21 Pause Break
keycode  29 = F22 F22 Print SunSys_Req
keycode  30 = F23 F23 Scroll_Lock
keycode  31 = Left
keycode  32 = F13 F13 SunProps
keycode  33 = F14 F14 Undo
keycode  34 = Down
keycode  35 = Right
keycode  36 = Escape
keycode  37 = 1 exclam
keycode  38 = 2 at
keycode  39 = 3 numbersign
keycode  40 = 4 dollar currency
keycode  41 = 5 percent currency
keycode  42 = 6 asciicircum
keycode  43 = 7 ampersand
keycode  44 = 8 asterisk
keycode  45 = 9 parenleft
keycode  46 = 0 parenright
keycode  47 = minus underscore
keycode  48 = equal plus
keycode  49 = grave asciitilde threequarters registered
keycode  50 = BackSpace
keycode  51 = Insert
keycode  52 = SunAudioMute SunVideoDegauss
keycode  53 = F25 F25 KP_Divide
keycode  54 = F26 F26 KP_Multiply
keycode  55 = SunPowerSwitch SunPowerSwitchShift
keycode  56 = F15 F15 SunFront
keycode  57 = Delete Delete KP_Decimal
keycode  58 = F16 F16 SunCopy
keycode  59 = Home
keycode  60 = Tab
keycode  61 = Q
keycode  62 = W
keycode  63 = e E currency
keycode  64 = R
keycode  65 = T
keycode  66 = Y
keycode  67 = U
keycode  68 = I
keycode  69 = O
keycode  70 = P
keycode  71 = bracketleft braceleft onesuperior copyright
keycode  72 = bracketright braceright eth ETH
keycode  73 = Delete
keycode  74 = Multi_key
keycode  75 = F27 F27 KP_7 Home
keycode  76 = Up F28 KP_8
keycode  77 = F29 F29 KP_9 Prior
keycode  78 = F24 F24 KP_Subtract
keycode  79 = F17 F17 SunOpen
keycode  80 = F18 F18 SunPaste
keycode  81 = End
keycode  82 =
keycode  83 = Control_L
keycode  84 = A
keycode  85 = S
keycode  86 = D
keycode  87 = F
keycode  88 = G
keycode  89 = H
keycode  90 = J
keycode  91 = K
keycode  92 = L
keycode  93 = semicolon colon egrave Egrave
keycode  94 = apostrophe quotedbl ae AE
keycode  95 = backslash bar brokenbar
keycode  96 = Return
keycode  97 = KP_Enter
keycode  98 = Left F30 KP_4
keycode  99 = F31 F31 KP_5
keycode 100 = Right F32 KP_6
keycode 101 = KP_Insert KP_Insert KP_0
keycode 102 = F19 F19 Find
keycode 103 = Prior
keycode 104 = F20 F20 SunCut
keycode 105 = Num_Lock
keycode 106 = Shift_L
keycode 107 = Z
keycode 108 = X
keycode 109 = C
keycode 110 = V
keycode 111 = B
keycode 112 = N
keycode 113 = M
keycode 114 = comma less
keycode 115 = period greater
keycode 116 = slash question
keycode 117 = Shift_R
keycode 118 =
keycode 119 = F33 F33 KP_1 End
keycode 120 = Down F34 KP_2
keycode 121 = F35 F35 KP_3 Next
keycode 122 =
keycode 123 =
keycode 124 =
keycode 125 = Help
keycode 126 = Caps_Lock
keycode 127 = Meta_L
keycode 128 = space
keycode 129 = Mode_switch
keycode 130 = Next
keycode 131 =
keycode 132 = KP_Add
--MGYHOYXEY6WxJCY8--