mikep@sco.COM (Mike Patnode) (02/08/91)
After much review and comments from this newsgroup and the X conference,
I have rewritten this proposal. It now includes definitions for the
Lock keys as well as suggested 84 and 101 keysym keyboard maps.
Copies recieved by special interest parties and people who attended the BOF
(Version 2.0) do not have the Num lock modifier definition. I apologize
for that oversight.
Please let me hear your comments.
mp
----
Mike Patnode The Santa Cruz Operation
Software Engineer 400 Encinal Street
{ucscc,uunet}!sco!mikep mikep@sco.COM P.O. Box 1900
(408) 458-1422 Santa Cruz, CA 95061
------ cut here -----
Title : PC/AT Keyboard X Keysym Proposal
Revision : 2.1
Date : Jan 31 1991
Status : DRAFT - for review
Synopsis : This document describes a proposal for
standardizing the X11 Keysym mapping of
the IBM PC/AT Keyboard. The IBM 101
Keyboard is one of the most common
keyboards in the computer industry, and
has become very popular on X Terminals
and non-Intel hardware platforms. The
X11 Protocol is unable to describe the
AT Keyboard for two reasons. There are
not enough unique keysyms to describe
all the keys on the keyboard, and there
is not a sufficient mechanism to
consistently implement the Num Lock
key. This document proposes 12 new
keysyms to be added to the standard
encoding, a new Xlib implementation of
the Num Lock key and standard keysym
mapping tables for the IBM 101 and 84
key keyboards.
Author :
Mike Patnode
The Santa Cruz Operation
mikep@sco.com
Distribution : comp.windows.x
c 1991 The Santa Cruz Operation, Inc.
- 2 -
1. Summary
1.1 Introduction
Since the majority of X Window research and development has
been historically done on UNIX workstations there was never
a great deal of emphasis put upon Intel based personal
computers. Now, with the emergence of faster Intel 386 and
486 based machines, the PC/AT computer has become a viable
UNIX workstation. There are an increasing number of
software vendors who produce X servers for these machines,
as well as hardware manufactures who have adopted the IBM AT
keyboard layout. Furthermore, a complete set of standard
keysyms for the PC/AT keyboard will be needed to aid
portability in application binaries which comply with the
Intel386 Binary Compatibility Specification.
1.2 Document History
Rev. Date Description
_________________________________________________
1.0 5 Jan 91 Created Document. Posted to
comp.windows.x for comment.
1.1 13 Jan 91 Minor revisions. Presented at
MIT X Technical Conference,
i386 X Developer's BOF.
Distributed with USENET
comments attached.
2.0 31 Jan 91 Major revisions from X
Conference and BOF attendee
input. Added Num Lock
proposal and standard Keysym
layouts.
2.1 7 Feb 91 Defined Mod2 as the Num Lock
modifier entry.
1.3 Desired Functionality
The desired functionality of the AT numeric keypad has been
mostly defined by the DOS operating system and the IBM 84
key keyboard which proceeded it. Most i386 UNIX developers
(as well as many other UNIX platforms) are interested in
encouraging DOS developers to port their applications to
UNIX.
c 1991 The Santa Cruz Operation, Inc.
- 1 -
Although the actual implementation tended to differ between
hardware vendors, the effect was as follows. When pressed
by themselves, the keypad key scancodes would be interpreted
as cursor movement keys. If the Shift key was pressed, the
keys were interpreted as numeric keys. When the Num Lock
key is on, the exact opposite interpretation is done, with
the numeric values being the default and the cursor control
keys sent in combination with the Shift key.
c 1991 The Santa Cruz Operation, Inc.
- 2 -
2. New Keysyms
2.1 X11 Protocol KEYSYM Encoding
The first part of this document proposes 12 new keysyms to
be added to the X11 KEYSYM Standard Encoding, which is
defined in the X Protocol. As of Dec 10 1990, the public
review period for the X Protocol closed (ANSI working draft
standard X3H3.6/88-28R2). In the event that this document
is not taken into consideration by the working group, vendor
specific keysyms will be registered with the X Consortium.
2.2 Keypad Engravings
The main problem arises from the PC/AT numeric keypad. Each
of the numeric glyphs share a key with a cursor or page
control engraving. The X Keysym definition provides special
keysyms for most keypad keys which may also be present
elsewhere on the keyboard. It does not provide keypad
keysyms for the arrow or page controls keys. Hence, on the
IBM AT keyboard, an X programmer cannot easily distinguish
between the Up Arrow key and the Keypad Up Arrow key unless
the server writter provides non-standard or unintuitive
keysym names.
The simple solution is to create new standard keysyms for
the PC/AT keyboards. Not only are these keyboards in wide
spread use, but this will also aid X application programmers
who are trying to comply with the Intel386 BCS.
Since the additional keysyms are mostly for duplicate keys
on the keyboard, there should not be any loss of
functionality for existing applications. Applications which
were using non-standard methods to differentiate between the
keys may need to have old keymaps installed to be unaffected
by these changes.
2.3 New Keysyms
There are 2 main areas which this proposal covers. One is
simply a common key for which there is no keysym equivalent
defined. The second is the 11 keypad keys which have two
engravings each. The keycodes (hex values) used here are
unused in the current keysym definition. These values are
only suggestions and are not a requirement of the proposal.
c 1991 The Santa Cruz Operation, Inc.
- 3 -
There seems to be no X keysym which matches the SysReq key.
0xFF15 XK_Sys_Req System Request
Next is the PC/AT keypad. The current X keysym set already
defines some keypad keys such as KP_Enter and KP_Add. The
following keysyms are needed to complete the definition.
0xFF95 XK_KP_Home Keypad Home
0xFF96 XK_KP_Left Keypad Left Arrow
0xFF97 XK_KP_Up Keypad Up Arrow
0xFF98 XK_KP_Right Keypad Right Arrow
0xFF99 XK_KP_Down Keypad Down Arrow
0xFF9A XK_KP_Prior Keypad Page Up
0xFF9B XK_KP_Next Keypad Page Down
0xFF9C XK_KP_End Keypad End
0xFF9D XK_KP_Begin Keypad Begin (No engraving on AT keyboard)
0xFF9E XK_KP_Insert Keypad Insert
0xFF9F XK_KP_Delete Keypad Delete
Although PC/AT Keyboard does not have a unshifted engraving
on the center keypad key (numeric 5), this key is still used
by many DOS applications. The XK_KP_Begin keysym allows the
key to be easily differentiated from the numeric 5. This
also provides for AT keyboard variants which have a fifth
key centered between the arrow keys. Prior and Next are
used instead of "Page Up" and "Page Down" to remain
consistent with existing implementations. In order to cater
to developers familiar with the AT keyboard engravings the
following aliases should be added as well.
#define XK_Page_Up 0xFF55 /* alias for XK_Prior */
#define XK_Page_Down 0xFF56 /* alias for XK_Next */
#define XK_KP_Page_Up 0xFF9A /* alias for XK_KP_Prior */
#define XK_KP_Page_Down 0xFF9B /* alias for XK_KP_Next */
2.4 84 Key Keyboards
In order to maintain backwards compatibility with existing
keyboards, the keypad keysyms on the IBM 84 key keyboard
will remain the standard keysyms. Only XK_Sys_Req will be
added to the 84 keyboard map. XK_Begin is suggested for the
unshifted keysym on the center keypad key.
c 1991 The Santa Cruz Operation, Inc.
- 4 -
3. Lock Keys
3.1 Protocol Limitations
The Num Lock key is almost completely ignored by the X
Protocol. The one concession is that a keysym already
exists. According to the current Xlib and Protocol
specifications, Num Lock must be implemented by the client
application. This is an unacceptable solution. An
application should not have to deal with the Num Lock key
any more than it must deal with the Caps Lock key. The Num
Lock key is a function of the keyboard, and is often
implemented in the hardware itself. It violates the spirit
of X Window development to suggest that the application must
have some knowledge of the type of keyboard being used. The
Scroll Lock key suffers from some of the same problems, but
only that of implementing the actual locking mechanism.
Unfortunately, few AT keyboards were available to the X
Consortium when the Protocol was being finalized, hence this
problem was not brought into the light until now.
3.2 Num Lock Implementations
Many different approaches have been taken to attempt to deal
with the Num Lock key. The most common approach has been to
simply ignore the functionality, since no implementation is
suggested by the Protocol. Some servers send both a Key
Press and Release event while others only send the Press
event, followed by the Release event on the second press.
Most servers do turn on the LED associated with the key, but
very few actually change the keyboard mapping. Some simple
implementations set a modifier bit when the key is locked.
Two current implementations are presented here, followed by
a third which is a combination of the two.
3.2.1 Server KEYCODES
Thomas Roell's UNIX 386 X server takes a rather unique
approach to the Num Lock key. Tom added 11 more entries to
his server's Keysym table. These 11 entries are to be used
when the Num Lock key is pressed. Hence, pressing the Num
Lock key actually causes the same keys to have different
Keycodes. Unfortunately, this is a somewhat blatant
violation of the Protocol, in that a keycode no longer
represents a physical (or logical) key. Furthermore, it
prevents a client from being able to remap the keyboard
c 1991 The Santa Cruz Operation, Inc.
- 5 -
since the relationship between the different Keycodes cannot
not be known. Tom avoids setting a modifier bit for fear of
breaking applications which use default translations.
Translations are defined to be non-exclusive in the Xt
specification, hence they should not be affected by the
extra modifier bit.
3.2.2 MODE SWITCH
The AT&T XWin server developers found a hole in the X
Protocol which allows them to legally implement the Num Lock
key. The Mode Switch keysym allows for a second lock key
which changes the mapping of the keyboard. The original
intent was to provide a mechanism for multilingual keyboards
to switch languages, but this intent is not stated in the
Protocol definition. Furthermore, with new international
requirements it was found that one mode switch key would
probably not be sufficient for true multilingual support.
Thus multilingual use of the Mode Switch key will probably
become archaic with future X releases. With this in mind,
the AT&T developers simply mapped the Num Lock keycode to
XK_Mode_switch, and added a set of Group 2 keysym entries
for the numeric keypad keys. The Mode Switch key also
requires the use of a modifier bit.
3.2.3 Num Lock Switch The only problem with labeling the
Num Lock key as Mode Switch is one of semantics. It would
be much cleaner if the Num Lock key sent the XK_Num_Lock
keysym and acted as a Num Lock key, rather than the Num Lock
key sending the XK_Mode_switch keysym and acting as a Num
Lock. The simple solution is to modify the interpretation
of XK_Num_Lock at the Xlib level, such that it is
functionally equivalent to XK_Mode_switch. The actual
source changes are trivial.
Original code segment from lib/X/XKeyBind.c:InitModMap()
/* Now find any Mod<n> modifier acting as the Group modifier */
dpy->mode_switch = 0;
n *= 4;
for (i = 3*map->max_keypermod; i < n; i++) {
for (j = 0; j < dpy->keysyms_per_keycode; j++) {
sym = KeyCodetoKeySym(dpy, map->modifiermap[i], j);
! if (sym == XK_Mode_switch)
dpy->mode_switch |= 1 << (i / map->max_keypermod);
}
}
Suggested modification to lib/X/XKeyBind.c:InitModMap()
c 1991 The Santa Cruz Operation, Inc.
- 6 -
/* Now find any Mod<n> modifier acting as the Group modifier */
dpy->mode_switch = 0;
n *= 4;
for (i = 3*map->max_keypermod; i < n; i++) {
for (j = 0; j < dpy->keysyms_per_keycode; j++) {
sym = KeyCodetoKeySym(dpy, map->modifiermap[i], j);
! if (sym == XK_Mode_switch || sym == XK_Num_Lock)
dpy->mode_switch |= 1 << (i / map->max_keypermod);
}
}
Two more changes need to be applied to the server to
complete the Num Lock key functionality. These are
necessary for the above implementation.
+ The server should only send a Press event when Num Lock
is toggled on, and only send a Release event when the
key is toggled off.
+ If an LED labeled "Num Lock" exists on the keyboard, it
should be turned on and off in accordance with the
status of the key.
+ The Num_Lock keysym shall be defined as Mod2.
3.3 Scroll Lock
The actual semantics of the Scroll Lock key are poorly
defined, if they are defined at all. This should continue
to be left up to the client application, since no standard
interpretation has come to light. Yet, to be consistent
with the treatment of the Caps Lock and Num Lock keys, the
same rules need to be applied.
+ The server should only send a Press event when Scroll
Lock is toggled on, and only send a Release event when
the key is toggled off.
+ If an LED labeled "Scroll Lock" exists on the keyboard,
it should be turned on and off in accordance with the
status of the key.
c 1991 The Santa Cruz Operation, Inc.
- 7 -
3.4 Caps Lock
This is only included for completeness. The following is
not defined in the X Protocol, but was in the sample
implementation.
+ The server should only send a Press event when Caps
Lock is toggled on, and only send a Release event when
the key is toggled off.
+ If an LED labeled "Caps Lock" exists on the keyboard,
it should be turned on and off in accordance with the
status of the key.
c 1991 The Santa Cruz Operation, Inc.
- 8 -
4. Keyboard Mapping
4.1 84 Key Keyboard
The following is the suggested X Keysym mapping for the IBM
U.S. English 84 key keyboard. The numerical values
represent IBM XT scancodes. The third and fourth columns
are used by the Num Lock mode switch. Columns with only one
or two entries are expanded according to Section 5 of the
Protocol.
Scancode Group 1 Group 2
_______________________________________________________________________
1: XK_Escape
2: XK_1 XK_exclam
3: XK_2 XK_at
4: XK_3 XK_numbersign
5: XK_4 XK_dollar
6: XK_5 XK_percent
7: XK_6 XK_asciicircum
8: XK_7 XK_ampersand
9: XK_8 XK_asterisk
10: XK_9 XK_parenleft
11: XK_0 XK_parenright
12: XK_minus XK_underscore
13: XK_equal XK_plus
14: XK_BackSpace
15: XK_Tab
16: XK_Q
17: XK_W
18: XK_E
19: XK_R
20: XK_T
21: XK_Y
22: XK_U
23: XK_I
24: XK_O
25: XK_P
26: XK_bracketleft XK_braceleft
27: XK_bracketright XK_braceright
28: XK_Return
29: XK_Control_L
30: XK_A
31: XK_S
32: XK_D
33: XK_F
34: XK_G
35: XK_H
36: XK_J
37: XK_K
c 1991 The Santa Cruz Operation, Inc.
- 9 -
38: XK_L
39: XK_semicolon XK_colon
40: XK_quoteright XK_quotedbl
41: XK_quoteleft XK_asciitilde
42: XK_Shift_L
43: XK_backslash XK_bar
44: XK_Z
45: XK_X
46: XK_C
47: XK_V
48: XK_B
49: XK_N
50: XK_M
51: XK_comma XK_less
52: XK_period XK_greater
53: XK_slash XK_question
54: XK_Shift_R
55: XK_KP_Multiply XK_Print
56: XK_Alt_L
57: XK_space
58: XK_Caps_Lock
59: XK_F1
60: XK_F2
61: XK_F3
62: XK_F4
63: XK_F5
64: XK_F6
65: XK_F7
66: XK_F8
67: XK_F9
68: XK_F10
69: XK_Num_Lock
70: XK_Scroll_Lock
71: XK_Home XK_KP_7 XK_KP_7 XK_Home
72: XK_Up XK_KP_8 XK_KP_8 XK_Up
73: XK_Prior XK_KP_9 XK_KP_9 XK_Prior
74: XK_KP_Subtract
75: XK_Left XK_KP_4 XK_KP_4 XK_Left
76: XK_Begin XK_KP_5 XK_KP_5 XK_Begin
77: XK_Right XK_KP_6 XK_KP_6 XK_Right
78: XK_KP_Add
79: XK_End XK_KP_1 XK_KP_1 XK_End
80: XK_Down XK_KP_2 XK_KP_2 XK_Down
81: XK_Next XK_KP_3 XK_KP_3 XK_Next
82: XK_Insert XK_KP_0 XK_KP_0 XK_Insert
83: XK_Delete XK_KP_Decimal XK_KP_Decimal XK_Delete
84: XK_Sys_Req
c 1991 The Santa Cruz Operation, Inc.
- 10 -
4.2 101 Key Keyboard
The following is the suggested X Keysym mapping for the IBM
U.S. English 101 key keyboard. The numerical values
represent AT keyboard scancodes when in XT mode. Note that
some AT keyboard keys send multibyte scancode sequences.
The third and fourth columns are used by the Num Lock mode
switch. Columns with only one or two entries are expanded
according to Section 5 of the Protocol.
Scancode Group 1 Group 2
___________________________________________________________________________
1: XK_Escape
2: XK_1 XK_exclam
3: XK_2 XK_at
4: XK_3 XK_numbersign
5: XK_4 XK_dollar
6: XK_5 XK_percent
7: XK_6 XK_asciicircum
8: XK_7 XK_ampersand
9: XK_8 XK_asterisk
10: XK_9 XK_parenleft
11: XK_0 XK_parenright
12: XK_minus XK_underscore
13: XK_equal XK_plus
14: XK_BackSpace
15: XK_Tab
16: XK_Q
17: XK_W
18: XK_E
19: XK_R
20: XK_T
21: XK_Y
22: XK_U
23: XK_I
24: XK_O
25: XK_P
26: XK_bracketleft XK_braceleft
27: XK_bracketright XK_braceright
28: XK_Return
29: XK_Control_L
30: XK_A
31: XK_S
32: XK_D
33: XK_F
34: XK_G
35: XK_H
36: XK_J
37: XK_K
38: XK_L
39: XK_semicolon XK_colon
40: XK_quoteright XK_quotedbl
c 1991 The Santa Cruz Operation, Inc.
- 11 -
41: XK_quoteleft XK_asciitilde
42: XK_Shift_L
43: XK_backslash XK_bar
44: XK_Z
45: XK_X
46: XK_C
47: XK_V
48: XK_B
49: XK_N
50: XK_M
51: XK_comma XK_less
52: XK_period XK_greater
53: XK_slash XK_question
54: XK_Shift_R
55: XK_KP_Multiply
56: XK_Alt_L
57: XK_space
58: XK_Caps_Lock
59: XK_F1
60: XK_F2
61: XK_F3
62: XK_F4
63: XK_F5
64: XK_F6
65: XK_F7
66: XK_F8
67: XK_F9
68: XK_F10
69: XK_Num_Lock
70: XK_Scroll_Lock
71: XK_KP_Home XK_KP_7 XK_KP_7 XK_KP_Home
72: XK_KP_Up XK_KP_8 XK_KP_8 XK_KP_Up
73: XK_KP_Prior XK_KP_9 XK_KP_9 XK_KP_Prior
74: XK_KP_Subtract
75: XK_KP_Left XK_KP_4 XK_KP_4 XK_KP_Left
76: XK_KP_Begin XK_KP_5 XK_KP_5 XK_KP_Begin
77: XK_KP_Right XK_KP_6 XK_KP_6 XK_KP_Right
78: XK_KP_Add
79: XK_KP_End XK_KP_1 XK_KP_1 XK_KP_End
80: XK_KP_Down XK_KP_2 XK_KP_2 XK_KP_Down
81: XK_KP_Next XK_KP_3 XK_KP_3 XK_KP_Next
82: XK_KP_Insert XK_KP_0 XK_KP_0 XK_KP_Insert
83: XK_KP_Delete XK_KP_Decimal XK_KP_Decimal XK_KP_Delete
84: XK_Sys_Req
87: XK_F11
88: XK_F12
96 71: XK_Home
96 72: XK_Up
96 73: XK_Prior
96 75: XK_Left
96 76: XK_Begin
c 1991 The Santa Cruz Operation, Inc.
- 12 -
96 77: XK_Right
96 79: XK_End
96 80: XK_Down
96 81: XK_Next
96 82: XK_Insert
96 83: XK_Delete
96 28: XK_KP_Enter
96 29: XK_Control_R
97 29 69: XK_Pause
96 42 55: XK_Print
96 53: XK_KP_Divide
96 56: XK_Alt_R
96 70: XK_Break
c 1991 The Santa Cruz Operation, Inc.
--
Mike Patnode The Santa Cruz Operation
Software Engineer 400 Encinal Street
{ucscc,uunet}!sco!mikep mikep@sco.COM P.O. Box 1900
(408) 458-1422 Santa Cruz, CA 95061mikep@sco.COM (Mike Patnode) (02/18/91)
Here is version 3.0. This contains a new Num Lock proposal which does
not use Mode Switch. Please read and return/post comments ASAP.
mp
----------------- cut here --------------------
Title : PC/AT Keyboard X Keysym Proposal
Revision : 3.0
Date : 17 Feb 1991
Status : DRAFT - for approval
Synopsis : This document describes a proposal for
standardizing the X11 Keysym mapping of
the IBM PC/AT Keyboard. The IBM 101
Keyboard is one of the most common
keyboards in the computer industry, and
has become very popular on X Terminals
and non-Intel hardware platforms. The
X11 Protocol is unable to describe the
AT Keyboard for two reasons. There are
not enough unique keysyms to describe
all the keys on the keyboard, and there
is not a sufficient mechanism to
consistently implement the Num Lock
key. This document proposes 12 new
keysyms to be added to the standard
encoding, a new Xlib implementation of
the Num Lock key and standard keysym
mapping tables for the IBM 101 and 84
key keyboards.
Author : Mike Patnode
The Santa Cruz Operation
400 Encinal Street
P.O. Box 1900
Santa Cruz, CA, 95061
(408) 458-1422
mikep@sco.COM
Distribution : comp.windows.x
c 1991 The Santa Cruz Operation, Inc.
PC/AT Keyboard X Keysym Proposal 17 Feb 1991
1. Summary
1.1 Introduction
Since the majority of X Window research and development has
been historically done on UNIX workstations there was never
a great deal of emphasis put upon Intel based personal
computers. Now, with the emergence of faster Intel 386 and
486 based machines, the PC/AT computer has become a viable
UNIX workstation. There are an increasing number of
software vendors who produce X servers for these machines,
as well as hardware manufactures who have adopted the IBM AT
keyboard layout. Furthermore, a complete set of standard
keysyms for the PC/AT keyboard will be needed to aid
portability in application binaries which comply with the
Intel386 Binary Compatibility Specification.
1.2 Document History
Rev. Date Description
_________________________________________________
1.0 5 Jan 91 Created Document. Posted to
comp.windows.x for comment.
1.1 13 Jan 91 Minor revisions. Presented at
MIT X Technical Conference,
i386 X Developer's BOF.
Distributed with USENET
comments attached.
2.0 31 Jan 91 Major revisions from X
Conference and BOF attendee
input. Added Num Lock
proposal and standard Keysym
layouts.
2.1 7 Feb 91 Defined Mod2 as the Num Lock
modifier entry.
3.0 16 Feb 91 Completely rewrote Num Lock
proposal. Changed to not use
Mode Switch in order to
provide compatibility with
existing European keymap
tables.
Revision 3.0 DRAFT - for approval Page 1
PC/AT Keyboard X Keysym Proposal 17 Feb 1991
1.3 Desired Functionality
The desired functionality of the AT numeric keypad has been
mostly defined by the DOS operating system and the IBM 84
key keyboard which proceeded it. Most i386 UNIX developers
(as well as many other UNIX platforms) are interested in
encouraging DOS developers to port their applications to
UNIX.
Although the actual implementation tended to differ between
hardware vendors, the effect was as follows. When pressed
by themselves, the keypad key scancodes would be interpreted
as cursor movement keys. If the Shift key was pressed, the
keys were interpreted as numeric keys. When the Num Lock
key is on, the exact opposite interpretation is done, with
the numeric values being the default and the cursor control
keys sent in combination with the Shift key.
2. New Keysyms
2.1 X11 Protocol KEYSYM Encoding
The first part of this document proposes 12 new keysyms to
be added to the X11 KEYSYM Standard Encoding, which is
defined in the X Protocol. As of Dec 10 1990, the public
review period for the X Protocol closed (ANSI working draft
standard X3H3.6/88-28R2). In the event that this document
is not taken into consideration by the working group, vendor
specific keysyms will be registered with the X Consortium.
2.2 Keypad Engravings
The main problem arises from the PC/AT numeric keypad. Each
of the numeric glyphs share a key with a cursor or page
control engraving. The X Keysym definition provides special
keysyms for most keypad keys which may also be present
elsewhere on the keyboard. It does not provide keypad
keysyms for the arrow or page controls keys. Hence, on the
IBM AT keyboard, an X programmer cannot easily distinguish
between the Up Arrow key and the Keypad Up Arrow key unless
the server writter provides non-standard or unintuitive
keysym names.
The simple solution is to create new standard keysyms for
the PC/AT keyboards. Not only are these keyboards in wide
spread use, but this will also aid X application programmers
Revision 3.0 DRAFT - for approval Page 2
PC/AT Keyboard X Keysym Proposal 17 Feb 1991
who are trying to comply with the Intel386 BCS.
Since the additional keysyms are mostly for duplicate keys
on the keyboard, there should not be any loss of
functionality for existing applications. Applications which
were using non-standard methods to differentiate between the
keys may need to have old keymaps installed to be unaffected
by these changes.
2.3 New Keysyms
There are 2 main areas which this proposal covers. One is
simply a common key for which there is no keysym equivalent
defined. The second is the 11 keypad keys which have two
engravings each. The keycodes (hex values) used here are
unused in the current keysym definition. These values are
only suggestions and are not a requirement of the proposal.
There seems to be no X keysym which matches the SysReq key.
0xFF15 XK_Sys_Req System Request
Next is the PC/AT keypad. The current X keysym set already
defines some keypad keys such as KP_Enter and KP_Add. The
following keysyms are needed to complete the definition.
0xFF95 XK_KP_Home Keypad Home
0xFF96 XK_KP_Left Keypad Left Arrow
0xFF97 XK_KP_Up Keypad Up Arrow
0xFF98 XK_KP_Right Keypad Right Arrow
0xFF99 XK_KP_Down Keypad Down Arrow
0xFF9A XK_KP_Prior Keypad Page Up
0xFF9B XK_KP_Next Keypad Page Down
0xFF9C XK_KP_End Keypad End
0xFF9D XK_KP_Begin Keypad Begin (No engraving on AT keyboard)
0xFF9E XK_KP_Insert Keypad Insert
0xFF9F XK_KP_Delete Keypad Delete
Although PC/AT Keyboard does not have a unshifted engraving
on the center keypad key (numeric 5), this key is still used
by many DOS applications. The XK_KP_Begin keysym allows the
key to be easily differentiated from the numeric 5. This
also provides for AT keyboard variants which have a fifth
key centered between the arrow keys. Prior and Next are
used instead of "Page Up" and "Page Down" to remain
consistent with existing implementations. In order to cater
to developers familiar with the AT keyboard engravings the
following aliases should be added as well.
#define XK_Page_Up 0xFF55 /* alias for XK_Prior */
Revision 3.0 DRAFT - for approval Page 3
PC/AT Keyboard X Keysym Proposal 17 Feb 1991
#define XK_Page_Down 0xFF56 /* alias for XK_Next */
#define XK_KP_Page_Up 0xFF9A /* alias for XK_KP_Prior */
#define XK_KP_Page_Down 0xFF9B /* alias for XK_KP_Next */
2.4 84 Key Keyboards
In order to maintain backwards compatibility with existing
keyboards, the keypad keysyms on the IBM 84 key keyboard
will remain the standard keysyms. Only XK_Sys_Req will be
added to the 84 keyboard map. XK_Begin is suggested for the
unshifted keysym on the center keypad key.
3. Lock Keys
3.1 Protocol Limitations
The Num Lock key is almost completely ignored by the X
Protocol. The one concession is that a keysym already
exists. According to the current Xlib and Protocol
specifications, Num Lock must be implemented by the client
application. An application should not have to deal with the
Num Lock key any more than it must deal with the Caps Lock
key. So much like Caps Lock, Num Lock should be implemented
in Xlib. Yet, there does need to be some cooperation with
the server. The Scroll Lock key suffers from some of the
same problems as Num Lock, but only that of implementing the
actual locking mechanism.
Unfortunately, few AT keyboards were available to the X
Consortium when the Protocol was being finalized, hence this
problem was not brought into the light until now.
3.2 Previous Implementations
Many different approaches have been taken to attempt to deal
with the Num Lock key. The most common approach has been to
simply ignore the functionality, since no implementation is
suggested by the Protocol. Some servers send both a Key
Press and Release event while others only send the Press
event, followed by the Release event on the second press.
Most servers do turn on the LED associated with the key, but
very few actually change the keyboard mapping. Some simple
implementations set a modifier bit when the key is locked.
A Num Lock standard must adhere to the existing X protocol
Revision 3.0 DRAFT - for approval Page 4
PC/AT Keyboard X Keysym Proposal 17 Feb 1991
as much as possible, and not break existing applications and
server implementations when avoidable.
3.3 Num Lock Modifier
The most obvious implementation of the Num Lock key is to
follow the example set by the Caps Lock key. The alphabetic
keysyms, which are arbitrarily defined in
lib/X/XKeyBind.c:XConvertCase(), are treated special by the
protocol. In short, XConvertCase() is called whenever a
alphabetic keysym needs to be converted to lower case. The
keysyms are left capitalized if the appropriate modifier bit
is set. This is implemented in
lib/X/XKeyBind.c:XTranslateKey().
The Num Lock key should be treated the exact same way, with
the keymap table being used for most conversions. By
assigning Num Lock to a modifier bit known by Xlib, a simple
change can be made to lib/X/XKeyBind.c:XTranslateKey() to
support Num Lock functionality. In the context diff below,
a simple macro has been defined to identify a keypad key.
Note that only the numeric engravings need be checked.
Before any other modifier translation takes place, the
Is_KP_Keysym() check is made. If the Num Lock modifier bit
is set, the second column of the keymap table is returned.
If the Shift modifier bit is set as well, the first column
is used. Note that a Shift by itself will still access the
upper engravings on the keypad.
*** /a/X11R4/mit/lib/X/XKeyBind.c Mon Dec 11 16:09:42 1989
--- XKeyBind.c Sat Feb 16 22:20:56 1991
***************
*** 17,22 ****
--- 17,28 ----
#define AllMods (ShiftMask|LockMask|ControlMask| \
Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)
+ #define NumLockMask Mod2Mask
+
+ /* Watch the multiple evaluation */
+ #define Is_KP_Keysym(k) ((((k) >= XK_KP_0) && ((k) <= XK_KP_9)) || \
+ ((k) == XK_KP_Decimal))
+
static ComputeMaskFromKeytrans();
static int Initialize();
static void XConvertCase();
***************
*** 276,282 ****
syms += 2;
per -= 2;
Revision 3.0 DRAFT - for approval Page 5
PC/AT Keyboard X Keysym Proposal 17 Feb 1991
}
! if (!(modifiers & ShiftMask) &&
(!(modifiers & LockMask) || (dpy->lock_meaning == NoSymbol))) {
if ((per == 1) || (syms[1] == NoSymbol))
XConvertCase(dpy, syms[0], keysym_return, &usym);
--- 281,289 ----
syms += 2;
per -= 2;
}
! if ((modifiers & NumLockMask) && (per > 1) && Is_KP_Keysym(syms[1])) {
! *keysym_return = (modifiers & ShiftMask) ? syms[0] : syms[1];
! } else if (!(modifiers & ShiftMask) &&
(!(modifiers & LockMask) || (dpy->lock_meaning == NoSymbol))) {
if ((per == 1) || (syms[1] == NoSymbol))
XConvertCase(dpy, syms[0], keysym_return, &usym);
If there are no KP_ keysyms in the second column of the
mapkey table (IE: The keyboard does not use NumLock) Mod2
will have no effect on the keyboard binding.
Three changes also need to be applied to the server to
complete the Num Lock key functionality. These are
necessary for the above implementation and are somewhat
obvious.
+ The server should only send a Press event when Num Lock
is toggled on, and only send a Release event when the
key is toggled off.
+ If an LED labeled "Num Lock" exists on the keyboard, it
should be turned on and off in accordance with the
status of the key.
+ The XK_Num_Lock keysym shall be defined as Mod2.
3.4 Scroll Lock
The actual semantics of the Scroll Lock key are poorly
defined, if they are defined at all. This should continue
to be left up to the client application, since no standard
interpretation has come to light. Yet, to be consistent
with the treatment of the Caps Lock and Num Lock keys, the
same rules need to be applied.
+ The server should only send a Press event when Scroll
Lock is toggled on, and only send a Release event when
the key is toggled off.
Revision 3.0 DRAFT - for approval Page 6
PC/AT Keyboard X Keysym Proposal 17 Feb 1991
+ If an LED labeled "Scroll Lock" exists on the keyboard,
it should be turned on and off in accordance with the
status of the key.
3.5 Caps Lock
This is only included for completeness. The following is
not defined in the X Protocol, but was in the sample
implementation.
+ The server should only send a Press event when Caps
Lock is toggled on, and only send a Release event when
the key is toggled off.
+ If an LED labeled "Caps Lock" exists on the keyboard,
it should be turned on and off in accordance with the
status of the key.
4. Keyboard Mapping
4.1 84 Key Keyboard
The following is the suggested X Keysym keymap table for the
IBM U.S. English 84 key keyboard. The numerical values
represent IBM XT scancodes. Columns with only one entry are
expanded according to Section 5 of the Protocol.
Scancode Keysyms
___________________________________________
1: XK_Escape
2: XK_1 XK_exclam
3: XK_2 XK_at
4: XK_3 XK_numbersign
5: XK_4 XK_dollar
6: XK_5 XK_percent
7: XK_6 XK_asciicircum
8: XK_7 XK_ampersand
9: XK_8 XK_asterisk
10: XK_9 XK_parenleft
11: XK_0 XK_parenright
12: XK_minus XK_underscore
13: XK_equal XK_plus
14: XK_BackSpace
15: XK_Tab
16: XK_Q
17: XK_W
18: XK_E
Revision 3.0 DRAFT - for approval Page 7
PC/AT Keyboard X Keysym Proposal 17 Feb 1991
19: XK_R
20: XK_T
21: XK_Y
22: XK_U
23: XK_I
24: XK_O
25: XK_P
26: XK_bracketleft XK_braceleft
27: XK_bracketright XK_braceright
28: XK_Return
29: XK_Control_L
30: XK_A
31: XK_S
32: XK_D
33: XK_F
34: XK_G
35: XK_H
36: XK_J
37: XK_K
38: XK_L
39: XK_semicolon XK_colon
40: XK_quoteright XK_quotedbl
41: XK_quoteleft XK_asciitilde
42: XK_Shift_L
43: XK_backslash XK_bar
44: XK_Z
45: XK_X
46: XK_C
47: XK_V
48: XK_B
49: XK_N
50: XK_M
51: XK_comma XK_less
52: XK_period XK_greater
53: XK_slash XK_question
54: XK_Shift_R
55: XK_KP_Multiply XK_Print
56: XK_Alt_L
57: XK_space
58: XK_Caps_Lock
59: XK_F1
60: XK_F2
61: XK_F3
62: XK_F4
63: XK_F5
64: XK_F6
65: XK_F7
66: XK_F8
67: XK_F9
68: XK_F10
69: XK_Num_Lock
Revision 3.0 DRAFT - for approval Page 8
PC/AT Keyboard X Keysym Proposal 17 Feb 1991
70: XK_Scroll_Lock
71: XK_Home XK_KP_7
72: XK_Up XK_KP_8
73: XK_Prior XK_KP_9
74: XK_KP_Subtract
75: XK_Left XK_KP_4
76: XK_Begin XK_KP_5
77: XK_Right XK_KP_6
78: XK_KP_Add
79: XK_End XK_KP_1
80: XK_Down XK_KP_2
81: XK_Next XK_KP_3
82: XK_Insert XK_KP_0
83: XK_Delete XK_KP_Decimal
84: XK_Sys_Req
4.2 101 Key Keyboard
The following is the suggested X Keysym keymap table for the
IBM U.S. English 101 key keyboard. The numerical values
represent AT keyboard scancodes when in XT mode. Note that
some AT keyboard keys send multibyte scancode sequences.
Columns with only one entry are expanded according to
Section 5 of the Protocol.
Scancode Keysyms
____________________________________________
1: XK_Escape
2: XK_1 XK_exclam
3: XK_2 XK_at
4: XK_3 XK_numbersign
5: XK_4 XK_dollar
6: XK_5 XK_percent
7: XK_6 XK_asciicircum
8: XK_7 XK_ampersand
9: XK_8 XK_asterisk
10: XK_9 XK_parenleft
11: XK_0 XK_parenright
12: XK_minus XK_underscore
13: XK_equal XK_plus
14: XK_BackSpace
15: XK_Tab
16: XK_Q
17: XK_W
18: XK_E
19: XK_R
20: XK_T
21: XK_Y
22: XK_U
23: XK_I
24: XK_O
25: XK_P
Revision 3.0 DRAFT - for approval Page 9
PC/AT Keyboard X Keysym Proposal 17 Feb 1991
26: XK_bracketleft XK_braceleft
27: XK_bracketright XK_braceright
28: XK_Return
29: XK_Control_L
30: XK_A
31: XK_S
32: XK_D
33: XK_F
34: XK_G
35: XK_H
36: XK_J
37: XK_K
38: XK_L
39: XK_semicolon XK_colon
40: XK_quoteright XK_quotedbl
41: XK_quoteleft XK_asciitilde
42: XK_Shift_L
43: XK_backslash XK_bar
44: XK_Z
45: XK_X
46: XK_C
47: XK_V
48: XK_B
49: XK_N
50: XK_M
51: XK_comma XK_less
52: XK_period XK_greater
53: XK_slash XK_question
54: XK_Shift_R
55: XK_KP_Multiply
56: XK_Alt_L
57: XK_space
58: XK_Caps_Lock
59: XK_F1
60: XK_F2
61: XK_F3
62: XK_F4
63: XK_F5
64: XK_F6
65: XK_F7
66: XK_F8
67: XK_F9
68: XK_F10
69: XK_Num_Lock
70: XK_Scroll_Lock
71: XK_KP_Home XK_KP_7
72: XK_KP_Up XK_KP_8
73: XK_KP_Prior XK_KP_9
74: XK_KP_Subtract
75: XK_KP_Left XK_KP_4
76: XK_KP_Begin XK_KP_5
Revision 3.0 DRAFT - for approval Page 10
PC/AT Keyboard X Keysym Proposal 17 Feb 1991
77: XK_KP_Right XK_KP_6
78: XK_KP_Add
79: XK_KP_End XK_KP_1
80: XK_KP_Down XK_KP_2
81: XK_KP_Next XK_KP_3
82: XK_KP_Insert XK_KP_0
83: XK_KP_Delete XK_KP_Decimal
84: XK_Sys_Req
87: XK_F11
88: XK_F12
96 71: XK_Home
96 72: XK_Up
96 73: XK_Prior
96 75: XK_Left
96 76: XK_Begin
96 77: XK_Right
96 79: XK_End
96 80: XK_Down
96 81: XK_Next
96 82: XK_Insert
96 83: XK_Delete
96 28: XK_KP_Enter
96 29: XK_Control_R
97 29 69: XK_Pause
96 42 55: XK_Print
96 53: XK_KP_Divide
96 56: XK_Alt_R
96 70: XK_Break
Revision 3.0 DRAFT - for approval Page 11
--
Mike Patnode The Santa Cruz Operation
Software Engineer 400 Encinal Street
{ucscc,uunet}!sco!mikep mikep@sco.COM P.O. Box 1900
(408) 458-1422 Santa Cruz, CA 95061