Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

experiments with xmodmap

2 views
Skip to first unread message

Spiros Bousbouras

unread,
Apr 28, 2023, 11:06:35 AM4/28/23
to
I have a Cherry QWERTY keyboard which has the usual keys and some unusual
ones which include a key with a calculator symbol on it. I will be referring
to this as CalcKey. CalcKey doesn't do anything as a default so I decided to
experiment with making it do something. xev says that it has keycode 161.
After some experiments where I wasn't getting exactly what I was expecting ,
I decided to make CalcKey reproduce precisely the behaviour or a preexisting
key , in particular the following line from the output of xmodmap -pke :

keycode 19 = 0 parenright braceright degree braceright degree

The specific key (which is the common 0 key on top of a QWERTY keyboard)
produces

No modifier 0
Shift )
Control 0
Alt ° (degree symbol , code 176 in ISO-8859-1)
AltGr }

(My keyboard also has 2 keys with the MS Windows logo but I don't know if
these count as modifier keys. They don't seem to modify the output of any
key but xev says they are Super_L and Super_R .Anyway , they are not
very relevant to this question)

So I did

xmodmap -e 'keycode 161 = 0 parenright braceright degree braceright degree'

Now CalcKey gives

No modifier 0
Shift )
Control 0
Alt ° (degree symbol , code 176 in ISO-8859-1)
AltGr 0

Note the difference with what the 0 key produces. So do you have any
explanation as to what is happening ?

xmodmap -pke | grep braceright
gives
keycode 19 = 0 parenright braceright degree braceright degree
keycode 35 = bracketright braceright dead_tilde dead_macron dead_tilde dead_macron
keycode 161 = 0 parenright braceright degree braceright degree

so my modification seems to have succeeded. Nonetheless , the 2 keys do not
behave the same. I get the different behaviour between 0 key and CalcKey with
2 different terminal emulators and graphical vim .

And some related questions : can I give xmodmap an octet to output ? For
example

a=$'\141' ; xmodmap -e "keycode 161 = $a"

works and makes CalcKey output a but

a=$'\377' ; xmodmap -e "keycode 161 = $a"

produces

xmodmap: commandline:1: bad keysym name 'ÿ' in keysym list
xmodmap: 1 error encountered, aborting.


Which Xlib man pages should I look at to understand the mechanisms
involved at a deeper level ? In particular which Xlib function
does xmodmap use to edit the modifier map ? XRebindKeysym() only
modifies what's happening for the application which called it.

--
The trouble with programmers is that you can never tell what a
programmer is doing until it's too late.
Seymour Cray

Eli the Bearded

unread,
Apr 28, 2023, 4:26:33 PM4/28/23
to
In comp.windows.x, Spiros Bousbouras <spi...@gmail.com> wrote:
> I have a Cherry QWERTY keyboard which has the usual keys and some unusual
> ones which include a key with a calculator symbol on it. I will be referring
> to this as CalcKey. CalcKey doesn't do anything as a default so I decided to
> experiment with making it do something. xev says that it has keycode 161.
> After some experiments where I wasn't getting exactly what I was expecting ,
> I decided to make CalcKey reproduce precisely the behaviour or a preexisting
> key , in particular the following line from the output of xmodmap -pke :
>
> keycode 19 = 0 parenright braceright degree braceright degree

My xmodmap manpage says up to eight keysyms can be assigned to a keycode
but "the last four are not used in any major X server implementation."
This may be a case of the documentation being out of date.

> The specific key (which is the common 0 key on top of a QWERTY keyboard)
> produces
>
> No modifier 0
> Shift )
> Control 0
> Alt ° (degree symbol , code 176 in ISO-8859-1)
> AltGr }
>
> (My keyboard also has 2 keys with the MS Windows logo but I don't know if
> these count as modifier keys. They don't seem to modify the output of any
> key but xev says they are Super_L and Super_R .Anyway , they are not
> very relevant to this question)

The xev output is telling you, yes, those are modifiers.

> So I did
>
> xmodmap -e 'keycode 161 = 0 parenright braceright degree braceright degree'
>
> Now CalcKey gives
>
> No modifier 0
> Shift )
> Control 0
> Alt ° (degree symbol , code 176 in ISO-8859-1)
> AltGr 0
>
> Note the difference with what the 0 key produces. So do you have any
> explanation as to what is happening ?

I don't know, but I suspect that something is happening on a different
layer than xmodmap operates.

> And some related questions : can I give xmodmap an octet to output ? For
> example

Use Uxxxx for four digit Unicode codepoints or Uxxxxxx for six digit
Unicode codepoints.

> Which Xlib man pages should I look at to understand the mechanisms
> involved at a deeper level ? In particular which Xlib function
> does xmodmap use to edit the modifier map ? XRebindKeysym() only
> modifies what's happening for the application which called it.

I can't say for sure. I'd start looking at the source for xmodmap and
xev for changing them and looking up them. I know I have seen xev
versions that can look up modifiers and keysyms for keyboard events.

Elijah
------
has modified xev for personal use in the past
0 new messages