10f8248bfSmrg<?xml version="1.0" encoding="UTF-8" ?> 20f8248bfSmrg<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" 30f8248bfSmrg "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> 4eb411b4bSmrg<chapter id='Interpreting_Key_Events'> 5e9fcaa8aSmrg<title>Interpreting Key Events</title> 6e9fcaa8aSmrg 7e9fcaa8aSmrg<para> 8e9fcaa8aSmrgXkb provides functions to help developers interpret key events without having 9e9fcaa8aSmrgto directly interpret Xkb data structures. Xkb also modifies the behavior of 10e9fcaa8aSmrgseveral core X library functions. 11e9fcaa8aSmrg</para> 12e9fcaa8aSmrg 13eb411b4bSmrg<sect1 id='Effects_of_Xkb_on_the_Core_X_Library'> 14e9fcaa8aSmrg<title>Effects of Xkb on the Core X Library</title> 15e9fcaa8aSmrg 16e9fcaa8aSmrg<para> 170f8248bfSmrgWhen support for Xkb is built into the X library, the 180f8248bfSmrg<function>XOpenDisplay</function> 190f8248bfSmrgfunction looks for a compatible version of Xkb on the server. If it finds a 200f8248bfSmrgcompatible version, it initializes the extension and enables 210f8248bfSmrg<firstterm>implicit support</firstterm> 220f8248bfSmrgfor Xkb in a number of X library functions. This makes it possible for clients 23e9fcaa8aSmrgto take advantage of nearly all Xkb features without having to be rewritten or 24e9fcaa8aSmrgeven recompiled, if they are built with shared libraries. This implicit support 25e9fcaa8aSmrgis invisible to most clients, but it can have side effects, so the extension 26e9fcaa8aSmrgincludes ways to control or disable it. 27e9fcaa8aSmrg</para> 28e9fcaa8aSmrg 29e9fcaa8aSmrg 30eb411b4bSmrg<sect2 id='Effects_of_Xkb_on_Event_State'> 31e9fcaa8aSmrg<title>Effects of Xkb on Event State</title> 32e9fcaa8aSmrg 33e9fcaa8aSmrg<para> 340f8248bfSmrgBecause 350f8248bfSmrg<function>XOpenDisplay</function> 360f8248bfSmrginitializes Xkb, some events contain an Xkb description of the keyboard state 370f8248bfSmrginstead of that normally used by the core protocol. See <link linkend="Xkb_State_to_Core_Protocol_State_Transformation">section 17.1.1</link> for more 38e9fcaa8aSmrginformation about the differences between Xkb keyboard state and that reported 39e9fcaa8aSmrgby the core protocol. 40e9fcaa8aSmrg</para> 41e9fcaa8aSmrg 42e9fcaa8aSmrg 43e9fcaa8aSmrg</sect2> 44eb411b4bSmrg<sect2 id='Effects_of_Xkb_on_MappingNotify_Events'> 45e9fcaa8aSmrg<title>Effects of Xkb on MappingNotify Events</title> 46e9fcaa8aSmrg 470f8248bfSmrg<indexterm zone="Effects_of_Xkb_on_MappingNotify_Events"> 480f8248bfSmrg<primary>events</primary><secondary><symbol>MappingNotify</symbol></secondary></indexterm> 490f8248bfSmrg 50e9fcaa8aSmrg<para> 51e9fcaa8aSmrgWhen Xkb is missing or disabled, the X library tracks changes to the keyboard 520f8248bfSmrgmapping using 530f8248bfSmrg<symbol>MappingNotify</symbol> 540f8248bfSmrgevents. Whenever the keyboard mapping is changed, the server sends all clients 550f8248bfSmrga 560f8248bfSmrg<symbol>MappingNotify</symbol> 570f8248bfSmrgevent to report the change. When a client receives a 580f8248bfSmrg<symbol>MappingNotify</symbol> 590f8248bfSmrgevent, it is supposed to call 600f8248bfSmrg<function>XRefreshKeyboardMapping</function> 610f8248bfSmrgto update the keyboard description used internally by the X library. 62e9fcaa8aSmrg</para> 63e9fcaa8aSmrg 64e9fcaa8aSmrg 65e9fcaa8aSmrg<para> 660f8248bfSmrgThe X Keyboard Extension uses 670f8248bfSmrg<symbol>XkbMapNotify</symbol> 680f8248bfSmrgand 690f8248bfSmrg<symbol>XkbNewKeyboardNotify</symbol> 700f8248bfSmrgevents to track changes to the keyboard mapping. When an Xkb-aware client 710f8248bfSmrgreceives either event, it should call 720f8248bfSmrg<function>XkbRefreshKeyboardMapping</function> 730f8248bfSmrgto update the keyboard description used internally by the X library. To avoid 740f8248bfSmrgduplicate events, the X server does not send core protocol 750f8248bfSmrg<symbol>MappingNotify</symbol> 760f8248bfSmrgevents to a client that has selected for 770f8248bfSmrg<symbol>XkbMapNotify</symbol> 780f8248bfSmrgevents. 79e9fcaa8aSmrg</para> 80e9fcaa8aSmrg 81e9fcaa8aSmrg 82e9fcaa8aSmrg<para> 830f8248bfSmrgThe implicit support for Xkb selects for 840f8248bfSmrg<symbol>XkbMapNotify</symbol> 850f8248bfSmrgevents. This means that clients that do not explicitly use Xkb but that are 86e9fcaa8aSmrgusing a version of the X library that has implicit support for Xkb do not 870f8248bfSmrgreceive 880f8248bfSmrg<symbol>MappingNotify</symbol> 890f8248bfSmrgevents over the wire. Clients that were not written with Xkb in mind do not 90e9fcaa8aSmrgrecognize or properly handle the new Xkb events, so the implicit support 910f8248bfSmrgconverts them to 920f8248bfSmrg<symbol>MappingNotify</symbol> 930f8248bfSmrgevents that report approximately the same information, unless the client has 94e9fcaa8aSmrgexplicitly selected for the Xkb version of the event. 95e9fcaa8aSmrg</para> 96e9fcaa8aSmrg 97e9fcaa8aSmrg 98e9fcaa8aSmrg<para> 99e9fcaa8aSmrgAn Xkb-capable X server does not send events from keys that fall outside the 100e9fcaa8aSmrglegal range of keycodes expected by that client. Once the server sends a client 1010f8248bfSmrgan 1020f8248bfSmrg<symbol>XkbNewKeyboardNotify</symbol> 1030f8248bfSmrgevent, it reports events from all keys because it assumes that any client that 1040f8248bfSmrghas received an 1050f8248bfSmrg<symbol>XkbNewKeyboardNotify</symbol> 1060f8248bfSmrgevent expects key events from the new range of keycodes. The implicit support 1070f8248bfSmrgfor Xkb asks for 1080f8248bfSmrg<symbol>XkbNewKeyboardNotify</symbol> 1090f8248bfSmrgevents, so the range of keycodes reported to the client might vary without the 110e9fcaa8aSmrgclient’s knowledge. Most clients don’t really care about the range of legal 111e9fcaa8aSmrgkeycodes, but some clients maintain information about each key and might have 112e9fcaa8aSmrgproblems with events that come from unexpected keys. Such clients can set the 1130f8248bfSmrg<symbol>XkbLC_IgnoreNewKeyboards</symbol> 1140f8248bfSmrglibrary control (see <link linkend="IgnoreNewKeyboards">section 11.3.1</link>) to prevent the implicit support from 115e9fcaa8aSmrgrequesting notification of changes to the legal range of keycodes. 116e9fcaa8aSmrg</para> 117e9fcaa8aSmrg 118e9fcaa8aSmrg 119e9fcaa8aSmrg</sect2> 120eb411b4bSmrg<sect2 id='X_Library_Functions_Affected_by_Xkb'> 121e9fcaa8aSmrg<title>X Library Functions Affected by Xkb</title> 122e9fcaa8aSmrg 123e9fcaa8aSmrg<para> 124e9fcaa8aSmrgThe following X library functions are modified by Xkb: 125e9fcaa8aSmrg 1260f8248bfSmrg <simplelist type='vert' columns='1'> 1270f8248bfSmrg <member><function>XKeycodeToKeysym</function></member> 1280f8248bfSmrg <member><function>XKeysymToKeycode</function></member> 1290f8248bfSmrg <member><function>XLookupKeysym</function></member> 1300f8248bfSmrg <member><function>XLookupString</function></member> 1310f8248bfSmrg <member><function>XRefreshKeyboardMapping</function></member> 1320f8248bfSmrg <member><function>XRebindKeysym</function></member> 1330f8248bfSmrg </simplelist> 1340f8248bfSmrg</para> 135e9fcaa8aSmrg 136e9fcaa8aSmrg<para> 137e9fcaa8aSmrgThe implicit support for Xkb replaces a number of X library functions with 138e9fcaa8aSmrgversions that understand and use the X Keyboard Extension. In most cases, the 139e9fcaa8aSmrgsemantics of the new versions are identical to those of the old, but there are 140e9fcaa8aSmrgoccasional visible differences. This section lists all of the functions that 141e9fcaa8aSmrgare affected and the differences in behavior, if any, that are visible to 142e9fcaa8aSmrgclients. 143e9fcaa8aSmrg</para> 144e9fcaa8aSmrg 145e9fcaa8aSmrg 1460f8248bfSmrg<para id='XKeycodeToKeysym'> 1470f8248bfSmrgThe 1480f8248bfSmrg<olink targetdoc='libX11' targetptr='XKeycodeToKeysym'><function>XKeycodeToKeysym</function></olink> 1490f8248bfSmrg<indexterm significance="preferred" zone="XKeycodeToKeysym"><primary><function>XKeycodeToKeysym</function></primary></indexterm> 1500f8248bfSmrgfunction reports the keysym associated with a particular index for a single 151e9fcaa8aSmrgkey. The index specifies a column of symbols in the core keyboard mapping (that 1520f8248bfSmrgis, as reported by the core protocol 1530f8248bfSmrg<systemitem>GetKeyboardMapping</systemitem> 1540f8248bfSmrgrequest). The order of the symbols in the core mapping does not necessarily 1550f8248bfSmrgcorrespond to the order of the symbols used by Xkb; <link linkend="Xkb_Keyboard_Mapping_to_Core_Keyboard_Mapping_Transformations">section 17.1.3</link> describes 156e9fcaa8aSmrgthe differences. 157e9fcaa8aSmrg</para> 158e9fcaa8aSmrg 159e9fcaa8aSmrg 1600f8248bfSmrg<para id='XKeysymToKeycode'> 1610f8248bfSmrgThe 1620f8248bfSmrg<olink targetdoc='libX11' targetptr='XKeysymToKeycode'><function>XKeysymToKeycode</function></olink> 1630f8248bfSmrg<indexterm significance="preferred" zone="XKeysymToKeycode"><primary><function>XKeysymToKeycode</function></primary></indexterm> 1640f8248bfSmrgfunction reports a keycode to which a particular keysym is bound. When Xkb is 165e9fcaa8aSmrgmissing or disabled, this function looks in each column of the core keyboard 166e9fcaa8aSmrgmapping in turn and returns the lowest numbered key that matches in the lowest 167e9fcaa8aSmrgnumbered group. When Xkb is present, this function uses the Xkb ordering for 168e9fcaa8aSmrgsymbols instead. 169e9fcaa8aSmrg</para> 170e9fcaa8aSmrg 171e9fcaa8aSmrg 1720f8248bfSmrg<para id='XLookupKeysym'> 1730f8248bfSmrgThe 1740f8248bfSmrg<olink targetdoc='libX11' targetptr='XLookupKeysym'><function>XLookupKeysym</function></olink> 1750f8248bfSmrg<indexterm significance="preferred" zone="XLookupKeysym"><primary><function>XLookupKeysym</function></primary></indexterm> 1760f8248bfSmrgfunction reports the symbol in a specific column of the key associated with an 177e9fcaa8aSmrgevent. Whether or not Xkb is present, the column specifies an index into the 178e9fcaa8aSmrgcore symbol mapping. 179e9fcaa8aSmrg</para> 180e9fcaa8aSmrg 181e9fcaa8aSmrg 1820f8248bfSmrg<para id='XLookupString'> 1830f8248bfSmrgThe 1840f8248bfSmrg<olink targetdoc='libX11' targetptr='XLookupString'><function>XLookupString</function></olink> 1850f8248bfSmrg<indexterm significance="preferred" zone="XLookupString"><primary><function>XLookupString</function></primary></indexterm> 1860f8248bfSmrgfunction reports the symbol and string associated with a key event, taking 187e9fcaa8aSmrginto account the keycode and keyboard state as reported in the event. When Xkb 1880f8248bfSmrgis disabled or missing, 1890f8248bfSmrg<function>XLookupString</function> 1900f8248bfSmrguses the rules specified by the core protocol and reports only ISO Latin-1 1910f8248bfSmrgcharacters. When Xkb is present, 1920f8248bfSmrg<function>XLookupString</function> 1930f8248bfSmrguses the explicit keyboard group, key types, and rules specified by Xkb. When 1940f8248bfSmrgXkb is present, 1950f8248bfSmrg<function>XLookupString</function> 1960f8248bfSmrgis allowed, but not required, to return strings in character sets other than 197e9fcaa8aSmrgISO Latin-1, depending on the current locale. If any key bindings are defined, 1980f8248bfSmrg<function>XLookupString</function> 1990f8248bfSmrgdoes not use any consumed modifiers (see <link linkend="ConsumeLookupMods">section 11.1.2</link> and <link linkend="Key_Types">section 15.2</link>) to 200e9fcaa8aSmrgdetermine matching bindings. 201e9fcaa8aSmrg</para> 202e9fcaa8aSmrg 203e9fcaa8aSmrg 2040f8248bfSmrg<para id='XRefreshKeyboardMapping'> 2050f8248bfSmrgThe 2060f8248bfSmrg<olink targetdoc='libX11' targetptr='XRefreshKeyboardMapping'><function>XRefreshKeyboardMapping</function></olink> 2070f8248bfSmrg<indexterm significance="preferred" zone="XRefreshKeyboardMapping"><primary><function>XRefreshKeyboardMapping</function></primary></indexterm> 2080f8248bfSmrgfunction updates the X library’s internal representation of the keyboard to 2090f8248bfSmrgreflect changes reported via 2100f8248bfSmrg<symbol>MappingNotify</symbol> 2110f8248bfSmrgevents. When Xkb is missing or disabled, this function reloads the entire 212e9fcaa8aSmrgmodifier map or keyboard mapping. When Xkb is present, the implicit Xkb support 2130f8248bfSmrgkeeps track of the changed components reported by each 2140f8248bfSmrg<symbol>XkbMapNotify</symbol> 2150f8248bfSmrgevent and updates only those pieces of the keyboard description that have 216e9fcaa8aSmrgchanged. If the implicit support has not noted any keyboard mapping changes, 2170f8248bfSmrg<function>XRefreshKeyboardMapping</function> 2180f8248bfSmrgupdates the entire keyboard description. 219e9fcaa8aSmrg</para> 220e9fcaa8aSmrg 221e9fcaa8aSmrg 2220f8248bfSmrg<para id='XRebindKeysym'> 2230f8248bfSmrgThe 2240f8248bfSmrg<olink targetdoc='libX11' targetptr='XRebindKeysym'><function>XRebindKeysym</function></olink> 2250f8248bfSmrg<indexterm significance="preferred" zone="XRebindKeysym"><primary><function>XRebindKeysym</function></primary></indexterm> 2260f8248bfSmrgfunction associates a string with a keysym and a set of modifiers. Xkb does 227e9fcaa8aSmrgnot directly change this function, but it does affect the way that the state 2280f8248bfSmrgreported in the event is compared to the state specified to 2290f8248bfSmrg<function>XRebindKeysym</function>. 2300f8248bfSmrgWhen Xkb is missing or disabled, 2310f8248bfSmrg<function>XLookupString</function> 2320f8248bfSmrgreturns the specified string if the modifiers in the event exactly match the 233e9fcaa8aSmrgmodifiers from this call. When Xkb is present, any modifiers used to determine 234e9fcaa8aSmrgthe keysym are consumed and are not used to look up the string. 235e9fcaa8aSmrg</para> 236e9fcaa8aSmrg 237e9fcaa8aSmrg 238e9fcaa8aSmrg</sect2> 239e9fcaa8aSmrg</sect1> 240eb411b4bSmrg<sect1 id='Xkb_Event_and_Keymap_Functions'> 241e9fcaa8aSmrg<title>Xkb Event and Keymap Functions</title> 242e9fcaa8aSmrg 243e9fcaa8aSmrg<para> 244e9fcaa8aSmrgTo find the keysym bound to a particular key at a specified group and shift 2450f8248bfSmrglevel, use <function>XkbKeycodeToKeysym</function>. 246e9fcaa8aSmrg</para> 247e9fcaa8aSmrg 2480f8248bfSmrg<indexterm significance="preferred" zone="XkbKeycodeToKeysym"><primary><function>XkbKeycodeToKeysym</function></primary></indexterm> 2490f8248bfSmrg<funcsynopsis id="XkbKeycodeToKeysym"> 2500f8248bfSmrg <funcprototype> 2510f8248bfSmrg <funcdef>KeySym <function>XkbKeycodeToKeysym</function></funcdef> 2520f8248bfSmrg<!-- ( 2530f8248bfSmrg<parameter>dpy, kc, group, level</parameter> 2540f8248bfSmrg) --> 2550f8248bfSmrg 2560f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 2570f8248bfSmrg <paramdef>KeyCode <parameter>kc</parameter></paramdef> 2580f8248bfSmrg <paramdef>unsigned int <parameter>group</parameter></paramdef> 2590f8248bfSmrg <paramdef>unsigned int <parameter>level</parameter></paramdef> 2600f8248bfSmrg </funcprototype> 2610f8248bfSmrg</funcsynopsis> 2620f8248bfSmrg<variablelist> 2630f8248bfSmrg <varlistentry> 2640f8248bfSmrg <term> 2650f8248bfSmrg <parameter>dpy</parameter> 2660f8248bfSmrg </term> 2670f8248bfSmrg <listitem> 2680f8248bfSmrg <para> 2690f8248bfSmrg connection to X server 2700f8248bfSmrg </para> 2710f8248bfSmrg </listitem> 2720f8248bfSmrg </varlistentry> 2730f8248bfSmrg <varlistentry> 2740f8248bfSmrg <term> 2750f8248bfSmrg <parameter>kc</parameter> 2760f8248bfSmrg </term> 2770f8248bfSmrg <listitem> 2780f8248bfSmrg <para> 2790f8248bfSmrg key of interest 2800f8248bfSmrg </para> 2810f8248bfSmrg </listitem> 2820f8248bfSmrg </varlistentry> 2830f8248bfSmrg <varlistentry> 2840f8248bfSmrg <term> 2850f8248bfSmrg <parameter>group</parameter> 2860f8248bfSmrg </term> 2870f8248bfSmrg <listitem> 2880f8248bfSmrg <para> 2890f8248bfSmrg group of interest 2900f8248bfSmrg </para> 2910f8248bfSmrg </listitem> 2920f8248bfSmrg </varlistentry> 2930f8248bfSmrg <varlistentry> 2940f8248bfSmrg <term> 2950f8248bfSmrg <parameter>level</parameter> 2960f8248bfSmrg </term> 2970f8248bfSmrg <listitem> 2980f8248bfSmrg <para> 2990f8248bfSmrg shift level of interest 3000f8248bfSmrg </para> 3010f8248bfSmrg </listitem> 3020f8248bfSmrg </varlistentry> 3030f8248bfSmrg</variablelist> 304e9fcaa8aSmrg 305e9fcaa8aSmrg<para> 3060f8248bfSmrg<function>XkbKeycodeToKeysym</function> 3070f8248bfSmrgreturns the keysym bound to a particular group and shift level for a 3080f8248bfSmrgparticular key on the core keyboard. If 3090f8248bfSmrg<parameter>kc</parameter> 3100f8248bfSmrgis not a legal keycode for the core keyboard, or if 3110f8248bfSmrg<parameter>group</parameter> 3120f8248bfSmrgor 3130f8248bfSmrg<parameter>level</parameter> 3140f8248bfSmrgare out of range for the specified key, 3150f8248bfSmrg<function>XkbKeycodeToKeysym</function> 3160f8248bfSmrgreturns 3170f8248bfSmrg<symbol>NoSymbol</symbol>. 318e9fcaa8aSmrg</para> 319e9fcaa8aSmrg 320e9fcaa8aSmrg 321e9fcaa8aSmrg<para> 322e9fcaa8aSmrgTo find the set of modifiers bound to a particular keysym on the core keyboard, 3230f8248bfSmrguse 3240f8248bfSmrg<function>XkbKeysymToModifiers</function>. 325e9fcaa8aSmrg</para> 326e9fcaa8aSmrg 327e9fcaa8aSmrg 3280f8248bfSmrg<indexterm significance="preferred" zone="XkbKeysymToModifiers"><primary><function>XkbKeysymToModifiers</function></primary></indexterm> 3290f8248bfSmrg<funcsynopsis id="XkbKeysymToModifiers"> 3300f8248bfSmrg <funcprototype> 3310f8248bfSmrg <funcdef>unsigned int <function>XkbKeysymToModifiers</function></funcdef> 3320f8248bfSmrg<!-- ( 3330f8248bfSmrg<parameter>dpy</parameter>, 3340f8248bfSmrg<parameter>ks</parameter> 3350f8248bfSmrg) --> 3360f8248bfSmrg 3370f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 3380f8248bfSmrg <paramdef>KeySym <parameter>ks</parameter></paramdef> 3390f8248bfSmrg </funcprototype> 3400f8248bfSmrg</funcsynopsis> 3410f8248bfSmrg<variablelist> 3420f8248bfSmrg <varlistentry> 3430f8248bfSmrg <term> 3440f8248bfSmrg <parameter>dpy</parameter> 3450f8248bfSmrg </term> 3460f8248bfSmrg <listitem> 3470f8248bfSmrg <para> 3480f8248bfSmrg connection to X server 3490f8248bfSmrg </para> 3500f8248bfSmrg </listitem> 3510f8248bfSmrg </varlistentry> 3520f8248bfSmrg <varlistentry> 3530f8248bfSmrg <term> 3540f8248bfSmrg <parameter>ks</parameter> 3550f8248bfSmrg </term> 3560f8248bfSmrg <listitem> 3570f8248bfSmrg <para> 3580f8248bfSmrg keysym of interest 3590f8248bfSmrg </para> 3600f8248bfSmrg </listitem> 3610f8248bfSmrg </varlistentry> 3620f8248bfSmrg</variablelist> 363e9fcaa8aSmrg 364e9fcaa8aSmrg<para> 3650f8248bfSmrg<function>XkbKeysymToModifiers</function> 3660f8248bfSmrgfinds the set of modifiers currently bound to the keysym 3670f8248bfSmrg<parameter>ks</parameter> 3680f8248bfSmrgon the core keyboard. The value returned is the mask of modifiers bound to the 3690f8248bfSmrgkeysym 3700f8248bfSmrg<parameter>ks</parameter>. 3710f8248bfSmrgIf no modifiers are bound to the keysym, 3720f8248bfSmrg<function>XkbKeysymToModifiers</function> 3730f8248bfSmrgreturns zero; otherwise, it returns the inclusive OR of zero or more of the 3740f8248bfSmrgfollowing: 3750f8248bfSmrg<symbol>ShiftMask</symbol>, 3760f8248bfSmrg<symbol>ControlMask</symbol>, 3770f8248bfSmrg<symbol>LockMask</symbol>, 3780f8248bfSmrg<symbol>Mod1Mask</symbol>, 3790f8248bfSmrg<symbol>Mod2Mask</symbol>, 3800f8248bfSmrg<symbol>Mod3Mask</symbol>, 3810f8248bfSmrg<symbol>Mod4Mask</symbol>, 3820f8248bfSmrgand 3830f8248bfSmrg<symbol>Mod5Mask</symbol>. 384e9fcaa8aSmrg</para> 385e9fcaa8aSmrg 386e9fcaa8aSmrg 387e9fcaa8aSmrg<para> 3880f8248bfSmrgUse 3890f8248bfSmrg<function>XkbLookupKeySym</function> 3900f8248bfSmrgto find the symbol associated with a key for a particular state. 391e9fcaa8aSmrg</para> 392e9fcaa8aSmrg 393e9fcaa8aSmrg 3940f8248bfSmrg<indexterm significance="preferred" zone="XkbLookupKeySym"><primary><function>XkbLookupKeySym</function></primary></indexterm> 3950f8248bfSmrg<funcsynopsis id="XkbLookupKeySym"> 3960f8248bfSmrg <funcprototype> 3970f8248bfSmrg <funcdef>Bool <function>XkbLookupKeySym</function></funcdef> 3980f8248bfSmrg<!-- ( 3990f8248bfSmrg<parameter>dpy</parameter>, 4000f8248bfSmrg<parameter>key</parameter>, 4010f8248bfSmrg<parameter>state</parameter>, 4020f8248bfSmrg<parameter>mods_rtrn</parameter>, 4030f8248bfSmrg<parameter>sym_rtrn</parameter> 4040f8248bfSmrg) --> 4050f8248bfSmrg 4060f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 4070f8248bfSmrg <paramdef>KeyCode <parameter>key</parameter></paramdef> 4080f8248bfSmrg <paramdef>unsigned int <parameter>state</parameter></paramdef> 4090f8248bfSmrg <paramdef>unsigned int *<parameter>mods_rtrn</parameter></paramdef> 4100f8248bfSmrg <paramdef>KeySym *<parameter>sym_rtrn</parameter></paramdef> 4110f8248bfSmrg </funcprototype> 4120f8248bfSmrg</funcsynopsis> 4130f8248bfSmrg<variablelist> 4140f8248bfSmrg <varlistentry> 4150f8248bfSmrg <term> 4160f8248bfSmrg <parameter>dpy</parameter> 4170f8248bfSmrg </term> 4180f8248bfSmrg <listitem> 4190f8248bfSmrg <para> 4200f8248bfSmrg connection to X server 4210f8248bfSmrg </para> 4220f8248bfSmrg </listitem> 4230f8248bfSmrg </varlistentry> 4240f8248bfSmrg <varlistentry> 4250f8248bfSmrg <term> 4260f8248bfSmrg <parameter>key</parameter> 4270f8248bfSmrg </term> 4280f8248bfSmrg <listitem> 4290f8248bfSmrg <para> 4300f8248bfSmrg key for which symbols are to be found 4310f8248bfSmrg </para> 4320f8248bfSmrg </listitem> 4330f8248bfSmrg </varlistentry> 4340f8248bfSmrg <varlistentry> 4350f8248bfSmrg <term> 4360f8248bfSmrg <parameter>state</parameter> 4370f8248bfSmrg </term> 4380f8248bfSmrg <listitem> 4390f8248bfSmrg <para> 4400f8248bfSmrg state for which symbol should be found 4410f8248bfSmrg </para> 4420f8248bfSmrg </listitem> 4430f8248bfSmrg </varlistentry> 4440f8248bfSmrg <varlistentry> 4450f8248bfSmrg <term> 4460f8248bfSmrg <parameter>mods_rtrn</parameter> 4470f8248bfSmrg </term> 4480f8248bfSmrg <listitem> 4490f8248bfSmrg <para> 4500f8248bfSmrg backfilled with consumed modifiers 4510f8248bfSmrg </para> 4520f8248bfSmrg </listitem> 4530f8248bfSmrg </varlistentry> 4540f8248bfSmrg <varlistentry> 4550f8248bfSmrg <term> 4560f8248bfSmrg <parameter>sym_rtrn</parameter> 4570f8248bfSmrg </term> 4580f8248bfSmrg <listitem> 4590f8248bfSmrg <para> 4600f8248bfSmrg backfilled with symbol associated with key + state 4610f8248bfSmrg </para> 4620f8248bfSmrg </listitem> 4630f8248bfSmrg </varlistentry> 4640f8248bfSmrg</variablelist> 465e9fcaa8aSmrg 466e9fcaa8aSmrg<para> 4670f8248bfSmrg<function>XkbLookupKeySym</function> 4680f8248bfSmrgis the equivalent of the core 4690f8248bfSmrg<symbol>XLookupKeySym</symbol> 4700f8248bfSmrgfunction. For the core keyboard, given a keycode 4710f8248bfSmrg<parameter>key</parameter> 4720f8248bfSmrgand an Xkb state 4730f8248bfSmrg<parameter>state</parameter>, 4740f8248bfSmrg<function>XkbLookupKeySym</function> 4750f8248bfSmrgreturns the symbol associated with the key in 4760f8248bfSmrg<parameter>sym_rtrn</parameter> 4770f8248bfSmrgand the list of modifiers that should still be applied in 4780f8248bfSmrg<parameter>mods_rtrn</parameter>. 4790f8248bfSmrgThe 4800f8248bfSmrg<parameter>state</parameter> 4810f8248bfSmrgparameter is the state from a 4820f8248bfSmrg<symbol>KeyPress</symbol> 4830f8248bfSmrgor 4840f8248bfSmrg<symbol>KeyRelease</symbol> 4850f8248bfSmrgevent. 4860f8248bfSmrg<function>XkbLookupKeySym</function> 4870f8248bfSmrgreturns 4880f8248bfSmrg<symbol>True</symbol> 4890f8248bfSmrgif it succeeds. 490e9fcaa8aSmrg</para> 491e9fcaa8aSmrg 492e9fcaa8aSmrg 493e9fcaa8aSmrg<para> 4940f8248bfSmrgUse 4950f8248bfSmrg<function>XkbLookupKeyBinding</function> 4960f8248bfSmrgto find the string bound to a key by 4970f8248bfSmrg<function>XRebindKeysym</function>. 4980f8248bfSmrg<function>XkbLookupKeyBinding</function> 4990f8248bfSmrgis the equivalent of the core 5000f8248bfSmrg<function>XLookupString</function> 5010f8248bfSmrgfunction. 502e9fcaa8aSmrg</para> 503e9fcaa8aSmrg 504e9fcaa8aSmrg 5050f8248bfSmrg<indexterm significance="preferred" zone="XkbLookupKeyBinding"><primary><function>XkbLookupKeyBinding</function></primary></indexterm> 5060f8248bfSmrg<funcsynopsis id="XkbLookupKeyBinding"> 5070f8248bfSmrg <funcprototype> 5080f8248bfSmrg <funcdef>int <function>XkbLookupKeyBinding</function></funcdef> 5090f8248bfSmrg<!-- ( 5100f8248bfSmrg<parameter>dpy</parameter>, 5110f8248bfSmrg<parameter>sym</parameter>, 5120f8248bfSmrg<parameter>state</parameter>, 5130f8248bfSmrg<parameter>buf</parameter>, 5140f8248bfSmrg<parameter>nbytes</parameter>, 5150f8248bfSmrg<parameter>extra_rtrn</parameter> 5160f8248bfSmrg) --> 5170f8248bfSmrg 5180f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 5190f8248bfSmrg <paramdef>KeySym <parameter>sym</parameter></paramdef> 5200f8248bfSmrg <paramdef>unsigned int <parameter>state</parameter></paramdef> 5210f8248bfSmrg <paramdef>char *<parameter>buf</parameter></paramdef> 5220f8248bfSmrg <paramdef>int <parameter>nbytes</parameter></paramdef> 5230f8248bfSmrg <paramdef>int *<parameter>extra_rtrn</parameter></paramdef> 5240f8248bfSmrg </funcprototype> 5250f8248bfSmrg</funcsynopsis> 5260f8248bfSmrg<variablelist> 5270f8248bfSmrg <varlistentry> 5280f8248bfSmrg <term> 5290f8248bfSmrg <parameter>dpy</parameter> 5300f8248bfSmrg </term> 5310f8248bfSmrg <listitem> 5320f8248bfSmrg <para> 5330f8248bfSmrg connection to server 5340f8248bfSmrg </para> 5350f8248bfSmrg </listitem> 5360f8248bfSmrg </varlistentry> 5370f8248bfSmrg <varlistentry> 5380f8248bfSmrg <term> 5390f8248bfSmrg <parameter>sym</parameter> 5400f8248bfSmrg </term> 5410f8248bfSmrg <listitem> 5420f8248bfSmrg <para> 5430f8248bfSmrg symbol to be looked up 5440f8248bfSmrg </para> 5450f8248bfSmrg </listitem> 5460f8248bfSmrg </varlistentry> 5470f8248bfSmrg <varlistentry> 5480f8248bfSmrg <term> 5490f8248bfSmrg <parameter>state</parameter> 5500f8248bfSmrg </term> 5510f8248bfSmrg <listitem> 5520f8248bfSmrg <para> 5530f8248bfSmrg state for which string is to be looked up 5540f8248bfSmrg </para> 5550f8248bfSmrg </listitem> 5560f8248bfSmrg </varlistentry> 5570f8248bfSmrg <varlistentry> 5580f8248bfSmrg <term> 5590f8248bfSmrg <parameter>buf</parameter> 5600f8248bfSmrg </term> 5610f8248bfSmrg <listitem> 5620f8248bfSmrg <para> 5630f8248bfSmrg buffer into which returned string is written 5640f8248bfSmrg </para> 5650f8248bfSmrg </listitem> 5660f8248bfSmrg </varlistentry> 5670f8248bfSmrg <varlistentry> 5680f8248bfSmrg <term> 5690f8248bfSmrg <parameter>nbytes</parameter> 5700f8248bfSmrg </term> 5710f8248bfSmrg <listitem> 5720f8248bfSmrg <para> 5730f8248bfSmrg size of buffer in bytes 5740f8248bfSmrg </para> 5750f8248bfSmrg </listitem> 5760f8248bfSmrg </varlistentry> 5770f8248bfSmrg <varlistentry> 5780f8248bfSmrg <term> 5790f8248bfSmrg <parameter>extra_rtrn</parameter> 5800f8248bfSmrg </term> 5810f8248bfSmrg <listitem> 5820f8248bfSmrg <para> 5830f8248bfSmrg backfilled with number bytes overflow 5840f8248bfSmrg </para> 5850f8248bfSmrg </listitem> 5860f8248bfSmrg </varlistentry> 5870f8248bfSmrg</variablelist> 588e9fcaa8aSmrg 589e9fcaa8aSmrg<para> 5900f8248bfSmrg<function>XRebindKeysym</function> 5910f8248bfSmrgbinds an ASCII string to a specified keysym, so that the string and keysym are 592e9fcaa8aSmrgreturned when the key is pressed and a specified list of modifiers are also 5930f8248bfSmrgbeing held down. 5940f8248bfSmrg<function>XkbLookupKeyBinding</function> 5950f8248bfSmrgreturns in 5960f8248bfSmrg<parameter>buf</parameter> 5970f8248bfSmrgthe string associated with the keysym 5980f8248bfSmrg<parameter>sym</parameter> 5990f8248bfSmrgand modifier state 6000f8248bfSmrg<parameter>state</parameter>. 6010f8248bfSmrg<parameter>buf</parameter> 6020f8248bfSmrgis 6030f8248bfSmrg<symbol>NULL</symbol> 6040f8248bfSmrgterminated unless there’s an overflow. If the string returned is larger than 6050f8248bfSmrg<parameter>nbytes</parameter>, 6060f8248bfSmrga count of bytes that does not fit into the buffer is returned in extra_rtrn. 6070f8248bfSmrg<function>XkbTranslateKeySym</function> 6080f8248bfSmrgreturns the number of bytes that it placed into 6090f8248bfSmrg<parameter>buf</parameter>. 610e9fcaa8aSmrg</para> 611e9fcaa8aSmrg 612e9fcaa8aSmrg 613e9fcaa8aSmrg<para> 614e9fcaa8aSmrgTo find the string and symbol associated with a keysym for a given keyboard 6150f8248bfSmrgstate, use 6160f8248bfSmrg<function>XkbTranslateKeySym</function>. 617e9fcaa8aSmrg</para> 618e9fcaa8aSmrg 619e9fcaa8aSmrg 6200f8248bfSmrg<indexterm significance="preferred" zone="XkbTranslateKeySym"><primary><function>XkbTranslateKeySym</function></primary></indexterm> 6210f8248bfSmrg<funcsynopsis id="XkbTranslateKeySym"> 6220f8248bfSmrg <funcprototype> 6230f8248bfSmrg <funcdef>int <function>XkbTranslateKeySym</function></funcdef> 6240f8248bfSmrg<!-- ( 6250f8248bfSmrg<parameter>dpy</parameter>, 6260f8248bfSmrg<parameter>sym_inout</parameter>, 6270f8248bfSmrg<parameter>mods</parameter>, 6280f8248bfSmrg<parameter>buf</parameter>, 6290f8248bfSmrg<parameter>nbytes</parameter>, 6300f8248bfSmrg<parameter>extra_rtrn</parameter> 6310f8248bfSmrg) --> 6320f8248bfSmrg 6330f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 6340f8248bfSmrg <paramdef>KeySym *<parameter>sym_inout</parameter></paramdef> 6350f8248bfSmrg <paramdef>unsigned int <parameter>mods</parameter></paramdef> 6360f8248bfSmrg <paramdef>char *<parameter>buf</parameter></paramdef> 6370f8248bfSmrg <paramdef>int <parameter>nbytes</parameter></paramdef> 6380f8248bfSmrg <paramdef>int *<parameter>extra_rtrn</parameter></paramdef> 6390f8248bfSmrg </funcprototype> 6400f8248bfSmrg</funcsynopsis> 6410f8248bfSmrg<variablelist> 6420f8248bfSmrg <varlistentry> 6430f8248bfSmrg <term> 6440f8248bfSmrg <parameter>dpy</parameter> 6450f8248bfSmrg </term> 6460f8248bfSmrg <listitem> 6470f8248bfSmrg <para> 6480f8248bfSmrg connection to X server 6490f8248bfSmrg </para> 6500f8248bfSmrg </listitem> 6510f8248bfSmrg </varlistentry> 6520f8248bfSmrg <varlistentry> 6530f8248bfSmrg <term> 6540f8248bfSmrg <parameter>sym_inout</parameter> 6550f8248bfSmrg </term> 6560f8248bfSmrg <listitem> 6570f8248bfSmrg <para> 6580f8248bfSmrg symbol to be translated; result of translation 6590f8248bfSmrg </para> 6600f8248bfSmrg </listitem> 6610f8248bfSmrg </varlistentry> 6620f8248bfSmrg <varlistentry> 6630f8248bfSmrg <term> 6640f8248bfSmrg <parameter>mods</parameter> 6650f8248bfSmrg </term> 6660f8248bfSmrg <listitem> 6670f8248bfSmrg <para> 6680f8248bfSmrg modifiers to apply to <parameter>sym_inout</parameter> 6690f8248bfSmrg </para> 6700f8248bfSmrg </listitem> 6710f8248bfSmrg </varlistentry> 6720f8248bfSmrg <varlistentry> 6730f8248bfSmrg <term> 6740f8248bfSmrg <parameter>buf</parameter> 6750f8248bfSmrg </term> 6760f8248bfSmrg <listitem> 6770f8248bfSmrg <para> 6780f8248bfSmrg buffer into which returned string is written 6790f8248bfSmrg </para> 6800f8248bfSmrg </listitem> 6810f8248bfSmrg </varlistentry> 6820f8248bfSmrg <varlistentry> 6830f8248bfSmrg <term> 6840f8248bfSmrg <parameter>nbytes</parameter> 6850f8248bfSmrg </term> 6860f8248bfSmrg <listitem> 6870f8248bfSmrg <para> 6880f8248bfSmrg size of buffer in bytes 6890f8248bfSmrg </para> 6900f8248bfSmrg </listitem> 6910f8248bfSmrg </varlistentry> 6920f8248bfSmrg <varlistentry> 6930f8248bfSmrg <term> 6940f8248bfSmrg <parameter>extra_rtrn</parameter> 6950f8248bfSmrg </term> 6960f8248bfSmrg <listitem> 6970f8248bfSmrg <para> 6980f8248bfSmrg number of bytes overflow 6990f8248bfSmrg </para> 7000f8248bfSmrg </listitem> 7010f8248bfSmrg </varlistentry> 7020f8248bfSmrg</variablelist> 703e9fcaa8aSmrg 704e9fcaa8aSmrg<para> 7050f8248bfSmrg<function>XkbTranslateKeySym</function> 7060f8248bfSmrgapplies the transformations specified in 7070f8248bfSmrg<parameter>mods</parameter> 7080f8248bfSmrgto the symbol specified by 7090f8248bfSmrg<parameter>sym_inout</parameter>. 7100f8248bfSmrgIt returns in 7110f8248bfSmrg<parameter>buf</parameter> 7120f8248bfSmrgthe string, if any, associated with the keysym for the current locale. If the 7130f8248bfSmrgtransformations in 7140f8248bfSmrg<parameter>mods</parameter> 7150f8248bfSmrgchanges the keysym, 7160f8248bfSmrg<parameter>sym_inout</parameter> 7170f8248bfSmrgis updated accordingly. If the string returned is larger than 7180f8248bfSmrg<parameter>nbytes</parameter>, 7190f8248bfSmrga count of bytes that does not fit into the buffer is returned in extra_rtrn. 7200f8248bfSmrg<function>XkbTranslateKeySym</function> 7210f8248bfSmrgreturns the number of bytes it placed into 7220f8248bfSmrg<parameter>buf</parameter>. 723e9fcaa8aSmrg</para> 724e9fcaa8aSmrg 725e9fcaa8aSmrg 726e9fcaa8aSmrg<para> 727e9fcaa8aSmrgTo update the keyboard description that is internal to the X library, use 7280f8248bfSmrg<function>XkbRefreshKeyboardMapping</function>. 729e9fcaa8aSmrg</para> 730e9fcaa8aSmrg 731e9fcaa8aSmrg 7320f8248bfSmrg<indexterm significance="preferred" zone="XkbRefreshKeyboardMapping"><primary><function>XkbRefreshKeyboardMapping</function></primary></indexterm> 7330f8248bfSmrg<funcsynopsis id="XkbRefreshKeyboardMapping"> 7340f8248bfSmrg <funcprototype> 7350f8248bfSmrg <funcdef>Status <function>XkbRefreshKeyboardMapping</function></funcdef> 7360f8248bfSmrg<!-- ( 7370f8248bfSmrg<parameter>event)</parameter> --> 7380f8248bfSmrg 7390f8248bfSmrg <paramdef>XkbMapNotifyEvent *<parameter>event</parameter></paramdef> 7400f8248bfSmrg </funcprototype> 7410f8248bfSmrg</funcsynopsis> 7420f8248bfSmrg<variablelist> 7430f8248bfSmrg <varlistentry> 7440f8248bfSmrg <term> 7450f8248bfSmrg <parameter>event</parameter> 7460f8248bfSmrg </term> 7470f8248bfSmrg <listitem> 7480f8248bfSmrg <para> 7490f8248bfSmrg event initiating remapping 7500f8248bfSmrg </para> 7510f8248bfSmrg </listitem> 7520f8248bfSmrg </varlistentry> 7530f8248bfSmrg</variablelist> 754e9fcaa8aSmrg 755e9fcaa8aSmrg<para> 7560f8248bfSmrg<function>XkbRefreshKeyboardMapping</function> 7570f8248bfSmrgis the Xkb equivalent of the core 7580f8248bfSmrg<function>XRefreshKeyboardMapping</function> 7590f8248bfSmrgfunction. It requests that the X server send the current key mapping 7600f8248bfSmrginformation to this client. A client usually invokes 7610f8248bfSmrg<function>XkbRefreshKeyboardMapping</function> 7620f8248bfSmrgafter receiving an 7630f8248bfSmrg<symbol>XkbMapNotify</symbol> 7640f8248bfSmrgevent. 7650f8248bfSmrg<function>XkbRefreshKeyboardMapping</function> 7660f8248bfSmrgreturns 7670f8248bfSmrg<symbol>Success</symbol> 7680f8248bfSmrgif it succeeds and 7690f8248bfSmrg<errorname>BadMatch</errorname> 7700f8248bfSmrgif the event is not an Xkb event. 771e9fcaa8aSmrg</para> 772e9fcaa8aSmrg 773e9fcaa8aSmrg 774e9fcaa8aSmrg<para> 7750f8248bfSmrgThe 7760f8248bfSmrg<symbol>XkbMapNotify</symbol> 7770f8248bfSmrgevent can be generated when some client calls 7780f8248bfSmrg<function>XkbSetMap</function>, 7790f8248bfSmrg<function>XkbChangeMap</function>, 7800f8248bfSmrg<function>XkbGetKeyboardByName</function>, 7810f8248bfSmrgor any of the standard X library functions that change the keyboard mapping 782e9fcaa8aSmrgor modifier mapping. 783e9fcaa8aSmrg</para> 784e9fcaa8aSmrg 785e9fcaa8aSmrg 786e9fcaa8aSmrg<para> 7870f8248bfSmrgTo translate a keycode to a key symbol and modifiers, use 7880f8248bfSmrg<function>XkbTranslateKeyCode</function>. 789e9fcaa8aSmrg</para> 790e9fcaa8aSmrg 791e9fcaa8aSmrg 7920f8248bfSmrg<indexterm significance="preferred" zone="XkbTranslateKeyCode"><primary><function>XkbTranslateKeyCode</function></primary></indexterm> 7930f8248bfSmrg<funcsynopsis id="XkbTranslateKeyCode"> 7940f8248bfSmrg <funcprototype> 7950f8248bfSmrg <funcdef>Bool <function>XkbTranslateKeyCode</function></funcdef> 7960f8248bfSmrg<!-- ( 7970f8248bfSmrg<parameter>xkb, key, mods, mods_rtrn, keysym_rtrn)</parameter> --> 7980f8248bfSmrg 7990f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 8000f8248bfSmrg <paramdef>KeyCode <parameter>key</parameter></paramdef> 8010f8248bfSmrg <paramdef>unsigned int <parameter>mods</parameter></paramdef> 8020f8248bfSmrg <paramdef>unsigned int *<parameter>mods_rtrn</parameter></paramdef> 8030f8248bfSmrg <paramdef>KeySym *<parameter>keysym_rtrn</parameter></paramdef> 8040f8248bfSmrg </funcprototype> 8050f8248bfSmrg</funcsynopsis> 8060f8248bfSmrg<variablelist> 8070f8248bfSmrg <varlistentry> 8080f8248bfSmrg <term> 8090f8248bfSmrg <parameter>xkb</parameter> 8100f8248bfSmrg </term> 8110f8248bfSmrg <listitem> 8120f8248bfSmrg <para> 8130f8248bfSmrg keyboard description to use for translation 8140f8248bfSmrg </para> 8150f8248bfSmrg </listitem> 8160f8248bfSmrg </varlistentry> 8170f8248bfSmrg <varlistentry> 8180f8248bfSmrg <term> 8190f8248bfSmrg <parameter>key</parameter> 8200f8248bfSmrg </term> 8210f8248bfSmrg <listitem> 8220f8248bfSmrg <para> 8230f8248bfSmrg keycode to translate 8240f8248bfSmrg </para> 8250f8248bfSmrg </listitem> 8260f8248bfSmrg </varlistentry> 8270f8248bfSmrg <varlistentry> 8280f8248bfSmrg <term> 8290f8248bfSmrg <parameter>mods</parameter> 8300f8248bfSmrg </term> 8310f8248bfSmrg <listitem> 8320f8248bfSmrg <para> 8330f8248bfSmrg modifiers to apply when translating <parameter>key</parameter> 8340f8248bfSmrg </para> 8350f8248bfSmrg </listitem> 8360f8248bfSmrg </varlistentry> 8370f8248bfSmrg <varlistentry> 8380f8248bfSmrg <term> 8390f8248bfSmrg <parameter>mods_rtrn</parameter> 8400f8248bfSmrg </term> 8410f8248bfSmrg <listitem> 8420f8248bfSmrg <para> 8430f8248bfSmrg backfilled with consumed modifiers 8440f8248bfSmrg </para> 8450f8248bfSmrg </listitem> 8460f8248bfSmrg </varlistentry> 8470f8248bfSmrg <varlistentry> 8480f8248bfSmrg <term> 8490f8248bfSmrg <parameter>keysym_rtrn</parameter> 8500f8248bfSmrg </term> 8510f8248bfSmrg <listitem> 8520f8248bfSmrg <para> 8530f8248bfSmrg keysym resulting from translation 8540f8248bfSmrg </para> 8550f8248bfSmrg </listitem> 8560f8248bfSmrg </varlistentry> 8570f8248bfSmrg</variablelist> 858e9fcaa8aSmrg 859e9fcaa8aSmrg<para> 8600f8248bfSmrg<parameter>mods_rtrn</parameter> 8610f8248bfSmrgis backfilled with the modifiers consumed by the translation process. 8620f8248bfSmrg<parameter>mods</parameter> 8630f8248bfSmrgis a bitwise inclusive OR of the legal modifier masks: 8640f8248bfSmrg<symbol>ShiftMask</symbol>, 8650f8248bfSmrg<symbol>LockMask</symbol>, 8660f8248bfSmrg<symbol>ControlMask</symbol>, 8670f8248bfSmrg<symbol>Mod1Mask</symbol>, 8680f8248bfSmrg<symbol>Mod2Mask</symbol>, 8690f8248bfSmrg<symbol>Mod3Mask</symbol>, 8700f8248bfSmrg<symbol>Mod4Mask</symbol>, 8710f8248bfSmrg<symbol>Mod5Mask</symbol>. 8720f8248bfSmrgThe 8730f8248bfSmrg<emphasis>AlwaysConsumeShiftAndLock</emphasis> 8740f8248bfSmrglibrary control (see <link linkend="AlwaysConsumeShiftAndLock">section 11.1.3</link>), if enabled, causes 8750f8248bfSmrg<function>XkbTranslateKeyCode</function> 8760f8248bfSmrgto consume shift and lock. 8770f8248bfSmrg<function>XkbTranslateKeyCode</function> 8780f8248bfSmrgreturns 8790f8248bfSmrg<symbol>True</symbol> 8800f8248bfSmrgif the translation resulted in a keysym, and 8810f8248bfSmrg<symbol>False</symbol> 8820f8248bfSmrgif it resulted in 8830f8248bfSmrg<symbol>NoSymbol</symbol>. 884e9fcaa8aSmrg</para> 885e9fcaa8aSmrg</sect1> 886e9fcaa8aSmrg</chapter> 887