|
|
1.1 ! root 1: .NH 2 ! 2: Keyboard Operations ! 3: .PP ! 4: X does not predefine the keyboard to be ascii characters. ! 5: It is often useful to know that the ``a'' key just went down, ! 6: or possibly that it just went back up. ! 7: Client programs are sent keyboard events, ! 8: which contain a ``keycode'' ! 9: which assigns a number to each physical key on the ! 10: keyboard. ! 11: (For historical reasons, the keycodes are a superset of the DEC LK201 keyboard ! 12: keycodes.) ! 13: Client programs which want to deal with ! 14: ascii text will then have to convert the keycode into ascii ! 15: explicitly. ! 16: The transformation of keycode to ascii is arbitrary, ! 17: and facilities are provided to aid people in customizing the keyboard ! 18: layout to whatever they want. ! 19: Remember that keyboards often differ dramatically, ! 20: so writing code that presumes the existance of a particular key ! 21: not on the main part of the keyboard is fraught with portability ! 22: problems. ! 23: It may also be difficult to get key up events on certain X implementations ! 24: due to hardware or software restrictions. ! 25: .PP ! 26: Keyboard events are normally sent to the smallest enclosing window ! 27: which is interested in that type of event underneath the ! 28: mouse's position. ! 29: It is also possible to assign the keyboard `input focus' to a specific ! 30: window. ! 31: When the input focus is attached to a window, ! 32: keyboard events will go to the client which has selected ! 33: input on that window rather than the window under the mouse. ! 34: .PP ! 35: WARNING: ! 36: Some implementations cannot support up events. ! 37: You should think seriously before designing software that takes ! 38: advantage of up events if you are concerned about wide portability, ! 39: though there are some applications that can exploit up events ! 40: to provide superior user interfaces. ! 41: You should also be VERY careful when selecting which keys may be used ! 42: in such applications. ! 43: It may be impossible ! 44: to guarantee the existance of a set of keys on all keyboard with the probable ! 45: exception of a-z, spacebar, and carriage return. ! 46: .FD ! 47: .IN "XFocusKeyboard" ! 48: .IN "Definitions" "XFocusKeyboard" ! 49: XFocusKeyboard (w) ! 50: Window w; ! 51: .FN ! 52: .IN "Input Focus" ! 53: \fIXFocusKeyboard\fP designates a window as the `input focus' window. If ! 54: the window that would normally receive a \fIKeyPressed\fP or \fIKeyReleased\fP ! 55: event is not the focus window or one of its descendents, the event will ! 56: be sent to the focus window instead. ! 57: The events will go to whatever ! 58: client has selected input on the focus window; in general, this may be ! 59: .IN "XFocusKeyboard" ! 60: a client other than the one which has called \fIXFocusKeyboard\fP. For ! 61: instance, a window manager may allow the user to designate an arbitrary ! 62: window as the keyboard focus. ! 63: .LP ! 64: The root window is the default focus window. ! 65: If the focus window is ! 66: closed, the closest existing ancestor inherits the input focus. ! 67: .FD ! 68: .IN "Definitions" "XLookupMapping" ! 69: .IN "XLookupMapping" ! 70: .IN "Keycode to Ascii Conversion" ! 71: .IN "Keyboard" "Customization" ! 72: char *XLookupMapping(event, nbytes) ! 73: XKeyPressedEvent *event; ! 74: int *nbytes; ! 75: .FN ! 76: .PP ! 77: This function is very useful for mapping down events to counted ! 78: character strings (an array of characters and the length; the null ! 79: character is legitimate in this use.) ! 80: It returns a pointer to a static counted character string which must not be ! 81: touched by a client, and the number of bytes in the string. ! 82: .PP ! 83: This mapping is normally stored in the user's home directory in the ! 84: .IN "File" "$HOME/.Xkeymap" ! 85: .IN "File" "/usr/lib/Xkeymap.txt" ! 86: file ".Xkeymap". ! 87: If this file is not present, \fIXLookupMapping\fP ! 88: falls back to a built in table. ! 89: If no text is defined for that key, \fInbytes\fP will be zero. ! 90: The \fI~/.Xkeymap\fP file is produced by the \fIkeycomp(1)\fP program, ! 91: which reads ! 92: a text file of keyboard mappings. The file \fI/usr/lib/Xkeymap.txt\fP contains ! 93: a set of standard keyboard mappings. ! 94: The function performs normal interpretation of `shift' bits (meta, shift, ! 95: shift lock, control). ! 96: The user should strncpy the result if needed to his own storage if the ! 97: data must be modified. ! 98: .IN "XUseKeymap" ! 99: If a different keymap file is desired, it may be set using ! 100: \fIXUseKeymap\fP. ! 101: ! 102: .FD ! 103: .IN "Definitions" "XRebindCode" ! 104: .IN "XRebindCode" ! 105: .IN "Keyboard" "Customization" ! 106: XRebindCode(keycode, shiftbits, str, nbytes) ! 107: unsigned int keycode; ! 108: unsigned int shiftbits; ! 109: char *str; ! 110: int nbytes; ! 111: .FN ! 112: .PP ! 113: If you wish to rebind the keyboard, you can use this routine to change ! 114: (on a non-permanent basis) the binding of the keyboard. ! 115: Given a keycode, ! 116: the meta bits (or the \fIX*Masks\fP together to specify the bits ! 117: you wish to set), a string and the number of bytes in the string, ! 118: .IN "XLookupMapping" ! 119: subsequent calls to \fIXLookupMapping\fP will return the supplied string. ! 120: The string should be stored in static storage; ! 121: an automatic string may have been deallocated by the time it is needed. ! 122: .FD ! 123: .IN "Definitions" "XUseKeymap" ! 124: .IN "XUseKeymap" ! 125: .IN "Keyboard" "Customization" ! 126: Status XUseKeymap(keymap_file); ! 127: char *keymap_file; ! 128: .FN ! 129: .PP ! 130: If you wish to use an alternate keymap file, you can use this ! 131: routine to change the file used. Like XRebindKey, this only affects ! 132: the keymap within the current process. ! 133: ! 134: The procedure returns a zero value if it fails (if it could not find ! 135: the keymap file named by \fIkeymap_file\fP, or if the file contains a ! 136: bad magic number), and a non-zero value if it succeeds. If it fails, ! 137: the existing keymap is untouched. ! 138: ! 139: ! 140: ! 141:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.