next up previous contents
Next: Examples Up: Events: Input from a Previous: Event types

KeyBoard Encoding

Each key produces a fixed keycode in the range [7,255]. A list of keysyms is associated with each KeyCode. The keysyms take into account whether Shift keys etc have been pressed. The list of defined KeySyms is in <X11/keysym.h>. The mapping from keycodes to keysyms can be changed server-wide. From the command line you can use xmodmap -pk to see the current mapping. The mapping that matches the keysym to a string can be changed for just one client.

XLookUpString is used to interpret a key event, producing both a keysym and an ASCII string

To get the current mapping use

KeySym *XGetKeyBoardMapping(display,first_keycode,count,keysyms_per_keycode);
   int first_keycode;
   int count;         /* how many keycodes to check */
   int *keysyms_per_keycode;  /*RETURN*/
To change the mapping globally use
XChangeKeyBoardMapping(display,first_code,keysyms_per_code,keysyms,num_codes);
   KeySym *keysyms;
to change it locally use
    /* ALTER KEYBOARD MAPPING FOR A GIVEN KEYCODE                */
    /* WARNING : THIS MAY NOT BE IMPLEMENTED */
XRebindKeySym(display,keysym,list,mod_count,string,num_bytes)
    KeySym keysym;   /* the keycode we wish to rebind  */
    KeySym *list;           /*these are used as modifiers*/
    int mod_count;
    char *string;       /* string we wish to associate with it      */
    int nun_bytes;      /* number of bytes in the string            */
To see which keycodes are to be used as modifiers, this structure is needed.
typedef struct{
   int lock;
   int shift_a,  shift_b;
   int control_a,control_b;
   int mod1_a,    mod1_b;
   int mod2_a,    mod2_b;
   int mod3_a,    mod3_b;
   int mod4_a,    mod4_b;
   int mod5_a,    mod5_b:
}XModifierKeys;


GetModifierMapping(display,modifier_keys)
   ModifierKeys *modifier_keys;  /*RETURN*/

SetModifierMapping(display,modifier_keys)
   ModifierKeys *modifier_keys;

    /* RETURN A CHAR STRING GIVEN AN ARRAY OF {KeyPressedEvent}s */
int XLookupString(event,buffer,num_bytes,keysym,status); nbytes) */
    XKeyEvent *event; /* array of events to be interpreted*/
    char *buffer;
    int numbytes;      /* number of bytes in the char string      */
    KeySym *keysym;        /*RETURN*/
    XComposeStatus *status;
    /* default mapping is in /usr/lib/keymap.txt but user may    */
    /* specify his own in ~/.Xkeymap - see keycomp(1)            */


Tim Love
Mon Mar 11 17:03:18 GMT 1996