AaBo33     $ ' &HH $ d H?HHff@  d' I Footnote TableFootnote**. . - :;,..!?ird"`!:  a5 LORFontsLOT TableTitleLOFFigureTOC 1Appendix1Heading2Heading3Heading4Heading(!)((_)),ATOMsAXN_AXKWarning AXN_BKAccept AXN_BKReject AXN_SKAccept AXN_SKPress AXN_SKReject AXN_SKReleaseAX_BounceKeysRejectAX_FeatureChange AX_FeatureOff AX_FeatureOnAX_IndicatorChangeAX_IndicatorOffAX_IndicatorOnAX_LatchToLockAX_SlowKeyAcceptAX_SlowKeyPressAX_SlowKeyRejectAX_SlowKeyReleaseAX_SlowKeysWarningAX_StickyLatch AX_StickyLockeAX_StickyUnlocka AX_TwoKeys AccessDOS3AccessXAccessXFeedback AccessXKeys AccessXNotifydAccessXTimeoutActionMessageLengthAllocAltHAltspace AnyOfOrNone BKRejectFB BounceKeys ButtonPress ButtonReleaseByelorussian_shortuChangeKeyboardControlChangeKeyboardDeviceChangeKeyboardMappingClampIntoRangeCompatGrabModsCompatLookupMods CompatNameControlsEnabled.CtrlCyrillic Cyrillic_a Cyrillic_bea Cyrillic_che Cyrillic_de Cyrillic_dzhe Cyrillic_e Cyrillic_ef Cyrillic_elO Cyrillic_em Cyrillic_enO Cyrillic_eri Cyrillic_es Cyrillic_ghe Cyrillic_hagCyrillic_hardsign Cyrillic_i Cyrillic_ier Cyrillic_ioc Cyrillic_jee Cyrillic_kac Cyrillic_lje Cyrillic_nje Cyrillic_o Cyrillic_peB Cyrillic_shaCyrillic_shchaCyrillic_shortifCyrillic_softsignX Cyrillic_ten Cyrillic_tse Cyrillic_u Cyrillic_veX Cyrillic_ya Cyrillic_yerut Cyrillic_yur Cyrillic_zeK Cyrillic_zheDetectableAutorepeat DeviceBellDeviceButtonPressXDeviceButtonReleasekDeviceKeyPress DfltXIClassODfltXIId DumbBellFBExplicitAutoRepeatExplicitBehaviorExplicitComponentsExplicitInterpExplicitInterpretlExplicitKeyType ExplicitVModMape FeatureFBnGBN_ClientSymbols GBN_CompatMap GBN_GeometryGBN_IndicatorMap GBN_KeyNamesGBN_OtherNamesGBN_ServerSymbolsa GBN_Types GeometryNameGetKeyboardControlGetKeyboardMappingGetModifierMappingGnLn GrabButtonGrabsUseXKBState Greek_alphayGreek_alphaaccentc Greek_beta Greek_chiy Greek_deltai Greek_epsilonlGreek_epsilonaccent Greek_etaOGreek_etaaccenty Greek_gammay Greek_iotaGreek_iotaaccentGreek_iotadieresis Greek_kappal Greek_lambda Greek_lamdalGreek_muGreek_nu Greek_omegaeGreek_omegaaccenti Greek_omicroncGreek_omicronaccenty Greek_phiaGreek_pi Greek_psiy Greek_rhos Greek_sigmac Greek_taul Greek_thetal Greek_upsilonvGreek_upsilonaccentiGreek_upsilondieresisrGreek_xi Greek_zeta GroupBasee GroupCompate GroupStateIM_LEDDrivesKBIM_NoAutomatic IM_NoExplicite IM_UseBase IM_UseCompatIM_UseEffectivee IM_UseLatchedu IM_UseLocked IM_UseNoneISOLockt IabovedotIgnoreGroupLockxIgnoreLockModsIgnoreLocksModifiers IndicatorFBe InputFocus KB_DefaultKB_Lock KB_RadioGroup KP_End KTLevelNamesKbdFeedbackClass KeyActiont KeyActions KeyAliases KeyBehaviore KeyBehaviorsKeyClassKeyNamesKeyPress KeyRelease KeySymMapeKeySymsKeyTypeb KeyTypeNamesKeyTypes KeycodesNameKeymapslLC_AlphanumericKeysaLC_AlternateGroup_ LC_DefaultLC_FunctionKeys_ LC_Hiddenn LC_KeypadKeysLC_ModifierKeys LC_Partial LISTofACTION LISTofATOM LISTofCHARLISTofDETAILMASKLISTofKBKEYGEOMaLISTofKB_ACTIONlLISTofKB_ALTSYMMAPLISTofKB_BEHAVIOReLISTofKB_COMPONENTNAMELISTofKB_COMPONENT_NAMEnLISTofKB_COUNTEDSTRINGLISTofKB_DOODADeLISTofKB_GETRADIOGROUPLISTofKB_GROUPCOMPATMAPrLISTofKB_INDICATORMAPi LISTofKB_KEYLISTofKB_KEYACTIONLISTofKB_KEYALIASeLISTofKB_KEYBEHAVIORLISTofKB_KEYEXPLICITLISTofKB_KEYMODMAPLISTofKB_KEYNAMELISTofKB_KEYSYMMAPLISTofKB_KEYTYPELISTofKB_KEYVMODMAPaLISTofKB_KTMAPENTRY LISTofKB_KTSETMAPENTRYLISTofKB_MODCOMPATMAPcLISTofKB_MODDEFsLISTofKB_OUTLINELISTofKB_OVERLAYLISTofKB_OVERLAYKEYuLISTofKB_OVERLAYROWoLISTofKB_POINTLISTofKB_PROPERTYeLISTofKB_REGIONt LISTofKB_ROWLISTofKB_SECTIONLISTofKB_SETALTSYMMAPsLISTofKB_SETINDICATORMAPLISTofKB_SHAPELISTofKB_SYMINTERPLISTofKB_SYMINTERPRETmLISTofKEYBUTMASK LISTofKEYSYMLISTofLISTofATOM LISTofVALUEA LeaveLocksLedFeedbackClass LockingKeyLookupStateWhenGrabbed Macedonia_dsef Macedonia_gjer Macedonia_kjeI MappingNotify MaxColors MaxKbdGroupsMaxRadioGroupsMeta ModifierBase ModifierLatchT ModifierLock ModifierMap ModifierStateE MotionNotify MouseKeysTMouseKeysAccel NKN_DeviceID NKN_Geometry NKN_KeycodesNoSymbolNoneOf NormalLocksO NullKeyNameTNumLockCNum_LockOneThingOoblique OutlineDoodadI PADtoWORDLPCF_AutoResetControlsIPCF_DetectableAutorepeatPCF_GrabsUseXKBStateMask PerKeyRepeatPhysSymbolsNamePointerButtons PointerWindowM QueryPointer RGAllowNone RGNamesB RadioGroupRedirectIntoRangeP RepeatKeysSA_ActionMessageSA_AffectDfltBtn SA_ClearLocksI SA_DeviceBtnSA_DeviceValuatorL SA_ISOLock SA_IgnoreVal SA_LatchGroupe SA_LatchModsSA_LatchToLockSA_LockControlsISA_LockDeviceBtn SA_LockGroup SA_LockModsA SA_LockPtrBtnB SA_MovePtr SA_NoActionP SA_PtrBtnSSA_RedirectKeySA_SetControls SA_SetGroup SA_SetMods SA_SetPtrDfltUSA_SetValAbsoluteFSA_SetValCenterk SA_SetValMax SA_SetValMinSA_SetValRelative SA_SwitchScreenaSA_TerminateServer SETofEVENTSI_AllOfSI_AnyOfSI_AnyOfOrNone SI_Exactly SI_NoneOf SKAcceptFB SKPressFBr SKRejectFB SKReleaseFBi SendEvento Serbian_djeo Serbian_tsheServerInternalModifiers SetKeyboardControlSetMapRecomputeActionsSetMapResizeTypeslSetModifierMapping Shift+Ctrl+Z Shift+Lock Shift+NumLockaSlowKeysSlowKeys SlowWarnFB SolidDoodade StickyKeys StickyKeysFB SymInterpa SymInterpret SymbolsNamey TypesName Ukrainian_is Ukrainian_ie Ukrainian_yi UseCoreKbdUseCoreKeyboarda UseCorePtr VirtualModMapPVirtualModNamesA VirtualModsWaismanD WrapIntoRangerXBell XKBawaren XKBunawarelXkbAX_LatchToLock XkbAX_TwoKeysAXkbAccessXFeedbackMaskXkbAccessXKeysMaskXkbAccessXNotifyXkbAccessXTimeoutMaskcXkbActionMessageXkbAllActionMessagesXkbBell XkbBellNotifyAXkbBounceKeysMaskcXkbCompatMapNotifyXkbControlsEnabledMaskXkbControlsNotify XkbDfltXIIdlXkbErr_BadClassnXkbErr_BadDevice XkbErr_BadIdXkbExtensionDeviceNotifyXkbGetCompatMapTXkbGetControlsXkbGetDeviceInfoXkbGetGeometryXkbGetGeometryMapaXkbGetIndicatorMapXkbGetIndicatorStateXkbGetKeyboardByName XkbGetMapnXkbGetMapByName XkbGetNamedIndicator XkbGetNamesr XkbGetStaterXkbGroupCompatMaskXkbGroupsWrapMaskpXkbIgnoreLockModsMaskeXkbIndicatorMapNotify XkbIndicatorStateNotifyaXkbInternalModsMask XkbKeyActionsMaskoXkbKeyBehaviorsMaskcXkbKeySymsMaskXkbKeyTypesMasktXkbLatchLockStateeXkbListComponentss XkbMapNotifyXkbMaxTypesPerKeyCXkbModifierMapMaskXkbMouseKeysAccelMaskaXkbMouseKeysMaskXkbNamesNotifyXkbNewKeyboardNotifyXkbPerClientFlags XkbPerKeyRepeatMaskrXkbRepeatKeysMaskcXkbSelectEventsA XkbSendEventXkbSetCompatMapcXkbSetControlsXkbSetDebuggingFlagsXkbSetDeviceInfoXkbSetGeometryXkbSetIndicatorMap XkbSetMap XkbSetMapResizeTypeBXkbSetNamedIndicator XkbSetNamesXkbSlowKeysMaskdXkbStateNotifyXkbStickyKeysMaskIXkbSymInterpMask XkbUseCorePtreXkbUseExtensiondXkbVirtualModMapMaskXkbVirtualModsMaskXkbXI_ButtonActionskXkbXI_IndicatorMapstXkbXI_IndicatorNamesXkbXI_IndicatorStateXkbXI_KeyboardsaXkbXI_UnsupportedFeatureXlibaacuteabreve absoluteX absoluteYeaccessXOptionsaccessXTimeoutaccessXTimeoutMaskaccessXTimeoutOptionssaccessXTimeoutValues acircumflexc action_delta actionsRtrnractsRtrn adiaeresisae affectBellaffectCompatMap affectEnabledMaffectEnabledControlskaffectIgnoreLockModsaffectIgnoreLockRealModsaffectIndicatorMapaffectIndicatorStateaffectInternalModsaffectInternalRealMods affectMapsaffectModLatchesaffectModLocks affectNamesP affectSlowKey affectStatea affectWhichpagrave allButtonsallOftaltSymsnamacronkanyOfpaogonekk approxNdxsaringt asciicircumsatildeatlantisatlantis(acme)atsign audibleBell autoAutorepeat autoCtrlsTautoCtrlsValuesI autorepeat autorepeatingS backslashd baseColorNdx baseGroupkbaseMods behaviorsRtrna bellClassobellIDbitwisee cabovedotVcacuteccaronccedilla ccircumflexkchangeControlschangedControlsochangedGroupNamesa changedGroups_changedIndicatorsXchangedVirtualModscharSetscharset clearLockscolorNdxcompatcompatGrabModscompatLookupMods compatMapt compatMapSpect compatMaps compatStaten compiledName configurable cornerRadius createMap ctrlsR ctrlsToChange currentFlags curveFactor customizationcustomizationsdcarondebounce debounceDelayg debouncess debouncingdeviceID deviceSpec dfltBtnAbs dfltIsGroupa disableLocksdoodaddoodadsfdstrokendxdy eabovedotaeacuteecaron ecircumflexo ediaeresiseffectiveGroup effectiveModstegraveemacroncenabledControlChangesenabledControlsengoeogonekpetho eventOnlyx eventTypet explicitRtrnfirstActionRtrns firstBehavior)firstBtn firstButtonfirstButtonRtrnu firstCharSet firstElement firstGroupfirstIndicator firstKTLevelfirstKeyfirstKeyActionfirstKeyBehaviorfirstKeyExplicit firstKeySyms firstKeyTypefirstLevelNamefirstModfirstModMapKeyfirstRadioGrouphfirstSIr firstSIRtrnGfirstSym firstTypeofirstVModMapKeyc forceSound gabovedotogbrevegcedilla gcircumflexcgenEvent geometrySpecgetAllSI getAllSymsgrabMods groupAbsolutep groupInfo groupLatch groupLockn groupNames groupRtrnr groupWidth group_maps groupsRtrn groupsWidtha groupsWrap hcircumflexFheightMMhstrokeoiacute icircumflexc idiaeresisidotlessignoreLockModsignoreLockRealModsignoreLockVirtualModst ignoreLockssigraveimacronc implementorsindicatorClass indicatorIDo indicatorMap indicatorMapsuindicatorMapsRrtrnindicatorMapsRtrneindicatorNamesindicatorNamesRtrnindicatorState internalModsinternalRealModsinternalVirtualMods iogonektitilde jcircumflexA kbdGroupInfokcedilla keyAliaseskeyEventFollowsikeycodeRkeycodes keycodesSpeckeymap keymapsSpeckeysymkeysymsiktIndexlkt_index[MaxKbdGroups] labelColorNdxalacutelastSyml latchGroup latchToLockK latchedGroup latchedModsslcaronlcedillaledClass ledClassId ledClassRtrnledIDG ledIDRtrn led_mask left_bracket levelNames levelOneOnly lockGroup lockedGroupr lockedModslogoName lookupModslstroke mapChangedmapIndexmapWidthmapsRtrnmax maxKeyCodemaxNames max_accelm minKeyCode modChanges modLatchesmodLocks mode_switchimodmap modmapRtrnmodsMaskmouseKeysCurvemouseKeysDelaymouseKeysDfltBtnmouseKeysIntervalomouseKeysMaxSpeedomouseKeysTimeToAccelmouseKeysTimeToMaxnActionsnAlternateSyms nBehaviorsnBtnsanButtons nButtonsRtrn nCharSetsp nElementsMnGroupsi nIndicatorsn nKTLevelsM nKeyActionsi nKeyAliasesn nKeyBehaviorsn nKeyExplicitnKeyKeyBehaviorsnKeySyms nKeyTypese nKeyTypesRtrn nKeyse nLevelNamesc nModMapKeysbnModsn nRadioGroupsnRealIndicatorsenSIlnSIRtrncnSymsenTotalSI nTotalTypesenTypes nVModMapKeysnacute namesRtrnnncaronncedillandxonewKey newKeyboardnoAccela noAffectCtrlso noAffectGrpc noAffectMods noAffectPtrdnoLocknoUnlocknonXKBanonzerononzeroCntildenumI numGroupsr numLevelskoacute ocircumflexN odiaeresis odoubleacute offColorNdxr off_colordograve oldDeviceIDp oldMaxKeyCode oldMinKeyCodeIomacronW onColorNdxon_coloropcodeopcodesmoslashotilde perKeyRepeatpressMsg primaryNdx ptrBtnActionss ptrBtnStatep questiondownracutercaronrcedilla realIndicatorrealIndicatorsrealMods real_modsrecomputeActions redirectGroupT releaseMsgremapmremapped remappingtremaps repeatDelaysrepeatInterval requestMajor requestMinor resizableM resource_idI right_bracketL rightmostyrowUndersacutescaronscedilla scircumflexc screenAbsB sectionUnder selectAlly serverMajore serverMinoresetMapsetStateshapeNdxsiRtrn slowKeysDelayssharp stateChanged steps_to_max switchApplsymT symbolsSpecTsymssymsRtrnsynthesizeClickRtcarontcedillatimeoutotoolkit toolkits totalActions totalButtonstotalKTLevelNamesf totalKTLevelsetotalKeyBehaviorsntotalKeyExplicittotalModMapKeys totalSymsItotalVModMapKeys truncateSI truncateSymstslash typesRtrnu typesSpecf uaboveringuacuteubreve ucircumflexI udiaeresis udoubleacuteugraveumacronWunderbar uninterpretedp unmodifiableuogonek updateGroupy useDfltBtn useModMaprutildevalnvalnWhat valuators valueListn virtualMod virtualModsa virtual_mods vmodMapRtrnavmodmaplvmodse vmodsMaske vmodsRtrno wantedMajorr wantedMinorM whichGroupse whichMapsa whichMapsRtrn whichModss whichNameswhichNamesRtrn which_groups which_modswidthMMrwildcard workaround workaroundsxmodmapyacute zabovedotdzacutezcaron};%n* ?o%r+e,|e)jo   EquationVariableslsyhe)MCNYcedOYeourZit sZs  ons tto[KTL[f \vel\Key ]n ]xpl^alM^ _I_Map'`nca(`nca asla aRtr bSpe beri ce ccir (d ud )d ud 1ee 2emac :ferb ;ferp Cgnmo Dguo Lhpda Mh us$s us$sutini vaj vaj vik vika  lods lRtr mapl mn vmn waor oorMpouppMapqMapqhicrhic rhic%(n %)ups%*ods%+r%, wo%- wo%.%/ya ove %Vute "}; &@* xw%ryw, &jo &xxy y z z T  O  'p ion{l{ "vM "Y &Y|Z|Z " } }[ #[~\~\ #]]^ ^ _! _ #)"`#`$a%a&b #'b 3_(c $G)c*d+d 3,e-e.f/f0g!1g"2h$3h%4s'5s(6i*7i+8j G9j0:k1;k4<l5=l:>m;?m>@n?AnBBoCCoGDpHEpKFqLGqOHrPIr J !K LnMoNtOuP Q}R~STUVwWwXYZx[x\y]y^ z_ z`   ea b c{d{efvg hi|j|kl} wm} !no~p~ 'qrs )t *u v ! Yw"x#y$z% F{&|'}( ~) *+,-. B/ (0+1,2 (30425 +6 +v7 %<8O9P: FF;^ <f=g>k?l@m Ao B LC D EFG H G{I !J .KLM !N OPQ .8RST UVW 8+XYZ[ z\ z] z^ xw&_$` %a y'b Svc:d;e Pf NgQhRij Ok = lmnopqrstuv wxyz {|}~ )*DEc dwx '  C  H  G '  MvG)$%%:  Rrs &   '  TP  %;%<%=%>%?%@%A %B!%C"%D#%E$%F%%G&%H'%I(%K)%L*%M+%N,-./y0(123%O4%P5%i6%j7%W8%X9%l:%m;%n<%o=%p>%q?%r@%sA%tBaConventions and Assumptions Overview #13933: 2Heading: 2.1 Keyboard State =67222: 3Heading: 2.2.1 Computing Effective Modifier and Groupv @90933: 3Heading: 2.2.2 Computing A State Field from an XKB State =76018: 2Heading: 2.3 Derived Components of XKB Keyboard State& H45660: 2Heading: 6.6 Server Internal Modifiers and Ignore Locks Behavior ?32581: 2Heading: 2.4 Compatibility Components of Keyboard State "51617: 2Heading: Virtual Modifiers =+11005: 3Heading: 2.2.1 Modifier Definitions 429579: 3Heading: 3.1.1 Inactive Modifier Definitions G-28742: 1Heading: 5.0 Global Keyboard ControlsL M+48937: 2Heading: 5.1 The RepeatKeys Control ,79074: 3Heading: 6.4.2 Detectable Autorepeat (59600: 2Heading: 5.2 The SlowKeysControl +12450: 2Heading: 5.3 The BounceKeys Control 129074: 3Heading: 2.6.1 The MouseKeysAccel Control%t" .27926: 3Heading: 2.7.2 The AccessXKeys Control' v/27038: 2Heading: 5.8 The AccessXTimeout Controlt( 021748: 2Heading: 4.9 The AccessXFeedback Control, n&12486: 2Heading: 4.11 Boolean Controls.29 i929682: 2Heading: 4.12 Automatic Reset of Boolean Controlsn 2J v81140: 3Heading: Key Behaviorte&L "15763: 3Heading: 2.6.3 Key Actionsrna fT24122: 3Heading: 2.4.2 Determining the Symbol and String Associated with a Key Eventh o45629: 3Heading: Key TypesHem V#52755: 3Heading: Key Symbol Mapping3n 2H25094: 2Heading: 7.3 Transforming the KeySym Associated with a Key Eventt nClientMapExampleu e{ G#15645: 1Heading: 8.0 Symbolic Names+ e%36844: 3Heading: 9.2.1 Indicator Maps  :618543: 2Heading: 10.1 Disabling Server Generated BellsHe 5'23341: 1Heading: 11.0 Keyboard Geometry2 5)35210: 2Heading: 11.1 Shapes and Outlines:He 2.40656: 3Heading: 2.8.1 Group Compatibility Map6: n@83380: 3Heading: 12.1.1 Setting a Passive Grabs for an XKB State sK84091: 2Heading: 13.2 Changing the Keyboard Mapping Using the Core Protocoll n/35661: 3Heading: 13.2.2 Assigning Types To Keys :166444: 3Heading: 12.2.4 Assigning Actions To Keysn 2 vD39705: 2Heading: Effects of XKB on Core Protocol Requests and Events s=26687: 2Heading: 12.4 Effect of XKB on Core Protocol Requests ri c@46669: 1Heading: 13.0 The Server Database of Keyboard Components 2%49632: 2Heading: 13.1 Component Namesn 2 :J26148: 2Heading: 13.2 Partial Components and Combining Multiple ComponentsCl E%98074: 2Heading: 13.3 Component Hintsein S989133: 1Heading: 14.0 Replacing the Keyboard On-the-FlyMs H36398: 1Heading: 15.0 Interactions Between XKB and the X Input Extension e<14207: 3Heading: 15.3.9 Querying and Changing Symbolic Names a?24503: 3Heading: 15.3.11 Querying and Changing Per-Client Flagsi :K13490: 3Heading: 15.3.12 Using the Servers Database of Keyboard Components 4"22322: 1Heading: Section 6. EventsarnKeyboard StateroModifier, lockingein.Modifier, latchingey- /67792: 2Heading: 12.5 Sending Events to Clientso.2 BadDevice95:/nBadClass1nBadIdroceGroup, locking6Group, latching.oGroupnorcmodifiers, locked c: group, locked e Dmodifiers, latchedmpgroup, latchedHe1modifiers, basee group, base21modifiers, effective igroup, effective!lbuttons, pointer, state of3 "nXkbLatchLockStateS89#emodifiers, effective$agroup, effective%RedirectIntoRange10 &tClampIntoRangend'I%state field, computing from XKB staten 1(u state, XKBng)b!state, XKB, derived components ofn 1*Qmodifiers, server internalt +modifiers, ignore locks:,Ugroup, ignore locked4e InternalMods5IgnoreLockModsin6iIgnoreGroupLock7e'state, XKB, compatibility components ofn8state, XKB lookupcng9-state, XKB grabd: group compatibility mapping;astate, XKB compatibility<1state, XKB compatibility lookupl=state, compatibility grab>rclients, XKB-capable?cclients, XKB-unaware@ modifiers, virtuals,Admodifiers, realuBdmodifier definitions iw grp,jz1kurs,fflw imzefftinulbuoyint, p3 "qLatLorw89u`tmo4adEY45629: 3Heading: Key Types4afZ1129074: 3Heading: 2.6.1 The MouseKeysAccel Control,pu4a0[>n<17949: 1Appendix: Appendix B. Default Symbol Transformations4a2\><17949: 1Appendix: Appendix B. Default Symbol Transformations4aj] ,79074: 3Heading: 6.4.2 Detectable Autorepeat4al^g@83380: 3Heading: 12.1.1 Setting a Passive Grabs for an XKB State4ao_o929682: 2Heading: 4.12 Automatic Reset of Boolean Controlslma4ar`tD39705: 2Heading: Effects of XKB on Core Protocol Requests and Events4auai/35661: 3Heading: 13.2.2 Assigning Types To Keysc4axb/35661: 3Heading: 13.2.2 Assigning Types To Keys,4a{ci/35661: 3Heading: 13.2.2 Assigning Types To Keys4a~ydl/35661: 3Heading: 13.2.2 Assigning Types To Keys4ae"166444: 3Heading: 12.2.4 Assigning Actions To Keys4af:166444: 3Heading: 12.2.4 Assigning Actions To Keysn.64age166444: 3Heading: 12.2.4 Assigning Actions To KeysdAp4a4hy166444: 3Heading: 12.2.4 Assigning Actions To Keys:pe4acweH45660: 2Heading: 6.6 Server Internal Modifiers and Ignore Locks Behavior4axt@90933: 3Heading: 2.2.2 Computing A State Field from an XKB State4aXye.40656: 3Heading: 2.8.1 Group Compatibility Mapma4azn.40656: 3Heading: 2.8.1 Group Compatibility Mapg:4a. {CK84091: 2Heading: 13.2 Changing the Keyboard Mapping Using the Core Protocol.4a |K?24503: 3Heading: 15.3.11 Querying and Changing Per-Client Flagsy4a }"22322: 1Heading: Section 6. Eventssi4aA ~"22322: 1Heading: Section 6. Eventsg:4a3 y"15763: 3Heading: 2.6.3 Key Actions444aS 021748: 2Heading: 4.9 The AccessXFeedback Control4a."22322: 1Heading: Section 6. Events4a 481140: 3Heading: Key BehavioriTo4aF4618543: 2Heading: 10.1 Disabling Server Generated Bellsey4awwH45660: 2Heading: 6.6 Server Internal Modifiers and Ignore Locks Behavior4ax=67222: 3Heading: 2.2.1 Computing Effective Modifier and Groupn S4a+yH45660: 2Heading: 6.6 Server Internal Modifiers and Ignore Locks Behavior4a#dH45660: 2Heading: 6.6 Server Internal Modifiers and Ignore Locks Behavior4aőK+48937: 2Heading: 5.1 The RepeatKeys Control4aȵ0&12486: 2Heading: 4.11 Boolean Controls-C4a(618543: 2Heading: 10.1 Disabling Server Generated Bells4a"-28742: 1Heading: 5.0 Global Keyboard Controls 4a>d81140: 3Heading: Key Behavior4a2"15763: 3Heading: 2.6.3 Key Actions4a.@90933: 3Heading: 2.2.2 Computing A State Field from an XKB State4ahT24122: 3Heading: 2.4.2 Determining the Symbol and String Associated with a Key Event4aH25094: 2Heading: 7.3 Transforming the KeySym Associated with a Key Event4aT24122: 3Heading: 2.4.2 Determining the Symbol and String Associated with a Key Event4a d"51617: 2Heading: Virtual Modifiersor4a!D39705: 2Heading: Effects of XKB on Core Protocol Requests and Events4a"r?32581: 2Heading: 2.4 Compatibility Components of Keyboard Statet4a#@90933: 3Heading: 2.2.2 Computing A State Field from an XKB State4a<$:,79074: 3Heading: 6.4.2 Detectable Autorepeat4a_%4@90933: 3Heading: 2.2.2 Computing A State Field from an XKB State4a&y45629: 3Heading: Key Types24a':#13933: 2Heading: 2.1 Keyboard State4at(:@90933: 3Heading: 2.2.2 Computing A State Field from an XKB State4a):=67222: 3Heading: 2.2.1 Computing Effective Modifier and Groupe4a*45629: 3Heading: Key Typesin4a+a429579: 3Heading: 3.1.1 Inactive Modifier Definitions4a ,iH25094: 2Heading: 7.3 Transforming the KeySym Associated with a Key Event4a6->r<17949: 1Appendix: Appendix B. Default Symbol Transformations4a.tClientMapExample4a/T24122: 3Heading: 2.4.2 Determining the Symbol and String Associated with a Key Event4a0d@46669: 1Heading: 13.0 The Server Database of Keyboard Components4am1d'23341: 1Heading: 11.0 Keyboard Geometry_4a23K13490: 3Heading: 15.3.12 Using the Servers Database of Keyboard Componentsy4a!3y<14207: 3Heading: 15.3.9 Querying and Changing Symbolic Names4a$4+11005: 3Heading: 2.2.1 Modifier DefinitionsS4a'5S&12486: 2Heading: 4.11 Boolean Controlsg:4a*6f021748: 2Heading: 4.9 The AccessXFeedback Control4a-w7y#15645: 1Heading: 8.0 Symbolic Names74a0u8t)35210: 2Heading: 11.1 Shapes and OutlinesH4a3!93#13933: 2Heading: 2.1 Keyboard Stateh4a6:166444: 3Heading: 12.2.4 Assigning Actions To Keys ol4a8;><17949: 1Appendix: Appendix B. Default Symbol Transformations4a:<481140: 3Heading: Key Behavioriss4a<=E#13933: 2Heading: 2.1 Keyboard State14a@Z>r.40656: 3Heading: 2.8.1 Group Compatibility Mapd4aC?:45629: 3Heading: Key Types4aG@9K13490: 3Heading: 15.3.12 Using the Servers Database of Keyboard Components4aJA0"15763: 3Heading: 2.6.3 Key ActionsSy4aMB"22322: 1Heading: Section 6. Events M4aPkCS#13933: 2Heading: 2.1 Keyboard Stated4aSZDo.40656: 3Heading: 2.8.1 Group Compatibility Maphe4aVEn#52755: 3Heading: Key Symbol Mapping14aYFa#13933: 2Heading: 2.1 Keyboard State24a],Gd+11005: 3Heading: 2.2.1 Modifier Definitions24a`Ht129074: 3Heading: 2.6.1 The MouseKeysAccel Control.si4acIy+48937: 2Heading: 5.1 The RepeatKeys Controlx4afJy(59600: 2Heading: 5.2 The SlowKeysControl4aiKy+12450: 2Heading: 5.3 The BounceKeys Control24am?Lt"15763: 3Heading: 2.6.3 Key Actionsad4apcMm129074: 3Heading: 2.6.1 The MouseKeysAccel Controleg:4asN.27926: 3Heading: 2.7.2 The AccessXKeys Control S4avO /27038: 2Heading: 5.8 The AccessXTimeout Control64azPA#52755: 3Heading: Key Symbol Mapping24a~4Q /35661: 3Heading: 13.2.2 Assigning Types To Keys:4aR166444: 3Heading: 12.2.4 Assigning Actions To KeysCti4aS166444: 3Heading: 12.2.4 Assigning Actions To Keysn4aTa%36844: 3Heading: 9.2.1 Indicator Maps4aU+%36844: 3Heading: 9.2.1 Indicator Mapsn4a1Vt@46669: 1Heading: 13.0 The Server Database of Keyboard Components4aZW2'23341: 1Heading: 11.0 Keyboard Geometry4aǕX0%49632: 2Heading: 13.1 Component Namesai4aY5%98074: 2Heading: 13.3 Component Hints4aͲZ"@46669: 1Heading: 13.0 The Server Database of Keyboard Components4a[MJ26148: 2Heading: 13.2 Partial Components and Combining Multiple Componentses4a\SJ26148: 2Heading: 13.2 Partial Components and Combining Multiple Componentsz4ad]5H36398: 1Heading: 15.0 Interactions Between XKB and the X Input Extension4a^ 989133: 1Heading: 14.0 Replacing the Keyboard On-the-Flysin4aj_s=124591: 1Appendix: Appendix C. Canonical Key Typessin4a߃`989133: 1Heading: 14.0 Replacing the Keyboard On-the-FlyM4aha#13933: 2Heading: 2.1 Keyboard Stater4ab#13933: 2Heading: 2.1 Keyboard Statee4acr-28742: 1Heading: 5.0 Global Keyboard Controlseg:4adeH45660: 2Heading: 6.6 Server Internal Modifiers and Ignore Locks Behavior4ae%(59600: 2Heading: 5.2 The SlowKeysControl4af@+12450: 2Heading: 5.3 The BounceKeys Controly4aqgH36398: 1Heading: 15.0 Interactions Between XKB and the X Input Extension4ajs/67792: 2Heading: 12.5 Sending Events to Clientsau"u <$paratext[Title]>v <$paratext[Heading1]>w <$curpagenum>1x<$lastpagenum>y"<$monthnum>/<$daynum>/<$shortyear>z<$monthname> <$daynum>, <$year>cg {;<$monthname> <$daynum>, <$year> <$hour>:<$minute00> <$ampm>eix|"<$monthnum>/<$daynum>/<$shortyear>} (Continued)13~+ (Sheet <$tblsheetnum> of <$tblsheetcount>)y <$fullfilename>#"<$monthnum>/<$daynum>/<$shortyear><$monthname> <$daynum>, <$year>1ey ProtoRevision1.0c DocRevision:1.0dg: LastRevision REVIEW_01ePagepage <$pagenum>H66Heading & Page <$paratext> on page<$pagenum>Section & Page%Section<$paranum> on page<$pagenum>2heSee Heading & Page%See <$paratext> on page<$pagenum>.3he Table & Page7Table<$paranumonly>, <$paratext>, on page<$pagenum>aio Figure & Paget8Figure<$paranumonly>, <$paratext>, on page<$pagenum>SectiondSection <$paranumonly>FigureFigure<$paranumonly> AppendixAppendix <$paranumonly>uag Section Name "<$paratext>"ysectionmsection <$paranumonly>appendixappendix <$paranumonly>cg Paragraph Number <$paranum> <$filename>e>  <$marker1> <$marker2> LibVersion1.0 DocVersion1.0=M?= types.fm4<$>dflttrns.fm4a fuUUVVAWWXXYYALaZZ[[Aein\\]]TOC%^^IX>2__LOF ``LOTaTAa- }<- ge . a/ PFi%0 n>,1 t p B 2 u%3 n 4 l B5 i$p 6 7 ixd8 nag 9 o : >c; n < l= ix> ng ? rmb@ u A a> B C a D r1.E oonF M G f H nI  J  K VL  M  2N O  >P Y 0Q  R  <S T Ae U  V W X  Y ^ Z [ LO\  ]  ^ a_ a `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~          C    C  C  C  D  D  C  D  D   D  D   D  D  D  D  D  D  D  D  D  D"  D  D$  D(  D   D*  D.  D&  D0  D4  D,  D6  D:  D2  D<  D@  D8  DB  DF  D>  DH  DL  DD  DN    DJ                                                     %      3    %      )    3  "  #  %  /  '  *  +  6  -  0  1  @  4  7  8  9  :  ;  <  E  >  A  L  C  F  G  Q  I  J  W  N  O  R  ]  U  X  Y  a  [  &%  8  g  _  b  c  m  e  h  i  '  k  o  p  q  r  v  w  {  '!  '  '(  '  GO  '&  GS  GM  GW  GQ  G[  GU  G_  GY  $K  G]  $N  $Q  $U!  $I"  $W#  $Y$  $]%  $S&  $_'  $a(  $e)  $[*  $g+  $i,  $m-  $c.  $o/  $q0  $u1  $k2  $w3  $y4  $}5  $s6  $7  $8  $9  ${:  $;  $<  $=  $>  $?  $@  $A  $B  $C  $D  $E  $F  $G  $H  $I  $J  $K  $L  $M  $N  $O  $P  $Q  $R  $S  $T  $U  $V  $W  $X  $Y  $Z  $[  $\ $]; 16.4.1+ $^  $_  $`  $a; 16.4.2$b; 16.4.3$c; k16.4.4 $d; 16.4.5$e; 16.4.66$f; 16.4.7$g; 16.4.8$h;{ 16.4.9 $i;  16.4.10$j;  16.4.11%k;  16.4.12% l %m %n %{o%p %q %r %s &t %u &,v %w %x %y %z %{ &.| &3} &5~ &: &< & & & & & & & & & &  &  &  & ;& .2& ;& 3$& 16& ' 6'. '  ;'  .7' ;' 8$'" 16':/'q 6's  '; 16.3.9'-'  '0 ' (  Am  Co  Gp  ?q  Ir  Ms  Et  Ou  Sv  Kw  Ux  Yy  Qz  [{  _|  W}  a~  e  ]  g  k  c  m  q  i  s  w  o  y  } ; u 2     { 6     Y  K ; Y 7 J  M  Y  6/L  O  Y   ;N  .9Q - Y    0S  Y R  ?  Y  ?  ?  Y  ?  ? 9 ? 999898888 8888 888 8  88 8 8  8 88 8  8 8 !8 18   38 58 78L8 / N8P8R8Z9J \ 9!9`" X#9b$89%8f& 9^' 9h(89)88l* 9d+ 8n,88-88r. 8j/ t088188x2 8p3 8z48588~6 8v7 888898: 8|; 8<88=88> ? 8@88A88 JB 8C  LD88 NE88 [F 8 HG 8 ]H8 _I88J 8 YK 8L88M8 N98O 8 P98 Q99 R9 S99 T89 U9 V99 W88 X88 Y8 Z8 [88 \ 8 ]8 ^8 _88 `88 a8 b  c88 d88 e8 f8 g88 h 8 i8 j8 k88 l88 n     8  8     : 8  8   :   8  8      8  8     : 8  8   9 :   9   9  9  9  8  9  9  8  8 ! 8 ! 8 ! 8 !  ! 8 ! 8 ! 8 ! 8 ! 8 !  ! 8 ! 8 ! 8 ( 8 ! 8 5]  ( 8 (# 8 5Q 8 (6 8 (!  (+  (%  (T  ()  (  (P  (  (  (  (  (  (  (  (  (  (  .  (  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .!  ."  5#  .$  +z%  5&  +x'  +~(  5)  +|*  ++  5,  6-  6.  5/  6 0  +1  6+2  +3  6>4  6U5  6/6  6W7  5c8  6Y9  + :  5e;  +<  +=  5g>  + ?  +@  5xA  +B  5C  5iD  5vE  +F  5G  +H  5I  MJ  5K  ML  MM  MN  MO  MP  MQ  MR  MS  MT  MU  MV  MW  MX  MY  MZ  M[  M\  M]  M^  M_  M`  Ma  zb  Mc  zd  Ne  zf  Ng  Nh  Ni  Nj  Nk  Nl  Nm  Nn  Oo  Np  Oq  Or  Os  Ot  Ou  Ov  Ow  Ox  Py  Oz  O{  P|  O}  O~  P  O  P  P  P;  P  P?  P9  PK  P=  P[  PI  Pk  PY  P}  Pi  R  P{  R  R  R  R  S  R  U  S  T  U  T  T  U  T  T  U  T  T  U  T  T  U  T  T  U  T  T  U  T  T  U  T  T  U  T  U  U  U  U  U  U  U   U  U  U  U  U  U   U  U   U  U   x{  x  xy  x  x}  x  x  y  x  y  y  y  y  y  y  y  y  y  y X  y YZ[ \d i^ j h]>1.0Uf Te(UcI UJ UKULUMUNU OUPU {QUfRUmS UoTpUqVrWsXzYZ x [ xy -7\<1.1 -;]} ^>2.0 _ !` !a |b  jc d  "e<2.1 ef " g !h<2.2 i j k l m n o  !p;2.2.1 "q "r  !s  "Yt "Zu "[v "pw U "x;2.2.2 "yc "z "{ "| "} "~  !<2.3U U & U & & &;2.3.1 &q & r & s & z &  <2.4xy ! & ;} ! + { & ! G | "Notec }  U>3.0 V k   <     M<3.1 z { |  x  ;  1       ;3.1.1  ;  2 T<3.2" X" } " a " ">4.0 $,  "<4.1 # #  %;4.1.1& %2. &;4.1.2& && && & & & & 4 H  "<4.2! #+ # { #& #<4.3 # #  $# > #<4.4 $ $  $ < $  $< $ $ $<4.5 $3 $6  #<;4.6 # #  #;4.6.1 #; # 1 ##  #';4.6.2 #(< #*<4.7 #+ #, #- #. 3i  #<4.8 $ $  $  #< 4.9 $F; % & 3z & zH & #< 4.10 %$ %(  3  3< 4.11 3 %}  %r< 4.12 # #  >#5.0>   1. !2. !<3.  $ K 1. L!2. _!3. u!4. >66.0 %; "<6.1 % % "" " ; " " "  " "2 "    <<6.27 %     %    <6.33i  #          <              < |   ~   8         " <6.4 &4  &|  &p  3  &b  &  4 !  & ";6.4.1 4# #! 4C $ . 4f % 4v &# 4 '"2. 4 ( !s )>u7.04. + * > +<7.1 ,< - .  w= / " w 0  w~ 1Note 2<7.2 32 ' 4  6 5 < 6  7;7.2.1% 8 'u 9 3 'K :  'F ;$  <  =   >  ?  J @  K A G B  C;7.2.2 D< E  F  G  H ' I ' J  i K  j L k M l N , O   P<7.3 '7 Q; '5 R 1 ', S   TNote  U  U V<7.4" W.  X > Y 4. Z > [  ! \ <  ]>8.0  ^ ! _ " " `  # aNote $ b  % c  5% d  & e 6< ' f  ( g ) h. * i  F j 3 + k  , l  ' m> 9.0 ' n ' o  ' p  ' q  ' r< 9.1 ' s; ' t  ' u  ' v< 9.2 ' w ' x; 9.2.1' ' y' ' z ' { ' | ' } ( ~ , (   ( 3 (  )  )  ' % )#  + U +  +  +u  +  +  + ! +  + > 10.0 G ! , " , < 10.1 ,  ,h  H < 10.2 I  ,  ,  J < 10.3 K F , + |D , |E < 10.4 M ' , ' , ' N < 10.5 O  , ' e > 11.0 f  6  6  6  6   6  6  6  6  F  7  j  n  7  K < 11.1 L  L  L  L U L  L  K  7; < 11.2 7H  7  7Y "> 7!  7" # ~ < 11.3          I        "J  "3K 7g < 11.4 7h D 7 E 7 4M 7 , 7 , 7 N 7 >  12.0 , , , e O  .0 P  Q  R  -4   < 12.1 -q 6  6  6  ; 12.1.1 -}    -  -  C << 12.21 g  ~  . ; 12.2.1 .  />  /: ; 12.2.2 /L  /R H /  0) Y / %! / " /! ~ /" 3 /#  /$  /-  ; 12.2.3      " LJ " 0 < .  >  ; 12.2.4  , # , > N >   LW  LX  LY O L] P 1  Q - R 4 4 8  1 >       ;  12.2.5   < 12.3    C  2        12    8[  > 8h  : 2[ <2 12.4      2  2  % 2   2     !  8 " x #  xd $< 13.1 xe %3 xf &  xg '< 13.2 xh (J" xi ) < xj * xk + xl , xm -2 xn . xo / xp 0 xq 1  xr 2 xs 3  xt 4 O xu 5<P 13.3 xv 6 x 7  x 8  x_ 9< 13.4 9 : 9 ;; 13.4.1 9 <; x = .5 9 >; 13.4.2 9 ? 9' A; 13.4.3 9( B2 x C  92 D; 13.4.4 93 E y F 8[ y G 8h y HNote y I; 13.4.5 y J zX K  ? L< 13.5 ? M zb N  L O>14.0! L P N! Q  N2 R < N> S  NO T3 NR U NS V NW Wh NX Xi NY Y j Z>k15.0 2 [ N \2 O! ]  O% ^  * _<15.11 2 ` O- a  & b<15.2 c< O, d  OT e  Lk f<15.3 Lo g< Om h  Or i ; O` j<15.4 O kx O l 9 O m  13 . n>16.0 3 o<16.14 4 p 5 q _ r<;16.2~ s3 O t b u=16.3 : vte C w;;16.3.14` x' y( z)<^ {* |  } > ~  G ;16.3.2 +2 (> ,O3 *R S r Wh n Xi 8 Y E  < 0  N  O!  O%! ;16.1.1" ; 16.1.2#  = A H , N ;T16.3.3  -| (} ,~ *  <       ?R 3> R ;16.3.4 -1 (5 ) ,.2 *  =  e;  .1  ' ( -) (* , *  ; 2   #  S ;16.3.5 - ( . , * ?l    ; 1"  16  # -= ,A *H NT S 6 t         <     S  f 3> w   -  ( W ;516.3.6  - ( ) *= !   e; [ .1 j ' \ ( u ) *       ; $ 2 ,  ?  L  V  }  ~   .        O " 6   P *    T   Q  L  L  L  E - (  ,  *  >    - L  (; .6  - ( ) *   n   X x     @  @  @   @   @  A  A8  AA    Ad       !  "  #  A $  A %;16.3.7 &- L '( M () ),* ** A +  A ,  A -  A .  A /  0- 1(( 2,, 3* 4  A 5  A 6  A 7  , 8 ; B 9 6 b :;16.3.8 ;-) QD <(* QH =) >, ?* @  B< A  B- C( D) E, F* Q6 G  H  I  J  K- L( M, N* QX O  QT P  Q  R- S( T) U, V* B W  B X - B Y ( B Z ) C [, C \ C ] C ^ C! _ C+ `  a- b(- c,( d*( C. e ,* C/ f  O g  O h  CK i  CO j  C3 k  C^ l ; Cw m .8 C} n - r)( s,) t*, u * C v  DO w  D| x - D y ( D z ) D { , D | * E }  E ~  D - (U 0- ,( *, MN *Q  E  E6  E7 - E8 ( E9 ) E: , E; * E<  E  F  F ; 16.3.10# -,% (& )( , * - F9 ( FB -, -(* ( - ,* E 1.  Fa  F  F  F  G ; F 8 F ) Fx , * F  t ; 16.3.11 - (- )( ,) *, * F  F  F  G   - G ( G , x ;* 16.3.12  -  (6 ( )7 z 28( z 29) z ,:, C *; G < G  G  R  z 6 G , G  G  H - I ( \ ) ` ,( d *- G ( G  Mp * z  {N  @  I  z  {  { ; { 8 { ) { , { * {  {  { - { ( { ) { , { ; 16.3.13 x -* | ( } ) , * - P ( P , P *  -8 (9 ) P 2m  (2 ),M ,*r   Qs  Q  - ( , Q * Q  Q - Q ( Q ) , (*    Q  Q ;16.3.14 - ( ) *   RD  ; RH  8   ) R[ , RV * Ra  <16.4Z  - -( () *,  .1 S| - S ( S ) R  , U  * S)   Ss   {   S-   S=   - ( *  U !  "  S #  S $  S %  T & - T ' ( T; ( , TY ) * Th *  +-1 ,(2 -*/ .  T /  Un 0  V 1  V 2  V 3 ;9 4-1: 5(; 6* 7  V, 8  V7 9 RD V0 : RH V< ;  VK < R[ VL = RV V- >-> ?(? @* A VS B- VY C( VZ D* V] E V F  Vh G- H( W I* W J  W K  V L  M- H N( O* P- Q( R* S  T  W U  W V  W W  W= X  WP Y  Wk Z  V [  W \   ]-  ^(-  _*( W ` * W a  W b  W c W d W e W f-G g(-H h*(C i * X j  W k  l  X m  X( n   o-  p(  q*- X: r ( XA s * X t  X u  v- ; w( x* X y  z  YC { ( Yb | *  }- ~( K * Z - Z ( Z * Z  Z  Z  [  [,  [:  [D  u      - ( * 4 4 @ 4 4 4 @- 4( 4* 4 @ 4    - ( * <  12.5  X > 13.0  ;K    C(s b*   u w  d  UZ d , [x ~U* u * v'kc e 'kc e,l,F'FQ4 ,^ e 4 ,^ e:G)4)@( e ( e,l,)()q4kc ,^ e 44kc ,^ e:GF4F@" $$ " $$ -6   -640 ,^ e >40 ,^ e:G:4:@(0 e (0 e,l,:(:q'kc . 'kc .  -6  -6 0^kc e Z0^kc e9F0^F1܉S` E ܉S` E9)܉)End9 $$ 9 $$)9-6 ,F)9-6܉kc`ـ ܉kc`ـ )9-6  )9-6 ƆZkc e c,^ƆZkc eVFƆZF?'wR e 'wR e؅)')\ ƆZ e ƆZ eV)ƆZ)Եtkc e >Եtkc e؅FԵtF $$  $$-6  -6o0 ,^ e o0 ,^ e؅:o:@^ƆZ0 e 0^ƆZ0 eV:ƆZ:qƆZkc. ܉ƆZkc. -6  -6 ]kc e ]kc eaF]Fi( ,^ e i( ,^ eo>)i()@]?D e ]?D ea)]?D)i(kc ,^ e ?i(kc ,^ eo>Fi(F@V $$ \ V $$R>-6 VR>-6i(0 ,^ e >i(0 ,^ eo>:i(:@]?D0 e ]?D0 ea:]?D:q]?Dkc. ]?Dkc. R>-6 R>-6 0kc  e 0^0kc  eBF0FAT  e ܉T  e])T):g e :g eB):g)aDkc |2 e Dkc |2 e]FDFb# $$ @b# $$#-6 #-6.0 ,^ e ?.0 ,^ e]:.:@0 e \ 0 eB::q0kc. 0kc. #-6 >#-6 1aD,P )p 1aD,P )p7M1aMK8eD,P )p eD,P )phMeMK9D, r )p D, r )pb#MMK10LGD, r )p ALGD, r )pMLGMK11D, r )p D, r )p9MMK12:xD,-@ )p a:xD,-@ )p:xM:xMKKeycode::xp )p # :xp )p:x(::x(:KKey:b#s6D, r )p s6D, r )pxOMs6MK15jRG,< E .jRG,< ExO#jRG#Enter]O \6$ ]O \6$YpO ?6  YpO ?6YpO ?6 YpO ?6 YpO ?GVh   YpO ?GVh )9-Ge )p)9-Ge -Ge -Ge :xp-@1w )p:xp-@1w .hl E  .hl E;LZ'.Z'Num11)L $$  )L $$$̭-6   $̭-65]D, r )p d5]D, r )p;LM5]MK13R>-Ge KeR>-Ge  -Ge )p -Ge #-Ge  #-Ge -}h` E  -}h` E;L'Z1-}'Z1Lock-}h`E  -}h`E $̭-6  $̭-6 $̭-Ge  $̭-Ge ~` w?  `=ג  e w@ =ג  eBZc=גcAJ`  e wA hJ`  eP*wJ*w>'` e wB 1L>'` eBZ*w>'*waJK |2 e wC JK |2 ePcJKc8 n$$ wD  d8 n$$3 w-6 wE  3 w-6Jr0O ,^ e wF Jr0O ,^ eP;Jr;@>0O e wG >0O eBZ;>;q=ג. wH `E=ג. 3 w-6 wI  3 w-6 4 >k* >G wJ 4 >k* >GJHw4 Hw Group M '0 >G:q wK 1<+5k:q >G1<+?w1<+?wShift LevelM '09XF U wL @ '09XF U {+ E wM `{+ ElVlV G1L1 = a~-; E wN ~-; E&& G1L2 = Aw(/ E wO (/ E2E2E G2L1 = 5>1l E wP 5>1l E?/?/ G2L2 = {1l2 & wQ O{1l2 & w wR rw0OH/\p E wS OH/\p Ew)H)aw wT w w. wU ww.>k`1/ ,` E wV k`1/ ,` Ew;`;w. wW  w. w wX w U/C E wY {U/C Ew)U)A`w wZ =w w. w[ ;Ew.41/ o E w\ 41/ o Ew;4;Ew. w] w. 歯 ) w^ G2歯 )w歯L1 ) w_  )wL2֯nN" ) w` S ֯nN" )֯n(Y֯n(YG1֯n1N" ) wa T ֯n1N" )֯n:Y֯n:YG2w$ wb ww$ ֯n0Ǯ/Xn wc   k֯n0Ǯ/Xn +w  wd W +w  1H"\p E we 1H"\p E4w,G1H,Ga+w  wf {+w  Ow  wg Z Ow S`" ,` E wh [ S`" ,` EXw,GS`,GOw  wi  Ow  =w  wj ] =w BU"C E wk ^ BU"C EFw,GBU,GA=w  wl _ =w  aw  wm nN"aw  d4" o E wn nd4" o Ejw,Gd4,Gaw  wo naw  . ) wp  . )4w#.#L1@ ) wq   @ )Fw#@#L26+1 ) wr    e 6+1 )=w:V6+:VG1Z+1 ) ws     f Z+1 )aw:VZ+:VG2R ) wt       Z R )Xw#R#L1d ) wu       wd )jw#d#L2+w $ wv       +w $ Ow $ ww     Ow $ +wH(& wx     w+wH(& %I?9 )p wy      _ %I?9 )pE=S%SK Physical Key ,I)Q )p wz    o,I)Q )pS,SKSymbols o̘=ID )p w{   ̘=ID )pES̘=SK XKB Symbols.-O IDP )p w| -O IDP )pOwS-O SK Core Symbols)%M֔Q~ w} )%M֔Q~ ~n #  e V+NXAQI #  NXAQINXAQI60V'equal[times[char[d],id[string["step"]]],cross[string["action_delta"],cross[id[over[string["max_accel"],power[string["steps_to_max"],times[char[c],char[u],char[r],char[v],char[e],char[F],char[a],char[c],char[t],char[o],char[r]]]]],power[string["step"],string["curveFactor"]]]]] ~! #!      ƙvr #"  wyƙvrƙvr}='mequal[string["curveFactor(curve)"],plus[num[1.00000000,"1"],over[string["curve"],num[1000.00000000,"1000"]]]]L3i. #%   @  !)pEg. #&   )pg. g. 4_P '5id[cross[string["max_accel"],string["action_delta"]]] C] h    ?   ] i  o+]] '(over[string["mm"],num[10.00000000,"10"]]V: C}` l  ]cr ?  ,css}` m  sps}`}`> ar'Ctimes[over[num[1.00000000,"1"],num[10.00000000,"10"]],char[degree]]ing false 0 170 10 FKEY % false 0 300 10 FKEY % false 0 430 10 FKEY % false 0 560 10 FKEY % false 0 690 10 FKEY % false 0 820 10 FKEY % false 0 950 10 FKEY % false 0 1080 10 FKEY % % Begin row 1 labels 12 pts F1 % 12 pts F0 100 130 () centeroffset 23 add exch 40 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 23 add exch 170 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 23 add exch 300 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 23 add exch 430 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 23 add exch 560 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 23 add exch 690 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 23 add exch 820 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 23 add exch 950 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 23 add exch 1080 add exch moveto 1 -1 scale () show 1 -1 scale grestore % Begin Section 'RightFunction' gsave 2900 110 translate % Begin row 1 C000 % set color false 0 40 2 FKEY % false 0 170 2 FKEY % false 0 300 2 FKEY % false 0 430 2 FKEY % false 0 560 2 FKEY % false 0 690 2 FKEY % false 0 820 2 FKEY % false 0 950 2 FKEY % false 0 1080 2 FKEY % % Begin row 1 labels 12 pts F1 % 12 pts F0 100 130 () centeroffset 15 add exch 40 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 15 add exch 170 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 15 add exch 300 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 15 add exch 430 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 15 add exch 560 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 15 add exch 690 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 15 add exch 820 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 15 add exch 950 add exch moveto 1 -1 scale () show 1 -1 scale % 100 130 () centeroffset 15 add exch 1080 add exch moveto 1 -1 scale () show 1 -1 scale grestore C000 % set color false 0 2400 250 LOGO % Doodad KinesisLogoImage C004 % set color true 0 230 300 LED % Doodad CapsLock C000 % set color false 0 230 300 LED % Doodad CapsLock % Begin Section 'LeftAlpha' gsave 150 340 translate % Begin column 1 false 0 20 15 WIDE % false 0 20 200 WIDE % false 0 20 385 WIDE % false 0 20 570 WIDE % % Begin column 2 false 0 240 45 NORM % false 0 240 230 NORM % C002 % set color true 0 240 415 NORM % C000 % set color false 0 240 415 NORM % false 0 240 600 NORM % false 0 240 785 NORM % % Begin column 3 false 0 430 15 NORM % false 0 430 200 NORM % C002 % set color true 0 430 385 NORM % C000 % set color false 0 430 385 NORM % false 0 430 570 NORM % false 0 430 755 NORM % % Begin column 4 false 0 620 15 NORM % false 0 620 200 NORM % C002 % set color true 0 620 385 NORM % C000 % set color false 0 620 385 NORM % false 0 620 570 NORM % false 0 620 755 NORM % % Begin column 5 false 0 810 15 NORM % false 0 810 200 NORM % C002 % set color true 0 810 385 NORM % C000 % set color false 0 810 385 NORM % false 0 810 570 NORM % false 0 810 755 NORM % % Begin column 6 false 0 1000 15 NORM % false 0 1000 200 NORM % false 0 1000 385 NORM % false 0 1000 570 NORM % % Begin column 1 labels 12 pts F1 % 12 pts F0 170 160 () centeroffset 41 add exch 40 add exch moveto 1 -1 scale () show 1 -1 scale % 170 160 () centeroffset 226 add exch 40 add exch moveto 1 -1 scale () show 1 -1 scale % 170 160 () centeroffset 411 add exch 40 add exch moveto 1 -1 scale () show 1 -1 scale % 170 160 () centeroffset 596 add exch 40 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 2 labels 12 pts F1 % 12 pts F0 140 160 () centeroffset 71 add exch 260 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 256 add exch 260 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 441 add exch 260 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 626 add exch 260 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 811 add exch 260 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 3 labels 12 pts F1 % 12 pts F0 140 160 () centeroffset 41 add exch 450 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 226 add exch 450 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 411 add exch 450 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 596 add exch 450 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 781 add exch 450 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 4 labels 12 pts F1 % 12 pts F0 140 160 () centeroffset 41 add exch 640 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 226 add exch 640 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 411 add exch 640 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 596 add exch 640 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 781 add exch 640 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 5 labels 12 pts F1 % 12 pts F0 140 160 () centeroffset 41 add exch 830 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 226 add exch 830 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 411 add exch 830 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 596 add exch 830 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 781 add exch 830 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 6 labels 12 pts F1 % 12 pts F0 140 160 () centeroffset 41 add exch 1020 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 226 add exch 1020 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 411 add exch 1020 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 596 add exch 1020 add exch moveto 1 -1 scale () show 1 -1 scale grestore C004 % set color true 0 3180 300 LED % Doodad NumLock C000 % set color false 0 3180 300 LED % Doodad NumLock C004 % set color true 0 3870 300 LED % Doodad Overlay C000 % set color false 0 3870 300 LED % Doodad Overlay % Begin Section 'RightAlpha' gsave 2900 340 translate % Begin column 1 false 0 20 15 NORM % false 0 20 200 NORM % false 0 20 385 NORM % false 0 20 570 NORM % % Begin column 2 false 0 210 15 NORM % false 0 210 200 NORM % C002 % set color true 0 210 385 NORM % C000 % set color false 0 210 385 NORM % false 0 210 570 NORM % false 0 210 755 NORM % % Begin column 3 false 0 400 15 NORM % false 0 400 200 NORM % C002 % set color true 0 400 385 NORM % C000 % set color false 0 400 385 NORM % false 0 400 570 NORM % false 0 400 755 NORM % % Begin column 4 false 0 590 15 NORM % false 0 590 200 NORM % C002 % set color true 0 590 385 NORM % C000 % set color false 0 590 385 NORM % false 0 590 570 NORM % false 0 590 755 NORM % % Begin column 5 false 0 780 45 NORM % false 0 780 230 NORM % C002 % set color true 0 780 415 NORM % C000 % set color false 0 780 415 NORM % false 0 780 600 NORM % false 0 780 785 NORM % % Begin column 6 false 0 970 15 WIDE % false 0 970 200 WIDE % false 0 970 385 WIDE % false 0 970 570 WIDE % % Begin column 1 labels 12 pts F1 % 12 pts F0 140 160 () centeroffset 41 add exch 40 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 226 add exch 40 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 411 add exch 40 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 596 add exch 40 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 2 labels 12 pts F1 % 12 pts F0 140 80 () centeroffset 121 add exch 230 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 41 add exch 230 add exch moveto 1 -1 scale () show 1 -1 scale % 140 80 () centeroffset 306 add exch 230 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 226 add exch 230 add exch moveto 1 -1 scale () show 1 -1 scale % 140 80 () centeroffset 491 add exch 230 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 411 add exch 230 add exch moveto 1 -1 scale () show 1 -1 scale % 140 80 () centeroffset 676 add exch 230 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 596 add exch 230 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 781 add exch 230 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 3 labels 12 pts F1 % 12 pts F0 140 80 () centeroffset 121 add exch 420 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 41 add exch 420 add exch moveto 1 -1 scale () show 1 -1 scale % 140 80 () centeroffset 306 add exch 420 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 226 add exch 420 add exch moveto 1 -1 scale () show 1 -1 scale % 140 80 () centeroffset 491 add exch 420 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 411 add exch 420 add exch moveto 1 -1 scale () show 1 -1 scale % 140 80 () centeroffset 676 add exch 420 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 596 add exch 420 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 781 add exch 420 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 4 labels 12 pts F1 % 12 pts F0 140 80 () centeroffset 121 add exch 610 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 41 add exch 610 add exch moveto 1 -1 scale () show 1 -1 scale % 140 80 () centeroffset 306 add exch 610 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 226 add exch 610 add exch moveto 1 -1 scale () show 1 -1 scale % 140 80 () centeroffset 491 add exch 610 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 411 add exch 610 add exch moveto 1 -1 scale () show 1 -1 scale % 140 80 () centeroffset 676 add exch 610 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 596 add exch 610 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 781 add exch 610 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 5 labels 12 pts F1 % 12 pts F0 140 80 () centeroffset 151 add exch 800 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 71 add exch 800 add exch moveto 1 -1 scale () show 1 -1 scale % 140 80 () centeroffset 336 add exch 800 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 256 add exch 800 add exch moveto 1 -1 scale () show 1 -1 scale % 140 80 () centeroffset 521 add exch 800 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 441 add exch 800 add exch moveto 1 -1 scale () show 1 -1 scale % 140 80 () centeroffset 706 add exch 800 add exch moveto 1 -1 scale () show 1 -1 scale 140 80 () centeroffset 626 add exch 800 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 811 add exch 800 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 6 labels 12 pts F1 % 12 pts F0 170 80 () centeroffset 121 add exch 990 add exch moveto 1 -1 scale () show 1 -1 scale 170 80 () centeroffset 41 add exch 990 add exch moveto 1 -1 scale () show 1 -1 scale % 170 160 () centeroffset 226 add exch 990 add exch moveto 1 -1 scale () show 1 -1 scale % 170 160 () centeroffset 411 add exch 990 add exch moveto 1 -1 scale () show 1 -1 scale % 170 160 () centeroffset 596 add exch 990 add exch moveto 1 -1 scale () show 1 -1 scale grestore % Begin Section 'LeftEdit' gsave 1230 1090 translate 20 rotate % Begin column 1 C000 % set color false 0 10 15 TALL % % Begin column 2 false 0 200 -175 NORM % false 0 200 10 TALL % % Begin column 3 false 0 390 -175 NORM % false 0 390 10 NORM % false 0 390 195 NORM % % Begin column 1 labels 12 pts F1 % 12 pts F0 140 350 () centeroffset 60 add exch 30 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 2 labels 12 pts F1 % 12 pts F0 140 160 () centeroffset -149 add exch 220 add exch moveto 1 -1 scale () show 1 -1 scale % 140 350 () centeroffset 55 add exch 220 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 3 labels 12 pts F1 % 12 pts F0 140 160 () centeroffset -149 add exch 410 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 36 add exch 410 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 221 add exch 410 add exch moveto 1 -1 scale () show 1 -1 scale grestore % Begin Section 'RightEdit' gsave 3020 1090 translate -20 rotate % Begin column 1 C000 % set color false 0 -570 -175 NORM % false 0 -570 10 NORM % false 0 -570 195 NORM % % Begin column 2 false 0 -380 -175 NORM % false 0 -380 10 TALL % % Begin column 3 false 0 -190 15 TALL % % Begin column 1 labels 12 pts F1 % 12 pts F0 140 160 () centeroffset -149 add exch -550 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 36 add exch -550 add exch moveto 1 -1 scale () show 1 -1 scale % 140 160 () centeroffset 221 add exch -550 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 2 labels 12 pts F1 % 12 pts F0 140 160 () centeroffset -149 add exch -360 add exch moveto 1 -1 scale () show 1 -1 scale % 140 350 () centeroffset 55 add exch -360 add exch moveto 1 -1 scale () show 1 -1 scale % Begin column 3 labels 12 pts F1 % 12 pts F0 140 175 () centeroffset 235 add exch -170 add exch moveto 1 -1 scale () show 1 -1 scale 140 175 () centeroffset 60 add exch -170 add exch moveto 1 -1 scale () show 1 -1 scale grestore grestore restore % Done with keyboard 1 0 devheight -1 mul translate % next keyboard restore %%EOF =EndInset ~   l12~s e0 (AL `/14Name x  " ow40eUP>ce `-exValue ~B # !-sc~B)~xcgd eh UTUT`3(<KB_AXSKOPTSMASK ca% # "(E12igfse23 UTUT`zd /{.AX_TwoKeys, .AX_LatchToLock } 40 ~ $ % %dex~TA<{RepeatKeys, SlowKeys, BounceKeys, URUT>;StickyKeys, MouseKeys, MouseKeysAccel, {%UPUT>)AccessXKeys, AccessXTimeout, 2UNUT>(Overlay2, IgnoreGroupLock } ~/( 2 1 3t~/(,oUT UTUT`CLaKB_CONTROLSMASK ie/( 3 2 4</((och, UTUT @, <{GroupsWrap, InternalMods, IgnoreLockMods, omURUT@/PerKeyRepeat, ControlsEnabled } or ook%UPUT@@UTKB_BOOLCTRLMASK te~X( 4 3 5 1~X(pp: UTUT`EUTKB_MAPPARTMASK KBX( 5 4 6 2X((pBl UTUT BUT:{KeyTypes, KeySyms, ModifierMap, URUTB,ExplicitComponents, KeyActions, eK%UPUT@BKe>KeyBehaviors, VirtualMods, VirtualModMap} ~ 6 5 7see~Beqer UTUT`GUTKB_CMDETAILMASK la 7 6 8q UTUT`D,+{SymInterp, GroupCompat } ROL~B 8 7 9~Bro UTUT`IKB_NAMEDETAILMASK B 9 8 :sBBrepe UTUT FabC{KeycodesName, GeometryName, SymbolsName, (URUTFAPhysSymbolsName, TypesName, CompatName, E%UPUTFSK(KeyTypeNames, KTLevelNames, 2UNUTF:IndicatorNames, KeyNames, KeyAliases, ?ULUT@Fym:VirtualModNames, GroupNames, RGNames} ~( : 9 ;T~(sirtlM UTUT`KalKB_AXNDETAILMASK ( ; : "((qs UTUT UTUT HMDC{AXN_SKPress, AXN_SKAccept, AXN_SKReject, URUTHqAXN_SKRelease, AXN_BKAccept, %UPUT@H #AXN_BKReject, AXN_AXKWarning } B~V\ < =~V\ tI UTUT`MLM KB_EVENTTYPE V\ = < >V\\pe tUT UTUT Jyc6{XkbNewKeyboardNotify, XkbMapNotify, URUTJF/XkbStateNotify, XkbControlsNotify, , %UPUTJ EXkbIndicatorStateNotify, m2UNUTJlN3XkbIndicatorMapNotify, XkbNamesNotify, ?ULUTJ/XkbCompatMapNotify, XkbBellNotify, ameLUJUTJme0XkbActionMessage, XkbAccessXNotify, YUHUT@JXkbExtensionDeviceNotify } irt~ > = ?~  u UTUT`O KB_ACTION  ? >N_Prep uA_S UTUT LUR[type: CARD8 URUT@LXNdata: LISTofCARD8 ] ~( @ O A}~( v UTUT`Q KB_MODDEF ( A @ BETY(( v< > UTUT N[mask: KEYMASK, URUTNmods: KEYMASK, boa%UPUT@NXkvmods: KB_VMODMASK ] J~( B A Cty~(J wIndat UTUT`S mKB_KTMAPENTRY ( C B Deot(( w/Xkom UTUT P[active: BOOL, ,URUTPJlevel: CARD8, %UPUT@PbAmods: KB_MODDEF ] ~/ D C Ei~/ x>  ? UTUT`UKB_KTSETMAPENTRY / E D FTN / x UTUT R[level: CARD8, uURUT@Rmods: KB_MODDEF ] ~K5 F E G ~K5 y UTUT`W KB_KEYTYPE K5 G F HK55  yE UTUT T[mods: KB_MODDEF, URUTTnumLevels: CARD8, %UPUTTNmap: LISTofKB_KTMAPENTRY, 2UNUT@TNpreserve: LISTofKB_MODDEF ] ~B H G It~B zwnd UTUT`YSKB_SETKEYTYPE B I H JeBB zwXk UTUT VP[ realMods: KEYMASK, URUTVJvmods: CARD16, %UP%UPUTVmonumLevels: CARD8, 2UNUTVmap: LISTofKB_KTSETMAPENTRY, ?ULUT@Vpreserve: LISTofKB_MODDEF ] ~B# J I K ~B { UTUT`[ KB_KEYSYMMAP RB% K JmoBB { UTUT X &[ ktIndex: LISTofCARD8, width: CARD8 URUTXW numGroups: 04, %UPUTX groupsWrap: KB_GROUPSWRAP, 2UNUTX  redirectGroup: 03, ?ULUT@Xdssyms: LISTofKEYSYM ] ~) L  M T~MA |2UNUT UTUT`]erKB_SYMINTERPMATCH + M L N  |zw UTUT ZY?{SI_NoneOf, SI_AnyOfOrNone, SI_AnyOf, eURUT@Z#SI_AllOf, SI_Exactly } P~\/ N M O Jvm~\UT }monu UTUT`_UN KB_SYMINTERP \1 O N@ V\\KB }  UTUT \#[sym: KEYSYM, URUT\mods; KEYMASK, %UPUT\[levelOneOnly: BOOL, 2UNUT\%match: KB_SYMINTERPMATCH, ?ULUT\virtualMod: CARD8, LUJUT\exautoRepeat: BOOL, CAYUHUT@\XlockingKey: BOOL ] , ~l5 P QRA~l ~ectou `aKey Type Name 27 Q P R M2~MA `^UTStandard Definition YM~l/; R Q SN~l/ UTUT`cUT ONE_LEVEL 2/= S R T 2//UR@Z UTUT `DDescribes keys that have exactly one symbol per group. Most special URUT`UTJor function keys (such as Return) are ONE_LEVEL keys. Any !UPUT`Scombination of modifiers yields level 0. Index 0 in any key symbol UR,UNUT@`m*map specifies key type ONE_LEVEL. ~l/A T S UhKB~l/UL\ UTUT`eD8 TWO_LEVEL 2/C U T VT2// B~ UTUT b ?Describes non-keypad and non-alphabetic keys that have exactly URUTbTyItwo symbols per group. By default, the TWO_LEVEL type yields col!UPUTbMA[umn 1 if the Shift modifier is set, column 0 otherwise. Index 1 in ~,UNUT@b9any key symbol map specifies key type TWO_LEVEL. ~ l/G V U W~ l/ZUT UTUT`gs ALPHABETIC e e 2/I W V XUR 2//uns (ch UTUT d) CDescribes alphabetic keys that have exactly two symbols per group. modURUTdl IThe default definition of the ALPHABETIC type provides shift-canp!UPUT dUcels-caps behavior as described in section 7.2.1. Index 2 in any key L,UNUT@dUT6symbol map specifies key type ALPHABETIC.O ~<l:P X W YB~<l:?Deri UTUT`i nKEYPAD eti<2:R Y XbTy<2::p.lt,he UTUT f tADescribes numeric keypad keys with two symbols per group. Yields dURUTfmnTcolumn 1 if either of the Shift modifier or the real modifier bound pe!UPUTfRto the virtual modifier named NumLock are set. Yields column 0 if ,UNUTfIneither or both modifiers are set. Index 3 in any key symbol map 7ULUT@f#specifies key type KEYPAD. ~iV Z ["vex~igr#URUT `ldeBit in the Partial Mask 2i6X [ Z \"PUT2i6s #as sc `hon Type hiZ \ [ ]"dhifi#pe  `j Corresponding Field(s) X ~w_ ] \ ^"~w#KEAD UTUT`oXkbKeyTypesMask 2w6a ^ ] _"t,2w6 t#es me UTUT`kth key types hwc _ ^ `"omnhwf #hif UTUT`mSrefirstType, SnTypes ~h ` _ a" ~ie#n 0 UTUT`rXkbKeySymsMask or26j a ` b" y 26UT#sp UTUT`n keycodes .hl b a c"vh#UR UTUT`pSlfirstKeySym, SnKeySyms ~q c b d"PUT~s #as sc UTUT`uonXkbKeyActionsMask 26s d c e"26e # UTUT`qnd keycodes )hu e d f"h#KE UTUT`sSo$firstKeyAction, SnKeyActions ~z f e g"~me#k UTUT`xXkbKeyBehaviorsMask 26| g f h" 26#fitT UTUT`ts keycodes h~ h g i"h #UT UTUT`vSms(firstKeyBehavior, SnKeyBehaviors ~ i h j"~#s . UTUT`{lXkbExplicitComponentsMask 26 j i k"T26#eySs UTUT`w keycodes dh k j l"hu#Keyti UTUT`yS'firstKeyExplicit, SnKeyExplicit ~ l k m"q~#u UTUT`~XkbModifierMapMask 26 m l n"itK26Ac#~ UTUT`z keycodes h n m o"khXk#ioras UTUT`|S$firstModMapKey, SnModMapKeys ~ o n p"t~#~ UTUT`XkbVirtualModMapMask 26 p o q"itK26ey#  UTUT`} keycodes h q p r" .hl#iciom UTUT`S&firstVModMapKey, SnVModMapKeys ~ r q s"TUT~ d# UTUT`XkbVirtualModsMask 26 s r t"y26, #xplit UTUT virtual URUT@q modifiers h t s"~h#6 UTUT`S virtualMods ~ u v8T~9 ` Component  v u w8Tey9nMMa `Size ~ w v x8~UT9` `MaType ~! x w y8K~!9UT UTUT`.keXkbKeycodesName ! y x z8!om9 UTUT`Ke1 !~ z y {8 !~9 UTUT`ATOM ~0 { z |8~09 UTUT`., XkbGeometryName UT0 | { }8qmo09t  UTUT`1 0~ } | ~80~9 UTUT`ATOM ~? ~ } 8~?t 9 UTUT`.XkbSymbolsName ?  ~ 8?9w  x UTUT`1 ?~  8?~9 UTUT`ATOM ~N 8~Nam9! UTUT`. zXkbPhysSymbolsName N 8KeN9y { UTUT`1 N~ 8N~9{  | UTUT`ATOM ~] 8, ~]UT9 UTUT`. XkbTypesName ] 8T]9 UTUT`1 ]~ 8T]~9 UTUT`ATOM ~l 8T~lls9 UTUT`. XkbCompatName l 8xUTl9 UTUT`1 l~ 8UTl~M 9 UTUT`ATOM ~{ 8UT~{9olsme UTUT`.XkbKeyTypeNames { 8UT{9 UTUT`UnTypes {~ 8T{~9 UTUT` LISTofATOM ~ 8~9 UTUT`.TXkbKTLevelNames  8 9T UTUT U nTypesT, URUT@U nKTLevels ~ 8T~ls9 UTUT  {count: LISTofCARD8, URUT@ names: LISTofATOM } ~ 8~9  UTUT`.XkbIndicatorNames  89~ UTUT`"One per bit set in Uindicators ~ 8~UT9 UTUT` LISTofATOM ~ 8 ~9 UTUT`.XkbVirtualModNames TO 89 UTUT`#One per bit set in UvirtualMods ~ 8~9 UTUT UTUT`es LISTofATOM UT~ 8~9~ UTUT`.XkbGroupNames   8  9 UTUT`"One per bit set in UgroupNames ~ 8nd~9 UTUT` LISTofATOM ~Z :~Zin;cats UTUT`. XkbKeyNames Z :Z;ATO UTUT`UnKeys Z~ :Z~;Xk UTUT`LISTofKB_KEYNAME ~h :~h; UTUT`.seXkbKeyAliases h :h;9 UTUT`U nKeyAliases Toh~ :h~;9 UTUT`LISTofKB_KEYALIAS pNa~w% :~w;9 UTUT`. XkbRGNames pew' :w; UTUT`U nRadioGroups Tw~) :w~;Z UTUT` LISTofATOM UT~Q~. ~Q~QZ `Action UTQ 0 Q Q~ `XkEffect UT~_~4 ~_~Q~ UTUT`SA_NoAction T_ 6 _ Qh UTUT ?No direct effect, though SA_NoAction events may change  URUT@0the effect of other server actions (see below). UT~x~P: ~x~P/Q UTUT  SA_SetMods URUTmods: MOD_DEF w!UPUT useModMap: BOOL ,UNUT@clearLocks: BOOL x P< x PPQ UTUT ;Key press adds any action modifiers to the keyboards base ~URUT@ modifiersS. !UPUT Q?Key release clears any action modifiers in the keyboards base 0,UNUT=modifiers, provided that no other key which affects the same k7ULUT@modifiers is logically down. BUJUT :If no keys were operated simultaneously with this key and MUHUT@S=clearLocks is set, release unlocks any action modifiers. Q~~qB  fe~~q:tiQentma UTUT UT SA_LatchMods hURUTsemods: MOD_DEF ow)!UPUTuseModMap: BOOL ,UNUTclearLocks: BOOL 7ULUT@UTlatchToLock: BOOL ods qD F qquQ BO UTUT 9Key press and release events have the same effect as for URUT=SA_SetMods; if no keys were operated simultaneously with s!UPUTerAthe latching modifier key, key release events have the following ,UNUT@additional effects: rs7ULUT erGModifiers that were unlocked due to SclearLocks have no further t nBUJUT@afeffect. saMUHUT HIf SlatchToLock is set, key release locks and then unlatches any opXUFUT@sl6remaining action modifiers that are already latched. cUDUT nl@Finally, key release latches any action modifiers that were not nUBUT@=used by the SclearLocks or SlatchToLock flags. h~;~[K )UP~;~[:MoQL UN UTUT c SA_LockMods L URUTUTmods: MOD_DEF OOL!UPUTuseModMap: BOOL ,UNUTnoLock: BOOL 7ULUT@UTnoUnlock: BOOL Ke; [M ft ; [[QSetds UTUT er=Key press sets the base and possibly the locked state of any iURUTeyLaction modifiers. If SnoLock is True, only the base state is rs!UPUT@er changed. ,UNUT  d?For key release events, clears any action modifiers in the keyef7ULUT9boards base modifiers, provided that no other key which aBUJUTanMaffects the same modifiers is down. If SnoUnlock is False and MUHUTnl>any of the action modifiers were locked before the correspondXUFUT@2ing key press occurred, key release unlocks them. ~V~|R  ~V~|/Q:Mo UTUT UT SA_SetGroup cURUTURgroup: INT8 m!UPUTUPgroupAbsolute: BOOL o,UNUT@UTclearLocks: BOOL V |T OKeV ||MQ UTUT FIf SgroupAbsolute is set, key press events change the base keyURUT lLboard group to Sgroup; otherwise, they add Sgroup to the base is!UPUTy Akeyboard group. In either case, the resulting effective keyboard ,UNUTas?group is brought back into range depending on the value of the 7ULUT@ m*GroupsWrap control for the keyboard. BUJUT anEIf an SA_ISOLock key is pressed while this key is held down, MUHUTCkey release has no effect, otherwise it cancels the effects of the ndXUFUT@press. prcUDUT re:If no keys were operated simultaneously with this key and nUBUTSAclearLocks is set, key release also sets the locked keyboard RyU@UT@group to Group1. ~~Z ~~:L Q  UTUT SA_LatchGroup URUTMgroup: INT8 T!UPUTIfgroupAbsolute: BOOL i,UNUTveclearLocks: BOOL 7ULUT@latchToLock: BOOL S \ to QAke oa UTUT r 8Key press and release events have the same effect as an asURUT b9SA_SetGroup action; if no keys were operated simulta!UPUTapDneously with the latching group key and the SclearLocks flag Lo,UNUTseAwas not set or had no effect, key release has the following addia7ULUT@witional effects: efBUJUT UF@If SlatchToLock is set and the latched keyboard group is opMUHUTsl>nonzero, the key release adds the delta applied by the correXUFUTse>sponding key press to the locked keyboard group and subtracts cUDUT=it from the latched keyboard group. The locked and effective QnUBUTUTUT ?Otherwise, key release adds the key press delta to the latched U<UT@keyboard group. ke~e~Eb ee ~e~E$ffQ asUR UTUT SA SA_LockGroup cURUTer group: INT8 l!UPUT@groupAbsolute: BOOL le Ed lae EEseQ seor UTUT y DIf SgroupAbsolute is set, key press sets the locked keyboard efURUTUFNgroup to Ugroup. Otherwise, key press adds Sgroup to the locked !UPUT, ?keyboard group. In either case, the resulting locked and effec,UNUT p@tive group is brought back into range depending on the value of 7ULUT@he1the GroupsWrap control for the keyboard. TBUJUT`oaKey release has no effect. o r~~i va~~:GrQon UTUT ar SA_MovePtr URUTe,x, y: INT16 h!UPUTtonoAccel: BOOL U<,UNUTkeabsoluteX: BOOL 7ULUT@babsoluteY: BOOL e k RUT ocQURUT UTUT up?If MouseKeys are not enabled, this action behaves like EURUT;SA_NoAction, otherwise this action cancels any pending !UPUT@repeat key timers for this key and has the following additional UT,UNUT@p effects. p7ULUT ey>Key press generates a core pointer MotionNotify event BUJUTit]instead of the usual KeyPress. If SabsoluteX is True, Sx specitMUHUTonGfies the new pointer X coordinate, otherwise Sx is added to the theXUFUTUTNcurrent pointer X coordinate; SabsoluteY and Uy specify the new cUDUT@Y coordinate in the same way. nUBUT arMIf SnoAccel is False, and the MouseKeysAccel keyboard nyU@UTUNBcontrol is enabled, key press also initiates the mouse keys timer U>UT>for this key; every time this timer expires, the cursor moves U<UTUT9again. The distance the cursor moves in these subsequent tU:UT7events is determined by the mouse keys acceleration as ionU8UTLng"described in section 4.6. U6UT eyBKey release disables the mouse keys timer (if it was initiated by U4UTeyUTorSthan 0, key press generates Scount pairs of ButtonPress and U<UT@ButtonRelease events. U:UT QIf Scount is 0, key release generates a core pointer ButtonReTU8UToA>lease which matches the event generated by the correspondU6UTatBing key press; if count is non-zero, key release does not cause a U4UT g8ButtonRelease event. Key release never causes a key bU2UT@morelease event. io~~| n ~~|:UHQKe UTUT d SA_LockPtrBtn URUTanbutton: BUTTON !UPUTndnoLock: BOOL ,UNUTeynoUnlock: BOOL or7ULUT@ buseDfltBtn: BOOL  | rs. ||Qey es UTUT ?If MouseKeys are not enabled, this action behaves like URUT@UTSA_NoAction. !UPUT s OOtherwise, if the button specified by SuseDfltBtn and Sbutton is Bu,UNUTenDnot locked, key press causes a ButtonPress instead of a key en7ULUTteBpress and locks the button. If the button is already locked or if BUJUT@SheDnoLock is True, key press is ignored and has no effect. kMUHUT t GIf the corresponding key press was ignored, and if SnoUnlock is cauXUFUTUT?False, key release generates a ButtonRelease event cUDUTAinstead of a key release event and unlocks the specified button. nUBUTan?If the corresponding key press locked a button, key release is UTyU@UT@nlignored and has no effect.  b~~|  ~~|/Q| UTUT esSA_SetPtrDflt URUTKeaffect: CARD8 d, !UPUTs value: CARD8 ,UNUT@iodfltBtnAbs: BOOL  | dy  || Q is UTUT ?If MouseKeys are not enabled, this action behaves like of URUT@SA_NoAction. !UPUT If?Otherwise, both key press and key release are ignored, but key ,UNUTkeQpress changes the pointer value specified by Saffect to Svalue, as k7ULUT@ed follows: SBUJUT auXIf Swhich is SA_AffectDfltBtn, Svalue and SdfltBtnAbs specUDMUHUT;ify the default pointer button used by the various pointer . XUFUTanJactions as follow: If SdfltBtnAbs is True, value specifies the butcUDUTreDton to be used, otherwise, Svalue specifies the amount to be nUBUTDadded to the current default button. In either case, illegal button yU@UT@ C%choices are wrapped back into range. e~V~ BL ~V~Q UTUT  SA_ISOLock QURUTUT dfltIsGroup: False a!UPUTismods: MOD_DEF UT,UNUToAuseModMap: BOOL f7ULUTkenoLock: BOOL BUJUTnoUnlock: BOOL anMUHUTlu noAffectMods: BOOL SXUFUTULnoAffectGrp: BOOL UTcUDUTSnoAffectPtr: BOOL nnUBUTan!noAffectCtrls: BOOL TyU@UTthor aulU>UTsedfltIsGroup: True UTU<UTongroup: INT8 AU:UTlu!groupAbsolute: BOOL U8UTed noAffectMods: BOOL esU6UT noAffectGrp: BOOL e cU4UTtonoAffectPtr: BOOL U2UT@ C!noAffectCtrls: BOOL gV  BV Q UTUT PIf SdfltIsGroup is True, key press sets the base group specified UTURUTmJby SgroupAbsolute and Sgroup. Otherwise, key press sets the !UPUT@ke4action modifiers in the keyboards base modifiers. n,UNUT OO@Key release clears the base modifiers or group that were set by UT7ULUTn@the key press; it may have additional effects if no other approBUJUTUB@priate actions occur simultaneously with the SA_ISOLock MUHUT@UT operation. XUFUT : DIf SnoAffectMods is False, any SA_SetMods or cUDUTupUT>SA_LatchGroup actions that occur simultaneously with this U<UT@UT@6wise neither key press nor release generate an event. ~~: RUT~~:(itQal  r UTUT`chSA_SetControls ve URUT accontrols: d b%UPUT@KB_BOOLCTRLMASK f  : T ::s Q ofhe UTUT wi=Key press enables any boolean controls that are specified in eURUTUewCcontrols and not already enabled at the time of the key press. ,!UPUTto?Key release disables any controls that were enabled by the corise,UNUTtoacQnUBUT UTUT`ofSA_LockControls dURUT recontrols: If%UPUTKB_BOOLCTRLMASK s 0UNUT noLock: BOOL ;ULUT@U>noUnlock: BOOL wi3 E nve3 EEQ  UTUT MIf SnoLock is False, key press locks and enables any controls TURUTcJthat are specified in Ucontrols and not already locked at the time !UPUT@Tof the key press. :,UNUT heKIf SnoUnlock is False, key release unlocks and disables any ed 7ULUTHcontrols that are specified in Ucontrols and were not enabled at ,BUJUT@to*the time of the corresponding key press. ~V~f ore~V~f:isQan us UTUT  sSA_ActionMessage: URUTUTpressMsg: BOOL !UPUTreleaseMsg: BOOL ,UNUTgenEvent: BOOL 7ULUT@onmessage: STRING V f V ffUNQ UTUT ULJif SpressMsg is True, key press generates an XkbActionURUT@Message event which reports the keycode, event type and the  !UPUT@kecontents of Smessage. o,UNUT NIf SreleaseMsg is True, key release generates an XkbAction7ULUTUT:keyboard modifiers at the time of the release, changed as U<UT@pedescribed above. TU:UT ey@The SA_RedirectKey action normally redirects to another UPU8UTev=key on the same device as the key or button which caused the vU6UTthAevent, unless that device does not belong to the input extension cU4UT;KEYCLASS, in which case this action causes an event on the rs U2UT@UJcore keyboard device. ~~ a e~~/UTQUTcl UTUT n SA_DeviceBtn nURUTdscount: CARD8 !UPUTbutton: BUTTON m,UNUT@s device: CARD8 ng   mif  dQ hapr UTUT FThe Sdevice field specifies the ID of an extension device; the URUTS Hbutton field specifies the index of a button on that device. If the !UPUTAbutton specified by this action is logically down, the key press T,UNUTriAand corresponding release are ignored and have no effect. If the 7ULUT tCdevice or button specified by this action are illegal, this action r bBUJUT@ t"behaves like SA_NoAction. MUHUT es?Otherwise, key press causes one or more input extension device S, XUFUT aSbutton events instead of the usual key press event. If Scount is 0, ~cUDUT Akey press generates a single DeviceButtonPress event; if nUBUTSeBPcount is greater than 0, key press generates Scount pairs of UNyU@UTd6DeviceButtonPress and DeviceButtonRelease U>UT@events. dU<UT UTQIf Scount is 0, key release generates an input extension Devi U:UT9ceButtonRelease which matches the event generated by hU8UT ?the corresponding key press; if count is non-zero, key release y dU6UT T8does not cause a DeviceButtonRelease event. Key d U4UT@. *release never causes a key release event. ~V~ iac~V~:Qaveli UTUT SA_LockDeviceBtn URUTeybutton: BUTTON or!UPUTiodevice: CARD8 UT,UNUTonnoLock: BOOL 7ULUT@renoUnlock: BOOL ouV  keV ngQvicut UTUT ; FThe Sdevice field specifies the ID of an extension device; the URUTSntHbutton field specifies the index of a button on that device. If the Bu!UPUTU>Bdevice or button specified by this action are illegal, it behaves ,UNUT@ellike SA_NoAction. 7ULUT U:JOtherwise, if the specified button is not locked and if SnoLock is BUJUT =False, key press causes an input extension DeviceButeMUHUT>tonPress event instead of a key press event and locks the XUFUT. Nbutton. If the button is already locked or if SnoLock is True, cUDUT@(key press is ignored and has no effect. nUBUT evGIf the corresponding key press was ignored, and if SnoUnlock is vicyU@UTUT?False, key release generates an input extension Device ouU>UTUT  0\If SvalXnSWhat is SA_SetValMax, SvalXn is set to its maximum UTU<UT@ Th legal value. U:UT"( heBif SvalXnSWhat is SA_SetValRelative,  is U8UT@ ciadded to SvalXn. f U6UT  ilMif SvalnWhat is SA_SetValAbsolute, SvalXn is set to iU4UT"H to. U2UT 0Illegal values for SA_SetValRelative or UTU0UT@V.SA_SetValAbsolute are clamped into range. ~l ~lqfieva ` s Modifier 2 NUF2SqSha `tVTransformation l~lE  ~lEUBq  t UTUT`SControl is2E ice2EEq(m-m UTUT DReport the control character associated with the symbol. This extenURUTitDsion defines the control characters associated with the ASCII alphaif!UPUThaDbetic characters (both upper and lower case) and for a small set of d ,UNUT .Jpunctuation characters (see Appendix A). Applications are free to 7ULUTs Eassociate control characters with any symbols that are not specified sBUJUT@Reby this extension. UT~4l$ md ~4l$q UTUT`Lock 42$ g42$$q UTUT NECapitalize the symbol either according to capitalization rules approfURUTCpriate to the application locale or using the capitalization rules !UPUTL8defined by this extension (see Appendix A).O ~# Dm-m~#ReEconol `teFlag V# DtsiV# cE asci `I Described in ~1 Da l~1maE d UN UTUT`.puXkbPCF_DetectableAutorepeat ApV1 DLUTV1e Eharte UTUTls Section4.1.2 on page8 ~@ D~@E~ UTUT`.qXkbPCF_GrabsUseXKBStateMask V@ DV@Eq UTUTl"Section12.1.1 on page39 ~O DfUR~OteEpplat UTUT`.g XkbPCF_AutoResetControlsMask PVO D eeVOOE# UTUTl Section4.12 on page12 ~^! Dl ~^ED UTUT`.XkbPCF_LookupStateWhenGrabbed V^# yDV^E~ UTUTl Section12.3 on page43 Xk~0G* ~0GL)1 UTUT`"Feedback Name 0j, 0j)D UTUT` Bell Name /0G. Fra/0G) UTUT`Default Sound v0>0 v0>.1)39 UTUT`  Indicates ~?G 6 ~?G )PCFut UTUT`& P FeatureFB ?j 8 ?j )UT UTUT`!io AX_FeatureOn 1/?G : /?G )E UTUT`# rising tone CFv?> < #v?> ) UTUT`$Keyboard control enabled ~LG B ~LG )~ UTUT`*) Lj D  Lj  ) UTUT`%AX_FeatureOff /LG F /LG  )Fra UTUT`' falling tone vL> H vL>  ) UTUT`(Keyboard control disabled ~YG N 6~YG )G UTUT`.CF tYj P Yj ) UTUT`))AX_FeatureChange T/YG R /YG )? UTUT`+ two tones vY> T vY> )v UTUT`,)Several controls changed state Ke~fG Z B~fG )G UTUT`2 IndicatorFB fj \ fj ) ) UTUT`-UTAX_IndicatorOn Fea/fG ^ /fG )) UTUT`/high tone vf> ` gvf> )) UTUT`0Indicator Lit ~sG f N ~sG )  UTUT`6 Tsj h P sj )  UTUT`1AX_IndicatorOff )/sG j R /sG )  UTUT`3 low tone +vs> l  vs> )  UTUT`4UTIndicator Extinguished co~G r Z~G B)G UTUT`: j t j ) UTUT`5AX_IndicatorChange UT/G v /G )/ UTUT`7)two high tones `/v> x ` v> )  UTUT`8!Several indicators changed state ~G ~ N ~G )  UTUT`> SlowWarnFB jj  j )UT UTUT`9atAX_SlowKeysWarning /G  /G )3 UTUT`; +three high tones v>  )v> )Inca UTUT`<co Shift key held for four seconds ~G  ~G ) UTUT`B SKPressFB j  UTj nd)ngeUT UTUT`=AX_SlowKeyPress /G  /G tw)h t UTUT`?>single tone v>  v> ) inca UTUT`@ ,Key press while SlowKeys are on ~G  TUT~G FB) UTUT`F SKReleaseFB j  TUTj ey)  UTUT`AAX_SlowKeyRelease /G  3UT/G e )ton UTUT`Csingle tone v>  Inv> co)ey ld UTUT`D2Key release while SlowKeys are on ~G  T~G )  UTUT`J SKAcceptFB j  =j )G UTUT`EAX_SlowKeyAccept /G   ?/G  )> UTUT`G single tone v>   TUTv> s ) Sl UTUT`H #Key event accepted by SlowKeys ~G    ~G SK)  UTUT`N SKRejectFB j    j AX)elee UTUT`IAX_SlowKeyReject /G    on/G si)on UTUT`K low tone v>   )v> D)re UTUT`L#Key event rejected by SlowKeys ~VG ~VG UT)`J UTUT`R StickyKeysFB Vj Vj UT)`E UTUT`M AX_StickyLatch /VG /VGUT)`G UTUT Olow tone then URUT@OUThigh tone vV> KevV> ) UTUT`P#Modifier latched by StickyKeys ~pG  SK~pG ) UTUT`V pj  Tpj je) UTUT`Q AX_StickyLock /pG  TUT/pG  )> UTUT`Shigh tone vp>  Tvp> je)ow UTUT`T"Modifier locked by StickyKeys ~}G  TUT~}G ys)V UTUT`Z }j  E}j  )kyLch UTUT`UAX_StickyUnlock /}G  G/}G )o UTUT`W low tone tv}>  v}> )) UTUT`X$Modifier unlocked by StickyKeys ky~G  ~G )) UTUT`^ BKRejectFB j  j ))UT UTUT`YAXAX_BounceKeysReject /G  /G >)UT UTUT`[ low tone v>  v> ) UTUT UTUT`\fi%Key event rejected by BounceKeys d$ RR UTHH$  HHk))kyLRf)di)+Tracking Messages Generated by Key Actions G#UT UTd oXkbActionMessage 3URUT$ ptime: TIMESTAMP @UPUT pdeviceID: CARD8 MUNUT pkeycode: KEYCODE )ZULUT pX press: BOOL ugUJUT pckmods: KEYMASK tUHUT p group: KB_GROUP UFUT pkeyEventFollows: BOOL UDUTD pBKmessage: LISTofCARD8 UBUTd q $ rUAn XkbActionMessage event is generated when the user operates a key to which  rTan SA_ActionMessage message is bound under the appropriate state and group.  rXThe server sends an XkbActionMessage event to a client if the appropriate event KeD ry 9details field for the client has the value True. $ s_The ldeviceID field specifies the keyboard device that contains the key which activated  syL^the event. The lkeycode field specifies the key whose operation caused the message and  sXkcpress is True if the message was caused by the user pressing the key. The lmods and UT slod]group fields report the effective keyboard modifiers and group in effect at the time the  D sB_key was pressed or released. e5$ tL gIf lkeyEventFollows is True, the server will also send a key press or release event, as nMeB t gaappropriate, for the key that generated the message. If it is False, the key causes only eO terXa message. Note that the key event is delivered normally with respect to passive grabs, nM\ to ]keyboard focus, and cursor position, so that lkeyEventFollows does not guarantee that vi t Yany particular client which receives the XkbActionMessage notify event will also svD tiv&receive a key press or release event. $ umThe lmessage field is NULL-terminated string of up to ActionMessageLength (6) t use]bytes, which reports the contents of the lmessage field in the action that caused the rD ue message notify event. dj)th+Tracking Changes to AccessX State and Keys sseU@ UTd vXkbAccessXNotify fU>UT$ wwstime: TIMESTAMP U<UT waldeviceID: CARD8 s U:UT wasdetail: KB_AXNDETAILMASK pU8UT w kkeycode: KEYCODE hU6UT ws slowKeysDelay: CARD16 +U4UTD wdebounceDelay: CARD16 8U2UTd x e tM$ yalRAn XkbAccessXNotify event reports on some kinds of keyboard activity when Z y `any of the SlowKeys, BounceKeys or AccessXKeys controls are active. ComregD yAcFpatibility map notify events can only be caused by keyboard activity. ~Q% !!u~QNL UTUT`minKB_LEDCLASSSPEC ioQ%!  $ uQorntes UTUT r6{.KbdFeedbackClass, .LedFeedbackClass, URUT@r.fy8DfltXIClass, .AllXIClasses, .XINone } St~\%" #csX~\ we: ME UTUT`p LISTofITEMs ce\%# " BXN\\keod UTUT qUT7The type LISTofITEMs is special. It is similar to the deURUTq6 2LISTofVALUE defined by the core protocol, but the %UPUTq6elements of a LISTofITEMs are not necessarily all the 2UNUTq 2same size. The use of a BITMASK to indicate which ?ULUTq:members are present is optional for a LISTofITEMs it is LUJUTq c;possible for the set of elements to be derived from one or %YUHUT@qumore fields of the request. ~m%$ !%SPE~m $ UTUT`sKB_BELLCLASSSPEC m%% $ $Fdbmees, UTUT 0fy7{.KbdFeedbackClass, .BellFeedbackClass, StURUT@0.(DfltXIClass, .AllXIClasses } d%& LISS %HH%' & HHUT##ype LISTSgci#$ zdeaThe ldeviceID and lkeycode fields specify the keyboard and key for which the event n zs _occurred. The ldetail field describes the event that occurred and has one of the followch "BL zing values: en$ {a SEach subclass of the AccessX notify event is generated only when the control specived {UHWfied in the table above is enabled. The server sends an XkbAccessXNotify event S {eto a client only if the bit which corresponds to the value of the ldetail field for the event D {=is set in the appropriate event details mask for the client. b$ |BemRegardless of the value of ldetail, the lslowKeysDelay and ldebounceDelay fields always  |\reports the current slow keys acceptance delay (see section 4.2) and debounce delay L |6(see section 4.3) for the specified keyboard. (dk)&Tracking Changes To Extension Devices DUF UTd }oaXkbExtensionDeviceNotify eTUDUT$ ~ ztime: TIMESTAMP e aUBUT ~lddeviceID: CARD16 tnU@UT ~ h1ledClass: { KbdFeedbackClass, LedFeedbackClass } a{U>UT ~ledID: CARD16 U<UT ~ Areason: KB_XIDETAILMASK erU:UT ~ csupported: KB_XIFEATUREMASK {U8UT ~taunsupported: KB_XIFEATUREMASK U6UT ~ccledsDefined: KB_INDICATORMASK U4UT ~ cledState: KB_INDICATORMASK orrU2UTD ~uefirstButton, nButtons: CARD8 rU0UTd  d n 3An XkbExtensionDeviceNotify event reports: U.UTd ReFA change to some part of the XKB information for an extension device. U,UT$ VAn attempt to use an XKB extension device feature that is not supported for the speciU*UTD +fied device by the current implementation. 6(s$$ _The ldeviceID field specifies the X Input Extension device identifier of some device on UT1 xtYwhich an XKB feature was requested, or XkbUseCorePtr if the request affected the > Vcore pointer device. The lreason field explains why the event was generated in K [ EXPCI UTUT`.CARD32, each bit corresponds to an indicator ~&< 9=UT~e1 Exic UTUT`%KB_IMGROUPSWHICH x&= <UTEx erpt UTUT utA{.IM_UseNone, .IM_UseBase, .IM_UseLatched, lURUT@.UT,IM_UseLocked, .IM_UseEffective } UT~j&> ;?TUT~jSW  UTUT` KB_IMFLAGS Tj&? >8sUTj. e, UTUT , 1{.IM_NoExplicit, .IM_NoAutomatic, eURUT@._UIM_LEDDrivesKB } P~B&@ OA ~B; CD1 UTUT` KB_PCFMASK ualB&A @B 7BB   UTUT ${.PCF_DetectableAutorepeat, URUT.h PCF_GrabsUseXkbState, %UPUT.PCF_AutoResetControls, UT2UNUT. PCF_LookupStateWhenGrabbed, ?ULUT@.HI PCF_SendEventUsesXKBState } ~a&B AC ~a ._U UTUT`_UKB_LCFLAGSMASK M_Ua&C BD eckact  UT UTUT`&>{.LC_Hidden, .LC_Default, .LC_Partial } ~p(&D CE ~p( UT UTUT`.KB_LCSYMFLAGSMASK p(&E D- Ip((UR @_U UTUT 8{.LC_AlphanumericKeys, .LC_ModifierKeys, URUT.,LC_KeypadKeys, .LC_FunctionKeys, al%UPUT@.LC_AlternateGroup } ~k'F ~G TUT~kF_ eAure UTUT`UTKB_XIDEVFEATUREMASK sUk'G FH uRekUN  UTUT he7{.XI_ButtonActions, .XI_IndicatorNames, BStURUT@.2XI_IndicatorMaps, .XI_IndicatorState } ~' H GI _U~  UTUT`KB_XIFEATUREMASK ' I HJ &  aul UTUT`({ KB_XIDEVFEATURES or .XI_Keyboards ~'J IK T~KB GSMK UTUT`KB_XIDETAILMASK 'K J _U{ phame UTUT`C_8{ KB_XIFEATURES or .XI_UnsupportedFeature .} ,d'/L TT &HH'0M L THH`UTThUR bdevice. The lfirstButton and lnButtons fields report a range of device buttons that D ;include all of the buttons for which actions were changed. rMa*$ icTIf any combination of XkbXI_IndicatorNames, XkbXI_IndicatorMaps, or 7 2UTnXkbXI_IndicatorState is set in either lreason or lunsupported, the /ledlClass and D /UT]ledlID fields specify the X Input Extension feedback class and identifier of the feedQ Yback for which the change is reported. If this event reports any changes to an indicator ^ afeedback, the /ledsDefined field reports all indicators on that feedback for which either ok .`a name or a indicator map are defined, and /ledState reports the current state of all of xD +the indicators on the specified feedback. $ UTaIf XkbXI_IndicatorNames is set in lreason, this event reports a successful change f geRto the symbolic names bound to one or more extension device indicators by XKB. If  2d.\XkbXI_IndicatorMaps is set in /reason, this event reports a successful change to to Othe indicator maps bound to one or more extension device indicators by XKB. If un 2 TXkbXI_IndicatorState is set in reason, this event reports that one or more indi ED cl@cators in the specified device and feedback have changed state. ch$ orVIf XkbXI_UnsupportedFeature is set in reason, this event reports an unsuccess dRful attempt to use some XKB extension device feature that is not supported by the  inXXKB implementation in the server for the specified device. The lunsupported mask   in_reports the requested features that are not available on the specified device. See section set , U15.0 for more information about possible XKB interactions with the X Input Extenn$D xtsion. 9$ y RThe server sends an XkbExtensionDeviceNotify event to a client only if at F ucgleast one of the bits that is set in the lreason field of the event is also set in the appropritorSD (ate event details mask for the client. ih$ hiXEvents that report a successful change to some extension device feature are reported to ceu  c\all clients that have expressed interest in the event; events that report an attempt to use is unXan unsupported feature are reported only to the client which issued the request. Events n e [which report a partial success are reported to all interested clients, but only the client ppoD Xthat issued the request is informed of the attempt to use unsupported featuresx. ev~'pN ?O 15~at  poib UTUT`s KB_BEHAVIOR ut'rO N @en Xkxt UTUT`[type: CARD8, data: CARD 8 ] ~'P 8Q at~so ld  t UTUT`et KB_KEYALIAS ri'Q P9 sk $ hi UTUT`rt([real: LISTofCHAR, alias: LISTofCHAR ] icHH)wR  cHHl Sts HH)xS & HHl RT''whiHH)yT L HHl SMMresH I K)zU V H I Kl jjto HH){V Ul HHl kk H$1&)|W lX OutH$1&l mmH I K)}X WY [H I Kl nn HH)~Y Xp d HHl oo'H$1&)Z p H$1&l qqas:HH)[ s HHl rr H I K)\ su H I Kl tt l )] l l  l u)^ Vl ul  l )_ ll l  l )` Xl l  HH)a YHHl b HH)b pHHl ac HH)c HHl bd HH)d sHHl ce HH)e uHHl df HH)f HHl eg HH)g HHl fh HH)h HHl gi HH)i HHl hj HH)j HHl ik HH)k HHl jl HH)l HHl km HH)m HHl ln HH)n HHl mo HH)o HHl np HH)p HHl oq HH)q HHl pr HH)r HHl qs HH)s HHl rt HH)t HHl su HH)u HHl tv HH)v HHl uw HH)w HHl vx HH)x HHl wy HH)y HHl xz HH)z HHl y{ HH){ HHl z| HH)| HHl {} HH)} HHl |~ HH)~ HHl } HH) HHl ~ HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl    HH)  HHl   HH)  HHl    HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH) HHl  HH)  HHl !! HH) "HHl ## HH) $HHl %% HH) &HHl '' HH) (HHl )) HH) *HHl ++ HH) ,HHl -- HH) .HHl // HH) 0HHl 11 HH) 2HHl 33 HH) 4HHl 55 HH) 6HHl 77 HH) 8HHl 99 HH) :HHl ;; HH) <HHl == HH) >HHl ?? HH) @HHl AA HH) BHHl CC HH) DHHl EE HH) FHHl GG HH) HHHl II HH) JHHl KK HH) LHHl MM HH) NHHl OO HH) PHHl QQ HH) RHHl SS HH) THHl UU HH) VHHl WW HH) XHHl YY HH) ZHHl [[ HH) \HHl ]] HH) ^HHl __ HH) `HHl aa HH) bHHl cc HH) dHHl ee HH) fHHl Rgg ~v. /~v  `q Event Type )v/ .0)v  `mYLegal Details vZ0 /1vZ  `oType ~#1 02~  UTUT`tXkbNewKeyboardNotify )%2 13)_H UTUT`p. KB_NKNDETAILSMASK Z'3 24 Z) UTUT`rCARD16 H~,4 35c~  UTUT`wXkbStateNotify ).5 46) UTUT`sKB_STATEPARTMASK Z06 57Z UTUT`uCARD16 ~57 68~v UTUT`z XkbControlsNotify )78 79)Z UTUT`vKB_CONTROLMASK `oZ99 8:2Z UTUT`xUTCARD32 ~>: 9;%~ UTUT`}XkbIndicatorMapNotify )@; :<' ) UTUT`y.)KB_INDICATORMASK ZB< ;=5Z UTUT`{UTCARD32 ~G= <>. ~ UTUT`XkbIndicatorStateNotify TA)I> =?7) UTUT`|.UTKB_INDICATORMASK 6ZK? >@Z UTUT`~zCARD32 Con~P@ ?A9~ UTUT`UTXkbNamesNotify CON)RA @B:) UTUT`UTKB_NAME.DETAILMASK ZTB AC%ZUT UTUT`XkCARD16 rMa~YC BD~ UTUT`XkbCompatMapNotify RMA)[D CE5) UTUT`.{KB_CMDETAILMASK Z]E DFZUT UTUT`XkCARD8 ~bF EG?~ UTUT`UTXkbBellNotify )dG FHK ) UTUT`.KB_BELLDETAILMASK ZfH GIAZ UTUT`UTCARD8 ~kI HJR~ UTUT`XkbActionMessage )mJ IK) UTUT`.KB_MSGDETAILMASK TZoK JLYZ UTUT`CARD8 ~tL KM~E5 UTUT`XkbAccessXNotify )vM LN)F UTUT`.KB_AXNDETAILMASK TZxN MOZ UTUT`CARD16 UT~}O NP~) UTUT`XkbExtensionDeviceNotify )P OQf)Z UTUT`.KB_XIDETAILMASK ZQ PJZ UTUT`UTCARD16 ~vl^ &m ~vl'" `Detail vZ` &vZ'" `Control UTDvb &tDv'" `Meaning UT~lg &~l'#) UTUT` AXN_SKPress UTZi &Z'# UTUT` SlowKeys Dk &D'# UTUT` Key pressed ~lp &i ~l'$ UTUT` AXN_SKAccept Zr &IASZ'$P UTUT` SlowKeys Dt &A16D'$ UTUT`$Key held until it was accepted. ~ly &`~l'%Z UTUT` AXN_SKReject Z{ &b Z'% UTUT` SlowKeys D} &g D'% UTUT`%Key released before it was accepted. ~l &~l'&UT UTUT`SlAXN_SKRelease Z &Z#'& UTUT UTUT`pr SlowKeys D &D'&UT UTUT`AX$Key released after it was accepted. ~l &~l'' SlKe UTUT` AXN_BKAccept Z &$Z''ehe UTUT`ce BounceKeys D &D%'' UTUT UTUT`SK!Key pressed while it was active. ~l &~l'( SlKe UTUT` AXN_BKReject Z &%Z'( reas UTUT`cc BounceKeys D &D&'( UTUT UTUT`SK)Key pressed while it was still disabled. ~l &&UT~lpr')s  UTUT`AXN_AXKWarning Z &TUTZre')tert UTUT` AccessXKeys D &DUT')` UTUT`%Shift key held down for four seconds * eUT*cew*D UTUT`& Key ff*H 'UTff*HSKw*ssewh UTUT`& G1L1 ff*H ff*H(w* UTUT UTUT`&BKG1L2 [ff*H %[ff*Hw* reas UTUT`&ccG2L1 eff*H ff*Hw*'( UTUT`&G2L2 K#*  #*  w+& UTUT`8 ff#*H  XAXff#*H w+ UTUT`%UTQ ff#*H  Tff#*H w+ UTUT`% NoSymbol [ff#*H  TUT[ff#*H y w+ fofo UTUT`%*at ff#*H  ff#*H w+ UTUT`%* NoSymbol 0*  0* UTw,` UTUT`9 ff0*H  ff0*H UTw, UTUT`%* odiaeresis ff0*H  ff0*H UTw,&ccG2 UTUT`%egrave [ff0*H  w[ff0*H w,G2 K UTUT`% NoSymbol ff0*H  w+ff0*H w,ff* UTUT`% NoSymbol =*   =* Q w-H UTUT`10 Tff=*H  UTff=*H mbw-#* UTUT`%A ff=*H  +foff=*H *w-ff* UTUT`% NoSymbol [ff=*H  [ff=*H Now-* UTUT`%  ff=*H  w,ff=*H w-ff* UTUT`% NoSymbol J*  J* odw.ff UTUT` 11 ffJ*H  w,ffJ*H w. UTUT`%ssharp ffJ*H  w,ffJ*H w.ymb UTUT`% question [ffJ*H  w,[ffJ*H w.ymb UTUT`% backslash ffJ*H  w-ffJ*H w.Tff UTUT` % questiondown W*  W* A w/H UTUT`12 +ffW*H  UTffW*H mbw/=* UTUT` %KP_End ffW*H  UTffW*H ffw/  UTUT` %KP_1 ,[ffW*H  TUT[ffW*H  w/ UTUT` % NoSymbol ffW*H  TUTffW*H ffw/  UTUT`% NoSymbol fd*  d* ffw0  UTUT`13 ,ffd*H  TUTffd*H  w0H UTUT`% Num_Lock ,ffd*H  TUTffd*H h w0H UTUT`% NoSymbol -[ffd*H  TUT[ffd*H dow0W* UTUT`% NoSymbol ffd*H  UTffd*H +w0H UTUT`% NoSymbol Tq*  TUTq* w1H UTUT`14 ffq*H  UTffq*H  ,w1H UTUT`% NoSymbol Tffq*H  TUTffq*H  w1H UTUT`% NoSymbol T[ffq*H  TUT[ffq*H  fw1 UTUT`% NoSymbol ffq*H  TUTffq*H ffw1  UTUT`% NoSymbol f~*  T~* ffw2  UTUT`15 UTff~*H  TUTff~*H  -w2H UTUT`%Return UTff~*H " TUTff~*H  w2H UTUT`% NoSymbol T[ff~*H $ TUT[ff~*H  Tw2 UTUT`% NoSymbol Tff~*H & TUTff~*H ffw2  UTUT`% NoSymbol fə* - Tə*ffx3  UTUT`#&Key UTff*Z / TUTff*Z Tx3H UTUT`& Group: Type ff@ff*H 1 T@ff*Hx3  UTUT` &L1 UTff*H 3 TUTff*H fx3 UTUT`!&L2 Tə* 9 UTə* UTx4H UTUT`'8 ff*Z ; ff*ZRex4ff* UTUT`" G1:ALPHABETIC UT@ff*H = TUT@ff*H  Tx4H UTUT`$%q ff*H ? ff*H Nox4ff* UTUT`%% Q ə* E w2ə* x5ymb fUTe+ -ff*Z G ffff*ZUTx5&Ke UTUT`&G2:ONE_LEVEL @ff*H I x3@ff*H x5up:yp UTUT`(%@ ff*H K ff*H UTx5`  UTUT`)% NoSymbol 3ə* Q  fə* UTx6&L2 UTUT`/9 ff*Z S ff*ZUTx6`' UTUT`*G1:TWO_LEVEL @ff*H U x4@ff*H "x6ALAB UTUT`,% odiaeresis ff*H W Txff*H x6q ff UTUT`-% ?egrave ə-* ] 4ffə-*  x7* UTUT`310 ff-*Z _ b fff-*Z -x7Z UTUT`.G1:ALPHABETIC *@ff-*H a &@ff-*H ffx7 UTUT`0%a ff-*H c pUTff-*H ffx7 UTUT`1%A ə<* i UTə<* mbx8*UTe7 ff<*Z k 6ff<*Zx8* UTUT`2G2:ALPHABETIC ff@ff<*H m T@ff<*H L x8H UTUT`4%ae xff<*H o BUTff<*H erx8ff* UTUT`5% AE əK* u 6q əK*  ?x9 UTUT`; ]11 ffK*Z w x7ffK*Z3x9ff UTUT`6 _G1:TWO_LEVEL @ffK*H y @ffK*H G1x9TIC* UTUT`8%ssharp ffK*H { x7ffK*H 0x9ff* UTUT`9% question əZ*  əZ* x:UTe? ffZ*Z  ffZ*Z x:Z UTUT`:G2:ONE_LEVEL @ffZ*H  T@ffZ*H ICx:<* UTUT`<% backslash ffZ*H  UTffZ*H xx:H UTUT`=% questiondown fəi*  Təi* *x; u UTUT`C612 əffi*Z  Tffi*Z*x; w UTUT`>x G1:KEYPAD Z@ffi*H  6 _@ffi*H *x; y UTUT`@%KP_End K*ffi*H  8ffi*H *x; { UTUT`A%xKP_1 fəx*  Təx* x< UTUT`G13 ffx*Z  UTffx*Z*x< UTUT`BG1:ONE_LEVEL @ffx*H  :@ffx*H *x< UTUT`D%T Num_Lock ffx*H  <ffx*H *x< UTUT`E% Tə*  TUTə* dox=i* UTUT`K14 ff*Z    uff*Z12x=i* UTUT`F No Groups @ff*H   wUT@ff*H KEx=@ff* UTUT`H%  ff*H    x;ff*H @x=End* UTUT`I% ə*    *ə* UTx>%xKP UTUT`O15 ff*Z    ff*ZUTx>13 UTUT`JG1:ONE_LEVEL @ff*H   x<@ff*H Bx>ONLE UTUT`L%Return  ff*H   xff*H x> NuLo UTUT`M% 2$  2$UT?`E UTUT`U& URUT`V&Group 2H  TUT2Hff? UTUT N&Group URUT@N& Compat Map i*2?  2??UTff UTUT P&KE Effective URUT@P&H Modifiers -2Q  ;ff-2Qx?*UT UTUT Q&  State for XKB URUT@Q&Clients ~2H  T~2H*? UTUT R&Compatibility URUT@R&> Modifiers ƀ2Q  ƀ2Q?@ff* UTUT S&xState for non-URUT@S&Re XKB Clients *N$  f*N$ >@ UTUT UTUT`\1 NH  NH ?@ UTUT UTUT`T%UR Group1=None N?  N? @? UTUT`W%Shift -NQ  -NQ  @ UTUT`X%x00xxxxx00000001 T~NH  T~NH @ UTUT`Y%Shift ƀNQ  TUTƀNQ or@URUT UTUT`Z%ntxxxxxxxx00000001 [$  [$  AR UTUT`by 2 [H  [H A2 UTUT`[%? Group2=Mod3 UT[?  SRe[? A UTUT`]%fNone -[Q  T-[Q A  UTUT`^%x01xxxxx00000000 ~[H   rp1~[H A  UTUT`_%Mod3 ƀ[Q  !Wƀ[Q A  UTUT``%xxxxxxxx00100000 h$ !  "x00h$ B  UTUT`h3 hH " !#YhH B  UTUT`a%UT Group3=Mod2 h? # "$txxh? B UTUT`c%Shift -hQ $ #%T-hQ B  UTUT`d%x10xxxxx00000001 ~hH % $&rp2~hH B  UTUT`e% Shift+Mod2 ƀhQ & %'o ƀhQ  B UTUT`f%xxxxxxxx00010001 Au$ ' &(0 u$  C UTUT`n4 uH ( ')MouH C! UTUT`g% Group4=None u? ) (*x00u? C! " UTUT`i%Control -uQ * )+3 -uQ  C UTUT`j%x11xxxxx00000100 B~uH + *,~uH  Ct UTUT`k%Control ƀuQ , +ƀuQ %CT UTUT`l%xxxxxxxx00000100 ~ u v~&Vrp2 `Bit in changeControls   v uw Vƀ `Field(s) to be Applied `f~ w vx ~ W$ UTUT`XkbRepeatKeysMask   x wy WC UTUT`U$repeatDelay, UrepeatInterval ~ y xz~"Xi UTUT`XkbSlowKeysMask   z y{  UTX%x1 UTUT`UslowKeysDelay ~ { z|~UTY`k UTUT`.XkbStickyKeysMask   | {}% Yxxxx UTUT U?accessXOptions (only the XkbAX_TwoKeysU and the URUT@,XkbAX_LatchToLock options are affected) ~ } |~~Z UTUT` tXkbBounceKeysMask   ~ } ZUT UTUT`UXkdebounceDelay ~  ~~[C UTUT`XkbMouseKeysMask      [ UTUT`UimouseKeysDfltBtn ~$   ~$\ UTUT`x1XkbMouseKeysAccelMask  $  | $$\UT UTUT UUT/mouseKeysDelay, UmouseKeysInterval, URUTU0mouseKeysCurve, UmouseKeysTimeToMax, UT!UPUT@UmouseKeysMaxSpeed ~B  UR~BX_]ck UTUT`edXkbAccessXKeysMask  B   BUT]` t UTUT`Uk accessXOptions (all options) ~Q$  Z~Q$^ounDe UTUT`XkbAccessXTimeoutMask  Q$ " C Q$$Xk^sMa  UTUT U0accessXTimeout, UaccessXTimeoutMask, URUT\UT=accessXTimeoutValues, UaccessXTimeoutOptionsMask, !UPUT@U accessXTimeoutOptionsValues \~v & clM~v_ UTUT`XkbAccessXFeedbackMask UT v (  v,_UT UTUT UsC=accessXOptions (all options except those affected by the oURUT@XkbStickyKeysMask bit) ~ , ]k~ed`ssXys UTUT`XkbGroupsWrapMask   . ] `esspt UTUT`U  groupsWrap $~ 2 ~Dea UTUT`meXkbInternalModsMask   4   a UTUT Uut6affectInternalRealMods, UinternalRealMods, URUT@Ulu7affectInternalVirtualMods, UinternalVirtualMods @~ 8 ~blM UTUT`XkbIgnoreLockModsMask   :  b UTUT U:affectIgnoreLockRealMods, UignoreLockRealMods, URUT@Upt;affectIgnoreLockVirtualMods, UignoreLockVirtualMods sk~V > ~Vced UTUT`UTXkbPerKeyRepeatMask sW V @  Vc` UTUT`U perKeyRepeat s~d D ~dda UTUT`XkbControlsEnabledMask Mas d F  dda UTUT`U/affectEnabledControls, UenabledControls lMo~Il  lrt~IlnaKkods ` Behavior I2  bI2KkIgneL `Effect ~Wl  ~WlUTKl  UTUT`ReKB_Default noW2  fctW2 Klnoroc UTUT`1Press and release events are processed normally. ~fl:  ~fl:asKmV UTUT` KB_Lock f2:  TUTf2::peKmd UTUT IIf a key is logically up (i.e. the corresponding bit of the core key map URUTedDis cleared) when it is pressed, the key press is processed normally !UPUTaGand the corresponding release is ignored. If the key is logically down lMo,UNUTEwhen pressed, the key press is ignored but the corresponding release 7ULUT@Beis processed normally. ~Vly  ~Vly$Kn` UTUT KB_RadioGroup URUTflags: CARD8 !UPUT@lindex: CARD8 V2y  V2yyKn UTUT  MIf another member of the radio group specified by Uindex is logically lURUTEdown when a key is pressed, the server synthesizes a key release for !UPUTAthe member that is logically down and then processes the new key ,UNUT@pepress event normally. ;ULUT  iFIf the key itself is logically down when pressed, the key press event FUJUTle@is ignored, but the processing of the corresponding key release UPQUHUTanTdepends on the value of the RGAllowNone bit in Uflags. If it is set, \UFUT, Dthe key release is processed normally; otherwise the key release is gUDUT@ nalso ignored. vUBUT` *All other key release events are ignored. ~l$  Bad~l$KoagsCA UTUT  KB_Overlay1 CAURUT@key: KEYCODE 2$  Kn2$$Koanoer UTUT ioEIf the Overlay1 control is enabled, events from this key are oURUTreKreported as if they came from the key specified in Ukey. Otherwise, ber!UPUT@ d1press and release events are processed normally. ~l$  ~l$f Kpllyow UTUT e KB_Overlay2 t URUT@lekey: KEYCODE 2$  eas2$$anKp onhe UTUT RGEIf the Overlay2 control is enabled, events from this key are URUTisKreported as if they came from the key specified in Ukey. Otherwise, o i!UPUT@1press and release events are processed normally. ~l  Bad~lqagsCA `Value 2   2 qK `#Interpretation of the Groups Field ~ l  aed~ l arUT UTUT` a IM_UseNone e f 2  we, 2 drnd le UTUT`ceKThe Ugroups field and the current keyboard group state are ignored. $~l$   KB~l$sk: UTUT` IM_UseBase 2$  nK2$$sEIfhe UTUT coOIf Ugroups is non-zero, the indicator is lit whenever the base keyboard theURUTy Pgroup is non-zero. If Ugroups is zero, the indicator is lit whenever the en!UPUT@orbase keyboard group is zero. ~>l$  ~>l$tVa UTUT`IM_UseLatched >2$  q>2$$terpta UTUT  FMIf Ugroups is non-zero, the indicator is lit whenever the latched keyaURUTUTNboard group is non-zero. If Ugroups is zero, the indicator is lit when!UPUT@)ever the latched keyboard group is zero. h~cl$  od ~cl$d.u UTUT` IM_UseLocked Bc2$  TUTc2$$seu UTUT MThe Ugroups field is interpreted as a mask. The indicator is lit when fURUT nCthe current locked keyboard group matches one of the bits that are !UPUT@ nset in Ugroups.  i~l$  nUP~l$ kvrouis UTUT`.IM_UseEffective 2$  t2$$vUsetc UTUT MThe Ugroups field is interpreted as a mask. The indicator is lit when TURUTUFthe current effective keyboard group matches one of the bits that are !UPUT@UTset in Ugroups. . I~l  l w~lwe lch `isValue 2  od 2d.w `*Keyboard State Component To Be Considered ~l  e~lxMTh UTUT`  i IM_UseBase as2  T2loxoargr UTUT` tBase modifier state UP~l  i~l yn UTUT` IM_UseLatched 2  v2 y UTUT` Latched modifier state tc~l  e i~lk.zcat i UTUT`UT IM_UseLocked h2  o o2UPz@UT UTUT` sLocked modifier state ~l  ~lch{ UTUT`IM_UseEffective 2  .2{*Keoa UTUT`  TEffective modifier state ~l  ~lTh|UT UTUT`se IM_UseCompat 2  2ar|UT UTUT`ifModifier compatibility state ~  ~UT}`  `Bit in Explicit Mask   }Lahe `tcProtects Against ~  ~ ~`UT UTUT`ExplicitKeyType1   UPUT~sLo UTUT e 8Automatic determination of the key type associated with URUTL{(Group1 (see section 12.2.3) iv~  .~{Ke UTUT` ExplicitKeyType2 i  Th UTUT UT8Automatic determination of the key type associated with URUTL(Group2 (see section 12.2.3) UT~V  ~V  UTUT`ExplicitKeyType3 V  a V  UTUT 8Automatic determination of the key type associated with AURUTL)Group3 (see section 12.2.3). ~o ! ~o  UTUT`ExplicitKeyType4 o # ointheey UTUT it8Automatic determination of the key type associated with .3URUTL)Group4 (see section 12.2.3). ~ * ~ i UTUT`ExplicitInterpret  , intheey UTUT it?Application of any of the fields of a symbol interpretation to UTURUTL2the key in question (see section 12.2.4). ~ 3 cKe~  UTUT` ExplicitAutoRepeat  5  teyptedit UTUT =Automatic determination of autorepeat status for the key, as URUTLCspecified in a symbol interpretation (see section 12.2.4). ~$ < # ~$ UTUT`"eyExplicitBehavior t$ > sci$$)Grp4 UTUT ioAAutomatic assignment of the KB_Lock behavior to the key, URUT iAif the LockingKey flag is set in a symbol interpretation !UPUTL(see section 12.2.4). ~$ E tAp~$e  a mb UTUT`$toExplicitVModMap $ G 12.$$  UTUT !On l /   //0 UTUT @ro=The Ugroups field is treated as a group mask. The keyURUT@4board group latch is changed to the lowest numbered !UPUT@Ggroup specified in Ugroups; if Ugroups is empty, the keyEf,UNUT@@ro&board group latch is changed to zero. ~Vl:  l~Vl:IMse UTUT`EURIM_UseLatched V6:  V6:9 UTUT`AUTOff  V:    V:: UTUT COfAThe Ugroups field is treated as a group mask. If the indiURUTC:cator is explicitly extinguished, keyboard group latch is !UPUTC6changed to the lowest numbered group not specified in ,UNUTCUchGgroups; if Ugroups is zero, the keyboard group latch is set 7ULUT@C2to the index of the highest legal keyboard group. ~l$  T k~l$roula UTUT HthIM_UseLocked, or PURUT@HgrIM_UseEffective U6$  eey6$roroula UTUT`DzeOn ~ $   $$seUT UTUT FIM?If the Ugroups mask is empty, group is not changed, othVURUTF7erwise the locked keyboard group is changed to the low!UPUT@F0est numbered group specified in Ugroups. UT~l/  itr~l/ iUR UTUT KcaIM_UseLocked, or gURUT@KroIM_UseEffective UT6/  dro6/UNCch UTUT`GUOff s /  t //tox oth UTUT Iyb3Locked keyboard group is changed to the lowest numTURUTIAbered group that is not specified in the Ugroups mask, or P!UPUTIgrCto Group1 if the Ugroups mask contains all keyboard ,UNUT@Irogroups. ou~   J~K   NXkbGetMapByName UT@NheKeyboard Component ptH   JFHd Kgro i  Jow Database @JerComponent V    JVK `LUT#Components of Keyboard Description r g~    J~Kdro UTUT`Q. XkbGBN_Types CH    JHK  UTUT`Mtypes V   Jrp VstKURUT UTUT`Od key types ~-   J P~-toKp1 UTUT`T.XkbGBN_CompatMap -H  Ju-H K UTUT`Pcompat KV-  JBamV-heKd Cpo UTUT R,symbol interpretations, group compatibility URUT@Rmap ro~G  J~GtK  UTUT`W. XkbGBN_ClientSymbols GH  JGHtsKardes UTUT Ssymbols, types, URUT@S keycodes VG  JXkVGK  UTUT U)key types, key symbol mappings, modifier TURUT@Utymapping ~a$  J~a$K UTUT UTUT`Z.tyXkbGBN_ServerSymbols aH$  JaH$UTK`T UTUT V symbols, types, URUT@V keycodes Va$  JPVa$$K UTUT XB)key behaviors, key actions, key explicit oURUTX,components, virtual modifiers, virtual modi!UPUT@X fier mapping ~  J~K UTUT UTUT`].BNXkbGBN_IndicatorMap H  JHK UTUT UTUT`Yolcompat V  JVKXk UTUT`[ indicator maps, indicator names ~  JTUR~inKa UTUT``.XkbGBN_KeyNames H  JTHrSK UTUT`\ keycodes V  JTVsyKpes UTUT`^key names, key aliases ~  J~KUT UTUT`c.viXkbGBN_Geometry keH  JsviHalK!UPUT UTUT`_ m geometry V   JVKUTUT UTUT`aXkkeyboard geometry ~  !J~K UTUT UTUT`f.olXkbGBN_OtherNames H !  "JHK UTUT UTUT`bcaall psV " !J VK UTUT d-key types, symbol interpretations, indicator URUT@d "maps, names, geometry ~~ # $ke~~  `hName ~ $ #%^~es `e Capability ~ % $&TUT~eo UTUT`j XI_Keyboards s & %'TUTet UTUT g >If set, applications can use all XKB requests and events with URUT@goaextension keyboards. ~ ' &(~UTUT UTUT`lthXI_ButtonActions  "( ')UTUT UTUT i;If set, clients can assign key actions to buttons, even on URUT@i0input extension devices that are not keyboards. ti~ &) (* ~  UTUT`nXI_IndicatorNames  (* )+h  UTUT k:If set, clients can assign names to indicators on non-keyURUT@kboard extension devices. &~ ,+ *,~jKeyar UTUT`pXI_IndicatorMaps  ., +{  apic UTUT m X?If set, clients can assign indicator maps to indicators on non-ardURUT@m keyboard extension devices. ~ 2- E. TUT~nA  `r Name  4. -/ UT  clnt `octValue ~ 8/ .0 nt ~ a ybods UTUT`t KB_PROPERTY * :0 /1 n Indat UTUT`q[name, value: STRING8 ] ~ >1 02  ~If entca UTUT`vin KB_POINT  @2 13 ode + , UTUT`s[x, y: CARD16 ] j~ D3 24 dat~ , { UTUT`x KB_OUTLINE  F4 35 fetnd ps  i UTUT`urd0[cornerRadius: CARD8, points: LISTofKB_POINT ] ~ J5 46 TUT~nA  UTUT`z KB_SHAPE  L6 57 T nt UTUT wVa)[name: ATOM, outlines: LISTofKB_OUTLINE URUT@w primaryNdx, approxNdx: CARD8 ] UT~ P7 68 ~  UTUT`| KB_KEYNAME UT R8 7P 2  UTUT`y[ name: LISTofCHAR ] T~. V9 Q: ~.o  UTUT`~KB_KEY UT. X: 9; . at UTUT { [name: KB_KEYNAME, gap: INT16, URUT@{shapeNdx, colorNdx: CARD8 ] ~J \; :< s ~Jrd rRaus UTUT`ISKB_ROW NT J ^< ;= TJ  UTUT`}z8[top, left: INT16, vertical: BOOL, keys LISTofKB_KEY ] T~Y b= <> UT~Yme utles UTUT` KB_OVERLAYKEY Y d> =? Y8  UTUT`[over, under: KB_KEYNAME ] ~h h? >@ R~h  UTUT`KB_OVERLAYROW h j@ ? Vh  UTUT`3[rowUnder: CARD8, keys: LISTofKB_OVERLAYKEY ] ~5 nA B ~5UT  { UTUT`MEKB_SHAPEDOODAD UR5 pB A 8 55 \   UTUT 1[name: ATOM, priority: CARD8, top, left: INT16, BURUT'type: { SolidDoodad, OutlineDoodad }, J%UPUT%angle: INT16, width, height: CARD16 ,2UNUT@iccolorNdx, shapeNdx: CARD8 ] T~V( tC D UT~V(me utles UTUT` KB_TEXTDOODAD V( vD CE V((8  UTUT 1[name: ATOM, priority: CARD8, top, left: INT16, URUT&angle: INT16, width, height: CARD16, %UPUT@1colorNdx: CARD8, text: STRING8, font: STRING8 ] ~~( zE DF ~~(UT ` UTUT`8,KB_INDICATORDOODAD AYK~( |F EG B~(( UT UTUT UT1[name: ATOM, priority: CARD8, top, left: INT16, URUTangle: INT16, %UPUT@/shapeNdx, onColorNdx, offColorNdx: CARD8 ] ity~( G FH ~(,  oda}, UTUT`KB_LOGODOODAD ( H GI ic(( C ~ UTUT  1[name: ATOM, priority: CARD8, top, left: INT16, URUT*angle: INT16, colorNdx, shapeNdx: CARD8, %UPUT@logoName: STRING8 ] ~ I HJ [~CA  le: UTUT` KB_DOODAD  J IK TAR  STNG UTUT  %KB_SHAPEDOODAD, or KB_TEXTDOODAD, or URUT@%KB_INDICATORDOODAD, or KB_LOGODOODAD ~P K JL ~P  UTUT` KB_SECTION UTP L K} A8,PPUR  UTUT [name: ATOM, URUT, top, left, angle: INT16, !UPUTwidth, height: CARD16, ,UNUTpriority: CARD8, 7ULUTrows: LISTofKB_ROW, BUJUTdoodads: LISTofKB_DOODAD, MUHUT@ Coverlays: LISTofKB_OVERLAY ] ~il M NXe: ~ilYgleIN `peBit in Changed UTi2 N MOXi2Y[ `CAMeaning le~wl O NPX~wlY UTUT`AR NKN_Keycodes Gw2 P OQX_XTw2Y%KBND UTUT`B_=The new keyboard has a different minimum or maximum keycode. ~l Q PRXT~lUTY UTUT` NKN_Geometry 2 R QSXT2, Y UTUT`an4The new keyboard has a different keyboard geometry. 16~l S RTX UL~ls:Y_RO UTUT` NKN_DeviceID T2 T SXls:2Y UTUT`?The new keyboard has a new X Input Extension device identifier pe~~ U V\ ~~] `Bit in changed CAl V UW\Pl] `UT Event field NKh W VX\Qh] `UTChanged component ~ ~ X WY\uke~ ~]Q R UTUT`.ModifierState  l Y XZ\KGe l]R S UTUT`Umods h  Z Y[\anh m]t kbo UTUT`The effective modifiers T~~ [ Z\\~~]_Dece UTUT`. ModifierBase l \ []\l] neke UTUT`U I baseMods ih ] \^\ h ]~ UTUT`The base modifiers ~)~ ^ ]_\ ~)~] UTUT`.ModifierLatch )l _ ^`\ )l] UTUT`U latchedMods h) ` _a\ h)ke]~ UTUT` The latched modifiers ~8~ a `b\Z~8~] UTUT`.UT ModifierLock 8l b ac\8l]] UTUT`U lockedMods efh8 c bd\ h8] UTUT`ceThe locked modifiers o~G~ d ce\]~G~] UTUT`.UT GroupState baGl e df\Gl]] UTUT`Ugroup hG f eg\ hG ]~ UTUT`The effective keyboard group i~V~ g fh\~V~]] UTUT`. GroupBase Vl h gi\aVl]ke UTUT`UUT baseGroup hV i hj\ hVZ]~ UTUT`The base keyboard group Mo~e~ j ik\c~e~] UTUT`.UT GroupLatch loel k jl\del] UTUT`UUT latchedGroup hhe l km\ he] UTUT`The latched keyboard group ate~t~ m ln\~t~] UTUT`. GroupLock tl n mo\ tl ]~ UTUT`U lockedGroup e ht o np\hht] UTUT`UTThe locked keyboard group ~~ p oq\a~~]ke UTUT`.UTPointerButtons Vl q pr\l] UTUT UTUT`Uba ptrBtnState ouh r qs\ch] UTUT`&The state of the core pointer buttons ~~s rt\~~UT]`UT UTUT`. GrabMods lt su\l] UTUT`Uke grabMods phu tv\h] UTUT`$The XKB state used to compute grabs ~~ v uw\ ~~UT]Ulo UTUT`. LookupMods lw vx\lUT]UTTh UTUT`Ugr lookupMods ~hx wy\hke]UT UTUT`ut&The XKB state used to look up symbols ~~y xz\~~]Btnat UTUT`. CompatState slz y{\l!] ste UTUT`Ur compatState h{ z|\h] UTUT UTUT`Mo"Default state for non-XKB clients ~~| {}\~~]bMo p UTUT`.CompatGrabMods l!} |~\lTh]te ed UTUT`U compatGrabMods h#~ }\hUT]` UTUT`%The core state used to compute grabs ~V~( ^hUT~V~up_h UTUT`. CompatLookupMods Vl* ^TUTVlst_to ok UTUT`UcompatLookupMods hV, ^hV_ Coat UTUT`'The core state used to look up symbols ~lV W~l ` Flag 2W VXT2e KB ie ` Meaning }~lX WY~l patab UTUT` LC_Hidden 2Y XZTh2UT U co UTUT CIndicates a component that should not normally be presented to the ]URUT@UT user. ~lZ Y[~l!hUT UTUT` LC_Default h2[ Z\2 !T UTUT`CIndicates a component that is the default member of its class. V~l\ []~l" UTUT UTUT`co LC_Partial to2] \ 2" UTUT`#Indicates a partial component. ~I^ _~I#  `in Flag I_ ^`I#abUT `LC Meaning ~W` _a~W $ UTUT UTUT`caLC_AlphanumericKeys hoWa `bRUTW $l UTUT :Indicates a symbol component that contains bindings primaURUT@ef6rily for an alphanumeric section of the keyboard. ~pb acTUT~ps %nt at UTUT`mbLC_ModifierKeys pc bdp%"UT UTUT :Indicates a symbol component that contains bindings primaURUT@rily for modifier keys. UT~d cent.~&^ _ UTUT`LC_KeypadKeys e dfl&^` UTUT :Indicates a symbol component that contains bindings primaURUT@"rily for numeric keypad keys. ~f egTUT~nu' ho UTUT`LC_FunctionKeys UTg fhTUTs 'comne UTUT in:Indicates a symbol component that contains bindings primaURUT@oarily for function keys. ~h gis ~UT(mbLC UTUT`LC_AlternateGroup i h(:Inca UTUT ne;Indicates a symbol component that contains bindings for an r mURUT@UTalternate keyboard group. H I K Ej &H I KU UTUTl(e9#November 6, 1997Running H/F 1 aHH Fk gprHH d keys.Vd THl VW UTHLCunHH$1& Gm TUTH$1&s  Ws UTUTdent sH I K Hn f fH I KgiXUTUTle(9#November 6, 1997Running H/F 1 HH Io HH (ne;InY din gHp YZ  ybHH IHH$1& Jq H$1&Z(UTUTdeer HH Kr HH  [d Hs [\ HHH I K Lt 1&H I K s \UTUTle2/28/96Protocol Version 1.0/Document Revision 1.0# H6u \v vxH6UTH66H'. Fv uw uwx FH'. FH2XH2X`The X Keyboard Extension\'oR Fw vx vx n\'oR F2X\2X`Protocol SpecificationH'Wx w H'Wuwd~   H"%^5h e ~ (H"%^5h eH-H-FootnoteH1   ~Footnote     J co VH e ~ J co VH eJ czJ cz TableFootnoteIHA  ~s UT TableFootnoteD~ 1D~evionDDPz ,^ e ~ vPz ,^ eVUQPUQ@^ %N ,^ e ~ w^ %N ,^ ee9^ @P%N ,^ e ~ \P%N ,^ eVP@^ z ,^ e ~ c S^ z ,^ ee9UQ^ UQ@L\$$ ~L\$$H-6 ~H-6^ /= ,^ e ~ e^ /= ,^ ee9 ^ @P/= ,^ e ~ P/= ,^ eV P @Pz[x. ~Pz[x.H-6 ~H-6d I] !l  Q  aeFl %1]d"<$paranum><$paratext><$pagenum> UUdI,^"<$paranum><$paratext><$pagenum> "UUdJ "<$paranum><$paratext><$pagenum> l FW e ] l FW el l Table of Contents Specificationzd  z^ "@l u R  l uV~^d#,^ Level2IX dK#  Level1IX =dL#  1, 23 @%dM#$<$symbols><$numerics><$alphabetics> ,^:dNg LSymbols[\ ];Numerics[0];A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z EdO# <$pagenum> RdP l [q e ^ Il [q ellIndex Specification Qd _ #1l  S  <$l  $p,^"<$_atdUU"<$paranum><$paratext><$pagenum> l FW0( e _ l FW0( el l List of Figures Specificationcd  ` $l  T  l  `d"<$paranum><$paratext><$pagenum> l FW e ` 12l FW el l List of Tables Specificationd ;C;aa 'Q;S;HH U  em>HHT++ a + UT UThOverview c`RWThis extension provides a number of new capabilities and controls for text keyboards. S4 S gThe core X protocol specifies the ways that the Shift, Control and Lock modifi"<$ASt>_ers and the modifiers bound to the Mode_switch or Num_Lock keysyms interact to LiNSifWgenerate keysyms and characters. The core protocol also allows users to specify that a l[STWkey affects one or more modifiers. This behavior is simple and fairly flexible, but it `hSUhas a number of limitations that make it difficult or impossible to properly support uSQmany common varieties of keyboard behavior. The limitations of core protocol sup@SC;port for keyboards include: S;URUT TWUse of a single, uniform, four-symbol mapping for all keyboard keys makes it difficult UPUTTUTTto properly support keyboard overlays, PC-style break keys or keyboards that comply deUNUT@TcaFwith ISO9995 or a host of other national and international standards. ULUT UspWUse of a modifier to specify a second keyboard group has side-effects that wreak havoc UJUT@UanSwith client grabs and X toolkit translations and limit us to two keyboard groups. toUHUT VSWPoorly specified locking key behavior requires X servers to look for a few magic keyt aUFUTVSSsyms to determine which keys should lock when pressed. This leads to incompatibili buUDUT@VUties between X servers with no way for clients to detect implementation differences. sUBUT WYPoorly specified capitalization and control behavior requires modifications to X library U@UTWC;Wsource code to support new character sets or locales and can lead to incompatibilities ol U>UT@Wyb;between system-wide and X library capitalization behavior. erlU<UT X oTLimited interactions between modifiers specified by the core protocol make many com99'U:UTXheVmon keyboard behaviors difficult or impossible to implement. For example, there is no 3U8UT@XrdWreliable way to indicate whether or not using shift should cancel the lock modifier. to?U6UT Y aZThe lack of any explicit descriptions for indicators, most modifiers and other aspects of KU4UTY sYthe keyboard appearance requires clients that wish to clearly describe the keyboard to a sWU2UT@Yes@user to resort to a mishmash of prior knowledge and heuristics. wek ZnoWThis extension makes it possible to clearly and explicitly specify most aspects of keyifixZanUboard behavior on a per-key basis. It adds the notion of a numeric keyboard group to dZhaTthe global keyboard state and provides mechanisms to more closely track the logical eeZX Uand physical state of the keyboard. For keyboard control clients, this extension promZ bRvides descriptions and symbolic names for many aspects of keyboard appearance and ZleTbehavior. It also includes a number of keyboard controls designed to make keyboards w@Zg 5more accessible to people with movement impairments.  [ oTThe X Keyboard Extension essentially replaces the core protocol definition of a keyUT[keUboard. The following sections describe the new capabilities of the extension and the 2@[usFeffect of the extension on core protocol requests, events and errors. h\) e$Conventions and Assumptions) an ]fyRThis document uses the syntactic conventions, common types, and errors defined in ] aUsections two through four of the specification of the X Window System Protocol. This s)]e Rdocument assumes familiarity with the fundamental concepts of X, especially those 6]trSrelated to the way that X handles keyboards. Readers who are not familiar with the naC]tsUmeaning or use of keycodes, keysyms or modifiers should consult (at least) the first fP@] dVfive chapters of the protocol specification of the X Window System before continuing. d  ybbb ( rlaHH V  HHd.**describebil* UT UTl^ tKeyboard State us,_telThe core protocol description of keyboard state consists of eight jmodifiersjA (Shift, an,_fykLock, Control, and Mod1-Mod5). A modifier reports the state of one or modifier tio9D_r Nkeys, which are similar to qualifier keys as defined by the ISO9995 standard: NURUT$` f]Qualifier keyA key whose operation has no immediate effect, but which, for as long as it is o[UPUT`ndJheld down, modifies the effect of other keys. A qualifier key may be, for hUNUTD`f 'example, a shift key or a control key. sul}$airWWhenever a modifier key is physically or logically depressed, the modifier it controls tema. Yis set in the keyboard state. The protocol implies that certain modifier keys lock (i.e. aXaffect modifier state after they have been physically released) but does not explicitly a^Zdiscuss locking keys or their behavior. The current modifier state is reported to clients aeiNin a number of core protocol events and can be determined using the QueryDandPointer request. $bpoVThe XKB extension retains the eight real modifiers defined by the core protocol but binhextends the core protocol notion of jkeyboard state to include up to four jkeysym groups, ecDbas$as defined by the ISO9995 standard: heULUT,cth[Group:A logical state of a keyboard providing access to a collection of characters. A y oUJUTculOgroup usually contains a set of characters which logically belong together and d, UHUTDcntAwhich may be arranged on several shift levels within that group. t1$dceRFor example, keyboard group can be used to select between multiple alphabets on a >DdcaQsingle keyboard, or to access less-commonly used symbols within a character set. oWle)Th:Locking and Latching Modifiers and Groups e$fbe[With the core protocol, there is no way to tell whether a modifier is set due to a lock or nterfWbecause the user is actually holding down a key; this can make for a clumsy user-intere pDfVface as locked modifiers or group state interfere with accelerators and translations. $ggrPXKB adds explicit support for locking and latching modifiers and groups. Locked gVmodifiers or groups apply to all future key events until they are explicitly changed. ggrRLatched modifiers or groups apply only to the next key event that does not change Dgwhkeyboard state. d dh)ev-Fundamental Components of XKB Keyboard State odid :The fundamental components of XKB keyboard state include: UFUTljca/The locked modifiers and group d sUDUTlkar0The latched modifiers and group hiUBUTllro_The base modifiers and group (for which keys are physically or logically down) a U@UT$me YThe effective modifiers and group (the cumulative effect of the base, locked and latched 'U>UTLmms4modifier and group states). ! od3U<UTdnat#State of the core pointer buttons. nslG$oSThe latched and locked state of modifiers and groups can be changed in response to ckeT og[keyboard activity or under application control using the XkbLatchLockState2" aoLaXrequest. The base modifier, base group and pointer button states always reflect the logno sZical state of the keyboard and pointer and change konly in response to keyboard or {Dopointer activity. d aThcc )upHH W  aheHHr,,llc m,lp)ic;Computing Effective Modifier and Group)#)$ U@$qThUThe effective modifiers and group report the cumulative effects of the base, latched #qmsRand locked modifiers and group respectively, and cannot be directly changed. Note 0Dqr Lthat the effective modifiers and effective group are computed differently. d E$rgeUThe effective modifiers are simply the bitwise union of the base, latched and locked lRDrLa modifiers. 2g$sVThe effective group is the arithmetic sum of the base, latched and locked groups. The tsblocked and effective keyboard group must fall in the range Group1-Group4, so they DsZare adjusted into range as specified by the global GroupsWrap control as follows: UTUT,tdIf the RedirectIntoRange.% flag is set, the four least significant bits of the groups URUTt,Ywrap control specify the index of a group to which all illegal groups correspond. If the UPUTDtefPspecified group is also out of range, all illegal groups map to Group1. UNUT,uanaIf the ClampIntoRange.& flag is set, out-of-range groups correspond to the nearest ULUTuveXlegal group. Effective groups larger than the highest supported group are mapped to the ctUJUTusiahighest supported group; effective groups less than Group1 are mapped to Group1. UHUTuefZFor example, a key with two groups of symbols uses Group2 type and symbols if the UFUTDundCglobal effective group is either Group3 or Group4. rouUDUT$vZIf neither flag is set, group is wrapped into range using integer modulus. For example, a UBUTvUTXkey with two groups of symbols for which groups wrap uses Group1 symbols if the ni U@UTv gdglobal effective group is Group3 or Group2 symbols if the global effective group is rrU>UTDvUP Group4. ef-$wisWThe base and latched keyboard groups are unrestricted eight-bit integer values and are the:Dwe0not affected by the GroupsWrap control. spSlx) >Computing A State Field from an XKB State)')) a$yte`Many events report the keyboard state in a single lstate field. Using XKB, a state field hanyreWcombines modifiers, group and the pointer button state into a single sixteen bit value ymb{Dy2 as follows: ymU<UT$zUT[Bits 0 through 7 (the least significant eight bits) of the effective state comprise a mask U:UTDzer3of type KEYMASK which reports the state modifiers. er U8UT${leOBits 8 through 12 comprise a mask of type BUTMASK which reports pointer button es U6UTD{bostate. niU4UT$| gXBits 13 and 14 are interpreted as a two-bit unsigned numeric value and report the state veU2UTD|UTkeyboard group. p4U0UTd}@Bit 15 (the most significant bit) is reserved and must be zero. gh$~esSIt is possible to assemble a state field from any of the components of the XKB keyS~Mboard state. For example, the effective keyboard state would be assembled as e~rtUdescribed above using the effective keyboard group, the effective keyboard modifiers D~inand the pointer button state. ,l)nt5Derived Components of XKB Keyboard State)( s:$UTRIn addition to the fundamental state components, XKB keeps track of and reports a GskQnumber of state components which are derived from the fundamental components but 8TBiYstored and reported separately to make it easier to track changes in the keyboard state. aniPThese derived components are updated automatically whenever any of the fundamen vnDe 7tal components change but cannot be changed directly. d  rdd *ghHH X  e sHH t,, keySd~,$mpWThe first pair of derived state components control the way that passive grabs are actibovivYvated and the way that modifiers are reported in core protocol events that report state. u"RThe server uses the ServerInternalModifiers, IgnoreLocksModifiers / to^and IgnoreGroupLock controls, described in section 2.3.1, to derive these two <Dtsstates as follows: om PUTUT$mpXThe lookup state is the state used to determine the symbols associated with a key event k \URUTLboQand consists of the effective state minus any server internal modifiers.8 yhUPUT$heYThe grab state is the state used to decide whether a particular event triggers a passive tUNUTVgrab and consists of the lookup state minus any members of the ignore locks modifiers ULUT sYthat are not either latched or logically depressed. If the ignore group locks control is UJUTLt Kset, the grab state does not include the effects of any locked groups.9 bovl)ivDServer Internal Modifiers and Ignore Locks Behavior*+, s $ uTThe core protocol does not provide any way to exclude certain modifiers from client ocDOevents, so there is no way to set up a modifier which affects only the server. 2.3,thaThe modifiers specified in the mask of the InternalMods24 control are not reported tinWin any core protocol events, are not used to determine grabs and are not used to calcuecty Xlate compatibility state for XKB-unaware clients. Server internal modifiers affect only tD p*the action applied when a key is pressed. $ aRThe core protocol does not provide any way to exclude certain modifiers from grab thQcalculations, so locking modifiers often have unanticipated and unfortunate side- *DPeffects. XKB provides another mask which can help avoid some of these problems. ov?,ivbThe locked state of the modifiers specified in mask of the IgnoreLockMods25 control LotYis not reported in most core protocol events and is not used to activate grabs. The only oYo Ucore events which include the locked state of the modifiers in the ignore locks mask fVare key press and release events that do not activate a passive grab and which do not s  edoccur while a grab is active. If the IgnoreGroupLoc2k26 control is set, the locked biD-uMstate of the keyboard group is not considered when activating passive grabs. h$heUWithout XKB, the passive grab set by a translation (e.g. Altspace) diYdoes not trigger if any modifiers other than those specified by the translation are set, iatQwith the result that many user interface components do not react when either Num iobTLock or when the secondary keyboard group are active. The ignore locks mask and the hesRignore group locks control make it possible to avoid this behavior without exhausD t5tively grabbing every possible modifier combination. el)e 7Compatibility Components of Keyboard State)7 k $WThe core protocol interpretation of keyboard modifiers does not include direct support s ocRfor multiple groups, so XKB reports the effective keyboard group to XKB-aware cliYents using some of the reserved bits in the state field of some core protocol events, as b$L$described in section 2.2.2. t 9$e.UThis modified state field would not be interpreted correctly by XKB-unaware clients, F pejso XKB provides a jgroup compatibility mappingj: (see section 12.1) which remaps the Sn Rkeyboard group into a core modifier mask that has similar effects, when possible. `ksQXKB maintains three compatibility state components that are used to make non-XKB omDor"clients work as well as possible: UHUTlevjThe Vcompatibility stateV; corresponds to the effective modifier and effective group state. d l ee + mifHH Y  HH}ip,,s the eferd,UTUTldThe Vcompatibility lookup stateV< is the core-protocol equivalent of the lookup state. , URUTlhThe Vcompatibility grab stateV= is the nearest core-protocol equivalent of the grab state. nt'$ bTCompatibility states are essentially the corresponding XKB state, but with keyboard y 4  Zgroup possibly encoded as one or more modifiers;  section 12.1  describes the group At Tcompatibility map, which specifies the modifier(s) that correspond to each keyboard ilNDtsgroup. usc, o\The compatibility state reported to XKB-unaware? clients for any given core protocol ilp^event is computed from the modifier state that XKB-xcapable clients would see for that }l Ysame event. For example, if the ignore group locks control is set and group 2 is locked, Zthe modifier bound to Mode_switch is not reported in any event except (Device)KeyD<HPress and (Device)KeyRelease events that do not trigger a passive grab. UPUT,atfReferring to clients as XKB-capable> is somewhat misleading in this context. The UNUTilQsample implementation of XKB invisibly extends the X library to use the keyboard ULUTp Vextension if it is present. This means that most clients can take advantage of all of UJUTcoVXKB without modification, but it also means that the XKB state can be reported to cliUHUTgr^ents that have not explicitly requested the keyboard extension. Clients that \directly UFUTroXinterpret the state field of core protocol events or that interpret the keymap directly leUDUT sTmay be affected by some of the XKB differences; clients that use library or toolkit onUBUTDouQroutines to interpret keyboard events automatically use all of the XKB features. n$ ePXKB-aware clients can query the keyboard state at any time or request immediate th!a \notification of a change xto any of the fundamental or derived components of the key .Ddi board state. eOU@ UTl Virtual Modifiers@ e$xtVThe core protocol specifies that certain keysyms, when bound to modifiers, affect the rmo[rules of keycode to keysym interpretation for all keys; for example, when Num_Lock t a XZis bound to some modifier, that modifier is used to choose shifted or unshifted state for enPthe numeric keypad keys. The core protocol does not provide a convenient way to d veddetermine the mapping of modifier bits, in particular Mod1 through Mod5, to keysyms ifth`such as Num_Lock and Mode_switch. Clients must retrieve and search the modifier llKBSmap to determine the keycodes bound to each modifier, and then retrieve and search ny meOthe keyboard mapping to determine the keysyms bound to the keycodes. They must amempSrepeat this process for all modifiers whenever any part of the modifier mapping is tuaD changed. $ pUXKB provides a set of sixteen named virtual modifiers, each of which can be bound to  kuany set of the eight real modifiers (Shift, Lock, Control and Mod1-Mod5 as o moXreported in the keyboard state). This makes it easier for applications and keyboard laykee Yout designers to specify to the function a modifier key or data structure should fulfill #DinNwithout having to worry about which modifier is bound to a particular keysym. 8$LoUThe use of a single, server-driven mechanism for reporting changes to all data strucEtoWtures makes it easier for clients to stay synchronized. For example, the core protocol Roa\specifies a special interpretation for the modifier bound to the Num_Lock key. Whenre_foTever any keys or modifiers are rebound, every application has to check the keyboard chlcmapping to make sure that the binding for Num_Lock has not changed. If Num_Lock is yseRremapped when XKB is in use, the keyboard description is automatically updated to d moff , steHH Z  deyHHK&&to specifti&st[reflect the new binding, and clients are notified immediately and explicitly if there is a boDr change they need to consider. *$ sSThe separation of function from physical modifier bindings also makes it easier to Wtu7r Xspecify more clearly the intent of a binding. X servers do not all assign modifiers the spDin^same way for example, Num_Lock might be bound to Mod2 for one vendor and to QifVMod4 for another. This makes it cumbersome to automatically remap the keyboard to ^ tTa desired configuration without some kind of prior knowledge about the keyboard laykppUout and bindings. With XKB, applications simply use virtual modifiers to specify the xDObehavior they want, without regard for the actual physical bindings in effect. $SXKB puts most aspects of the keyboard under user or program control, so it is even DneHmore important to clearly and uniformly refer to modifiers by function. al) Modifier DefinitionsB d$\Use an jXKB modifier definition to specify the modifiers affected by any XKB control spYor data structure. An XKB modifier definition consists of a set of real modifiers, a set saWof virtual modifiers, and an effective mask. The mask is derived from the real and virto ifXtual modifiers and cannot be explicitly changed it contains all of the real modifiers a aspecified in the definition kplus any real modifiers that are bound to the virtual modifiinUers specified in the definition. For example, this modifier definition specifies the Dy Xnumeric lock modifier if the Num_Lock keysym is not bound to any real modifier: XK#UTUTds 7{ real_mods= None, virtual_mods= NumLock, mask= None } ven7dRIf we assign Mod2 to the Num_Lock key, the definition changes to: LURUTd7{ real_mods= None, virtual_mods= NumLock, mask= Mod2 } j`$niXUsing this kind of modifier definition makes it easy to specify the desired behavior in atmB Wsuch a way that XKB can automatically update all of the data structures that make up a virzd Ukeymap to reflect user or application specified changes in any one aspect of the keyuDanmap. e$ TThe use of modifier definitions also makes it possible to unambiguously specify the io rfreason that a modifier is of interest. On a system for which the Alt and Meta keysyms DisNare bound to the same modifier, the following definitions behave identically: UPUT$k3{ real_mods= None, virtual_mods= Alt, mask= Mod1 } UTUNUTDal4{ real_mods= None, virtual_mods= Meta, mask= Mod1 } $IfVIf we rebind one of the modifiers, the modifier definitions automatically reflect the Dalchange: e, ULUT$Lo3{ real_mods= None, virtual_mods= Alt, mask= Mod1 } kinUJUTDni4{ real_mods= None, virtual_mods= Meta, mask= Mod4 } at-$B UWithout the level of indirection provided by virtual modifier maps and modifier defia:Unitions, we would have no way to tell which of the two definitions is concerned with kGD2Alt and which is concerned with Meta. d mgugg -HH [  rt.HHx t$$eta vvg$l) t" Inactive Modifier Definitions $ntSSome XKB structures ignore modifier definitions in which the virtual modifiers are UN#D{ unbound. Consider this example: a,7UTUT$,if ( state matches { Shift } ) Do OneThing; fiCURUTDde3if ( state matches { Shift+NumLock } ) Do Another; alW$UT\If the NumLock virtual modifier is not bound to any real modifiers, these effective aldal[masks for these two cases are identical (i.e. they contain only Shift). When it is y vqpsXessential to distinguish between nOneThing and Another, XKB considers only those he~Ds @modifier definitions for which all virtual modifiers are bound. edd). Virtual Modifier Mapping $gu[XKB maintains a jvirtual modifier mapping, which lists the virtual modifiers associVated with each key. The real modifiers bound to a virtual modifier always include all Zof the modifiers bound to any of the keys that specify that virtual modifier in their virDtual modifier mapping. er $UT`For example, if Mod3 is bound to the Num_Lock key by the core protocol modifier atck_mapping, and the NumLock virtual modifier is bound to they Num_Lock key by the anth\virtual modifier mapping, Mod3 is added to the set of modifiers associated with the inD)NumLock virtual modifier. $ dTThe virtual modifier mapping is normally updated automatically whenever actions are *  d\assigned to keys (see section 12.2 for details) and few applications should need to M7D0change the virtual modifier mapping explicitly. piXUP UTls Global Keyboard Controls n$\The X Keyboard Extension supports a number of jglobal key controls, which affect the {heVway that XKB handles the keyboard as a whole. Many of these controls make the keytuPboard more accessible to the physically impaired and are based on the AccessDOS d Lkpackage. l)The RepeatKeys Control , a$VThe core protocol only allows control over whether or not the entire keyboard or indi mZvidual keys should autorepeat when held down. The RepeatKeys control extends this viYcapability by adding control over the delay until a key begins to repeat and the rate at macWwhich it repeats. RepeatKeys is also coupled with the core autorepeat control; anD s2changes to one are always reflected in the other. $in^The RepeatKeys control has two parameters. The jautorepeat delay specifies the  sWdelay between the initial press of an autorepeating key and the first generated repeat Vwa t]event in milliseconds. The jautorepeat interval specifies the delay between all subsee,D p/quent generated repeat events in milliseconds. d d hh . ysHH \  ptoHH~l **entire khi*d)alThe PerKeyRepeat Control n$ZWhen RepeatKeys are active, the PerKeyRepeat control specifies whether or #keRnot individual keys should autorepeat when held down. XKB provides the PerKey0 c_Repeat for convenience only, and it always parallels the lauto-repeats field of the cte=Mcore protocol GetKeyboardControl request changes to one are always tJDspreflected in the other. cl)n Detectable Autorepeat q$thTThe X server usually generates both press and release events whenever an autorepeatep~peNing key is held down. If an XKB-aware client enables the DetectableAutoreco\peat per-client option for a keyboard, the server sends that client a key release event  ^only when the key is kphysically released. For example, holding down a key to generate D7three characters without detectable autorepeat yields: n UTUTdar\Press c Release c Press c Release c Press c Release vidutBIf detectable autorepeat is enabled, the client instead receives: URUTdor8Press c Press c Press c Release pe$heZNote that only clients that request detectable autorepeat are affected; other clients conVtinue to receive both press and release events for autorepeating keys. Also note that thZsupport for detectable autorepeat is optional; servers are not required to support detectDinQable autorepeat, but they must correctly report whether or not it is supported. 2,ZSection 16.3.11 describes the XkbPerClientFlags request, which reports or ?onZchanges values for all of the per-client flags, and which lists the per-client flags that LDare supported. s wel)auThe SlowKeys Control Ts$s PSome users often bump keys accidentally while moving their hand or typing stick asVtoward the key they want. Usually, the keys that are bumped accidentally are hit only \for a very short period of time. The SlowKeys control helps filter these accidental reut[bumps by telling the server to wait a specified period, called the jSlowKeys acceptance rejut_delay, before delivering key events. If the key is released before this period elapses, no al;eqTkey events are generated. The user can then bump any number of keys on their way to rotQthe one they want without generating unwanted characters. Once they have reached DXthe key they want, they can then hold it long enough for SlowKeys to accept it. f$stdThe SlowKeys control has one parameter; the jslow keys delay specifies the length of KeDKtime, in milliseconds, that a key must be held down before it is accepted. or$VWhen SlowKeys are active, the X Keyboard Extension reports the initial press, Vacceptance, rejection or release of any key to interested clients using AccessXNo ta\tify events. The AccessXNotify event is described in more detail in section j,Lce 16.4. El)yThe BounceKeys Control entS$elOSome people with physical impairments accidentally bounce on a key when they rat`heYpress it. That is, they press it once, then accidentally press it again immediately. The md YBounceKeys control temporarily disables a key after it has been pressed, effectively hzD fdebouncing the keyboard. itd  cii /thHH ]  oKeHHdti**t a key i ow*$oraThe BounceKeys has a single parameter. The lBounceKeys delay specifies the period lDHof time, in milliseconds, that the key is disabled after it is pressed. s *$oZWhen BounceKeys are active, the server reports the acceptance or rejection of any 7ioWkey to interested clients by sending an AccessXNotify event. The AccessXNoSDLSoDtify event is described in more detail in section 16.4. n ]d)The StickyKeys Control is,k$e,USome people find it difficult or impossible to press two keys at once. The StickxlyXyKeys control makes it easier for them to type by changing the behavior of the modi tTfier keys. When StickyKeys are enabled, a modifier is latched when the user ]presses it just once, so the user can first press a modifier, release it, then press another *orWkey. For example, to get an exclamation point (!) on a PC-style keyboard, the user can he DGpress the Shift key, release it, then press the 1 key. pre$YBy default, StickyKeys also allows users to lock modifier keys without requiring nXspecial locking keys. The user can press a modifier twice in a row to lock it, and then esD(unlock it by pressing it one more time. or$ctTModifiers are automatically unlatched when the user presses a non-modifier key. For Sodijinstance, to enter the sequence Shift+Ctrl+Z the user could press and release the  emlShift key to latch the Shift modifier, then press and release the Ctrl key to latch the nas _Control modifier the Ctrl key is a modifier key, so pressing it does not unlatch mo$, ethe Shift modifier, but leaves both the Shift and Control modifiers latched, l1erXinstead. When the user presses the Z key, it will be as though the user pressed 1>sShift+Ctrl+Z simultaneously. The Z key is not a modifier key, so the Shift and KDinBControl modifiers are unlatched after the event is generated. `$WA locked a modifier remains in effect until the user unlocks it. For example, to enter utomd Pthe sequence (XKB) on a PC-style keyboard with a typical US/ASCII layout, the ezcuser could press and release the Shift key twice to lock the Shift modifier. Then,  when the user presses the 9, , x, k, b, , and 0 keys in sequence, it will generate eDy,e(XKB). To unlock the Shift modifier, the user can press and release the Shift key. hdd HTwo option flags modify the behavior of the StickyKeys control: e UTUT$`If the XkbAX_TwoKeys flag is set, XKB automatically turns StickyKeys off if the URUTslWuser presses two or more keys at once. This serves to automatically disable StickyKeys inUPUTDfiDwhen a user who does not require sticky keys is using the keyboard. A UNUT$reWThe XkbAX_LatchToLock controls the locking behavior of StickyKeys; the PthULUT oFStickyKeys control only locks modifiers as described above if the UJUTDld#XkbAX_LatchToLock flag is set. key d)The MouseKeys Control $WThe MouseKeys control lets a user control all the mouse functions from the key, $0\board. When MouseKeys are enabled, all keys with MouseKeys actions bound to 1DseRthem generate core pointer events instead of normal key press and release events. F$vicThe MouseKeys control has a single parameter, the lmouse keys default button, which t, StuVspecifies the core pointer button to be used by mouse keys actions that do not explic`Desitly specify a button. Std ewhjj 0ke iHH ^  eThHHuk&& behavio j yK&l)The MouseKeysAccel Control onl$asXIf the MouseKeysAccel control is enabled, the effect of a pointer motion action #MoYchanges as a key is held down. The jmouse keys delay specifies the amount of time 0s \between the initial key press and the first repeated motion event. The jmouse keys inter =jctZval specifies the amount of time between repeated mouse keys events. The jsteps to Jje [maximum acceleration field specifies the total number of events before the key is travousWtoVelling at maximum speed. The jmaximum acceleration field specifies the maximum dha[acceleration. The jcurve parameter controls the ramp used to reach maximum acceleraqDtion. , icWhen MouseKeys are active and a SA_MovePtr key action (see section 6.3) is vioYactivated, a pointer motion event is generated immediately. If MouseKeysAccel is  Xenabled and if acceleration is enabled for the key in question, a second event is generasn.\ated after jmouse keys delay milliseconds, and additional events are generated every inDjd Jmouse keys interval milliseconds for as long as the key is held down. d)ifRelative Pointer Motion we$ke]If the SA_MovePtr action specifies relative motion, events are generated as follows: tntVThe initial event always moves the cursor the distance specified in the action; after j Tsteps to maximum acceleration events have been generated, all subsequent events meam^move the pointer the distance specified in the action times the jmaximum acceleration. ctUEvents after the first but before maximum acceleration has been achieved are acceler""L p#ated according to the formula: diaV$KegWhere jaction_delta is the offset specified by the mouse keys action, jmax_accelq and ecocjas[steps_to_max are parameters to the MouseKeysAccel ctrl, and the curveFactor is arp"LinScomputed using the MouseKeysAccel jcurve parameter as follows:   hel$fWith the result that a jcurve of 0 causes the distance moved to increase linearly from " jtsVaction_delta to !, and the minimum legal jcurve of -1000 causes pegall events after the first move at jmax_accel. A negative jcurve causes an initial sharp rat eZincrease in acceleration which tapers off, while a positive curve yields a slower initial leVincrease in acceleration followed by a sharp increase as the number of pointer events D a9generated by the action approaches jsteps_to_max. md)Absolute Pointer Motion ti$e ZIf an SA_MovePtr action specifies an absolute position for one of the coordinates  aYbut still allows acceleration, all repeated events contain any absolute coordinates spec)Dngified in the action. Bl)pa"The AccessXKeys Control P$WiZIf AccessXKeys is enabled many controls can also be turned on or off from the key]D8board by entering the following standard key sequences: rI UTd\Holding down a shift key by itself for eight seconds toggles the SlowKeys control. ned patkk 1ea iHH _  sivHHr !leVin  k le!UTUT$e SPressing and releasing a shift key five times in a row without any intervening key hesURUTSevents and with less than 30 seconds delay between consecutive presses toggles the A_MUPUTDsp)state of the StickyKeys control. +UNUT$VSimultaneously operating two or more modifier keys deactivates the StickyKeys 7ULUTD control. K$ aRSome of these key sequences optionally generate audible feedback of the change in X bstate, as described in #section 4.9$, or cause XkbAccessXNotify events as described eLinin %section 16.4&. ~l)'The AccessXTimeout Control elf$ tXIn environments where computers are shared, features such as SlowKeys present a Wproblem: if SlowKeys is on, the keyboard can appear to be unresponsive because inWkeys have no effect unless they are held for a certain period of time. To help address fivitUthis problem, XKB provides an AccessXTimeout control to automatically change dcuXthe value of any global controls or AccessX options if the keyboard is idle for a speci Dfied period of time. i$ifSThe AccessXTimeout control has a number of parameters which affect the duration of Dth?the timeout and the features changed when the timeout expires. nge$\The lAccessX Timeout field specifies the number of seconds the keyboard must be idle deUbefore the global controls and AccessX options are modified. The lAccessX Options llbMask field specifies which values in the lAccessX Options field are to be changed, and +prYthe lAccessX Options Values field specifies the new values for those options. The 8lkeYAccessX Controls Mask field specifies which controls are to be changed in the global Etheset of lenabled controls, and the lAccessX Controls Values field specifies the new valuRD gues for those controls. opkl) (The AccessXFeedback Control y$ioWIf AccessXFeedback is enabled, special beep-codes indicate changes in keyboard hicio[controls (or some key events when SlowKeys or StickyKeys are active). Many ngeSbeep codes sound as multiple tones, but XKB reports a single XkbBellNotify beD(event for the entire sequence of tones. cc$odXAll feedback tones are governed by the AudibleBell control. Individual feedback s  O]tones can be explicitly enabled or disabled using the laccessX options mask or set to he\deactivate after an idle period using the laccessX timeout options mask. XKB defines ifBL a"the following feedback tones:) d lll 2trs HH `  HHth&&ll &c$RImplementations that cannot generate continuous tones may generate multiple beeps pXinstead of falling and rising tones; for example, they can generate a high-pitched beep a}DgeEfollowed by a low-pitched beep instead of a continuous falling tone. t$BeUIf the physical keyboard bell is not very capable, attempts to simulate a continuous feZtone with multiple bells can sound horrible. Set the DumbBellFB AccessX option to s Uinform the server that the keyboard bell is not very capable and that XKB should use heTonly simple bell combinations. Keyboard capabilities vary wildly, so the sounds gendeYerated for the individual bells when the DumbBellFB option is set are implementaDtion specific. d)#The Overlay1 and Overlay2 Controls th$SA keyboard overlay allows some subset of the keyboard to report alternate keycodes t ctiTwhen the overlay is enabled. For example a keyboard overlay can be used to simulate ismpVa numeric or editing keypad on keyboard that does not actually have one by generating !f Salternate of keycodes for some keys when the overlay is enabled. This technique is t v.DptMvery common on portable computers and embedded systems with small keyboards. sC$ tVXKB includes direct support for two keyboard overlays, using the Overlay1 and PnoZOverlay2 controls. When Overlay1 is enabled, all of the keys that are members ]tiVof the first keyboard overlay generate an alternate keycode. When Overlay2 is jbBUenabled, all of the keys that are members of the second keyboard overlay generate an wDThalternate keycode. y2 $VTo specify the overlay to which a key belongs and the alternate keycode it should genPerate when that overlay is enabled, assign it either the KB_Overlay1 or seLDKB_Overlay2 key behaviors, as described in *section 6.2+. t l)by7Boolean Controls and ,The EnabledControls Control or $ o[All of the controls described above, along with the AudibleBell control (described rs  msfin -section 10.2.) and the IgnoreGroupLock control (described in /section 2.3.10) 1`comprise the jboolean controls. In addition to any parameters listed in the descriptions kes Yof the individual controls, the boolean controls can be individually enabled or disabled D>by changing the value of the EnabledControls control. $ oYThe following knon-boolean controls are always active and cannot be changed using e#Wthe EnabledControls control or specified in any context that accepts only boolhen0 nahean controls: GroupsWrap (1section 2.2.12), EnabledControls, InternalMods s = ecn(3section 2.3.14), and IgnoreLockMods (5section 2.3.16) and PerKeyRepeat (7secJLontion 4.18) cl)th(9Automatic Reset of Boolean Controls s q$ms_The jauto-reset controls are a per-client value which consist of two masks that can con1~ _tain any of the boolean controls (see :section 4.11;). Whenever the client exits for any ion`reason, any boolean controls specified in the jauto-reset mask are set to the correspondd t mm 3tr. HH a  -olHHMlw++ changedm +`ing value from the jauto-reset values mask. This makes it possible for clients to clean eaDouCup after themselves automatically, even if abnormally terminated. rna*$WFor example, a client that replace the keyboard bell with some other audible cue might an7 cwant to turn off the AudibleBell control (<section 10.2=) to prevent the server from ConDUalso generating a sound and thus avoid cacophony. If the client were to exit without aQZresetting the AudibleBell control, the user would be left without any feedback at ^orZall. Setting AudibleBell in both the auto-reset mask and auto-reset values guarankD tItees that the audible bell will be turned back on when the client exits. mUT UTd. Key Event Processing Overview $ZThere are three steps to processing each key event in the X server, and at least three in omWthe client. This section describes each of these steps briefly; the following sections Dft#describe each step in more detail. abURUT$d.VFirst, the server applies global keyboard controls to determine whether the key event UPUT mYshould be processed immediately, deferred, or ignored. For example, the SlowKeys UNUTntYcontrol can cause a key event to be deferred until the slow keys delay has elapsed while ULUT t\the RepeatKeys control can cause multiple X events from a single physical key press d UJUTy Xif the key is held down for an extended period. The global keyboard controls affect all ma UHUTLvaFof the keys on the keyboard and are described in >section 4.0?. UFUT$he\Next, the server applies per-key behavior. Per key-behavior can be used to simulate or indie $UDUT pXcate some special kinds of key behavior. For example, keyboard overlays, in which a key cl0UBUT dYgenerates an alternate keycode under certain circumstances, can be implemented using per-iUTthVdepend on keyboard modifier or group state, though it might depend on global keyboard TU<UTLLcontrols. Per-key behaviors are described in detail in @section 6.2A. rr`U:UT$keZFinally, the server applies key actions. Logically, every keysym on the keyboard has some lU8UTroZaction associated with it. The key action tells the server what to do when an event which xU6UTalWyields the corresponding keysym is generated. Key actions might change or suppress the deU4UTtiWevent, generate some other event, or change some aspect of the server. Key actions are vioU2UTLim"described in Bsection 6.3C. $l VIf the global controls, per-key behavior and key action combine to cause a key event, D aCthe client which receives the event processes it in several steps. g pU0UT$WFirst the client extracts the effective keyboard group and a set of modifiers from the ot U.UTLthAstate field of the event. See Dsection 2.2.2E for details. dU,UT$d \Using the modifiers and effective keyboard group, the client selects a symbol from the list AU*UTLMof keysyms bound to the key. FSection 7.2G discusses symbol selection. eU(UT$U8]If necessary, the client transforms the symbol and resulting string using any modifiers that U&UTUTcare left over from the process of looking up a symbol. For example, if the Lock modifier deU$UTti^is left over, the resulting keysym is capitalized according to the capitalization rules speciU"UT debfied by the system. See Hsection 7.3I for a more detailed discussion of the transformations &U UTDtodefined by XKB. , 2UUT$ a\Finally, the client uses the keysym and remaining modifiers in an application-specific way. Fi>UUTraWFor example, applications based on the X toolkit might apply translations based on the AstJUUTDve8symbol and modifiers reported by the first three steps. d brdnn 4 aymHH b  feyHHY "sses symn e" UT UTd, #Key Event Processing in the Server res$g VThis section describes the steps involved in processing a key event within the server ,mpNwhen XKB is present. Key events can be generated due to keyboard activity and 9piQpassed to XKB by the DDX layer, or they can be synthesized by another extension, hFDsesuch as XTEST. a _d)usApplying Global Controls m$toSWhen the X Keyboard Extension receives a key event, it first checks the global key ainzn Vcontrols to decide whether to process the event immediately or at all. The global key DppMcontrols which might affect the event, in descending order of priority, are: rURUT$hr]If a key is pressed while the BounceKeys control is enabled, the extension generates UPUTb\the event only if the key is active. When a key is released, the server deactivates the key eUNUTDUTYand starts a Vbounce keys timer with an interval specified by the debounce delay. dULUT$ iRIf the bounce keys timer expires or if some other key is pressed before the timer UJUTntYexpires, the server reactivates the corresponding key and deactivates the timer. Neither DUHUTDcaDexpiration nor deactivation of a bounce keys timer causes an event. XTUFUT$ gIf the SlowKeys control is enabled, the extension sets a Vslow keys timer with an interentUDUT thVval specified by the slow keys delay, but does not process the key event immediately. UBUTD l.6The corresponding key release deactivates this timer. U@UT$ t,WIf the slow keys timer expires, the server generates a key press for the corresponding he &U>UTD  cBkey, sends an XkbAccessXNotify and deactivates the timer. 8U<UT$ e XThe extension processes key press events normally whether or not the RepeatKeys UTDU:UT b[control is active, but if RepeatKeys are enabled and per-key autorepeat is enabled RIfPU8UT im\for the event key, the extension processes key press events normally, but it also initiates s\U6UT th_an Vautorepeat timer with an interval specified by the autorepeat delay. The correspondtivhU4UTD ke(ing key release deactivates the timer. zU2UT$ lo\If the autorepeat timer expires, the server generates a key release and a key press for the UDU0UTD vaRcorresponding key and reschedules the timer according to the autorepeat interval. $ l.[Key events are processed by each global control in turn: if the BounceKeys control s t se`accepts a key event, SlowKeys considers it. Once SlowKeys allows or synthesizes esD ea6an event, the RepeatKeys control acts on it. l )s JKey Behavior t$ RUOnce an event is accepted by all of the controls or generated by a timer, the server e  aOchecks the per-key behavior of the corresponding key. This extension currently oceBL nt)defines the following key behaviors:K Td i aoo 5e toHH c  HHdezU2UTot $  sWThe X server uses key behavior to determine whether to process or filter out any given ng  s Ukey event; key behavior is independent of keyboard modifier or group state (each key oD bahas exactly one behavior. Bo$ olSKey behaviors can be used to simulate any of these types of keys or to indicate an S!  oQunmodifiable physical, electrical or software driver characteristic of a key. An . ]optional lpermanent flag can modify any of the supported behaviors and indicates that o;  aUbehavior describes an unalterable physical, electrical or software aspect of the keyiH siVboard. Permanent behaviors cannot be changed or set by the XkbSetMap request. U  \The lpermanent flag indicates a characteristic of the underlying system that XKB can b Ynot affect, so XKB treats all permanent behaviors as if they were KB_Default and soD s 9does not filter key events described in the table above. al )LKey Actions ev$ isUOnce the server has applied the global controls and per-key behavior and has decided x . bto process a key event, it applies jkey actions to determine the effects of the key on the  Uinternal state of the server. A key action consists of an operator and some optional kD "data. XKB supports actions which: U4UTd ny2change base, latched or locked modifiers or group U2UTd be=move the core pointer or simulate core pointer button events eU0UTd i)change most aspects of keyboard behavior vU.UTd ng terminate or suspend the server rU,UTd %send a message to interested clients dU*UTd issimulate events on other keys "$ ^Each key has an optional list of actions. If present, this list parallels the list of symbols / Yassociated with the key (i.e. it has one action per symbol associated with the key). For < Xkey press events, the server looks up the action to be applied from this list using the hI Tkey symbol mapping associated with the event key, just as a client looks up symbols efV n aas described in Msection 7.2N; if the event key does not have any actions, the server uses mcD Rthe SA_NoAction event for that key regardless of modifier or group state. x$ odSKey actions have essentially two halves; the effects on the server when the key is but UTUpressed and the effects when the key is released. The action applied for a key press d sepp 6 cenHH d  nthHHO tional l p.  f  Tevent determines the further actions, if any, that are applied to the corresponding he Yrelease event or to events that occur while the key is held down. Clients can change the " Pactions associated with a key while the key is down without changing the action oo/ Yapplied next time the key is released; subsequent press-release pairs will use the newly c<D usbound key action. Q$ oATMost actions directly change the state of the keyboard or server; some actions also od^  eTmodify other actions that occur simultaneously with them. Two actions occur simultaUTk efWneously if the keys which invoke the actions are both logically down at the same time, x Uregardless of the order in which they are pressed or delay between the activation of D  one and the other. $ TMost actions which affect keyboard modifier state accept a modifier definition (see t , cOsection 3.0P) named lmods and a boolean flag name luseModMap among their argu oc isWments. These two fields combine to specify the modifiers affected by the action as folhil wi`lows: If luseModMap is True, the action sets any modifiers bound by the modifier t  s Wmapping to the key that initiated the action; otherwise, the action sets the modifiers tio  tbspecified by lmods. For brevity in the text of the following definitions, we refer to this D eoMcombination of luseModMap and lmods as the action modifiers. eBl  t=The X Keyboard Extension supports the following actions:Q d i tqq 7etenHH e  nanHH|ns which q ond .Prr 8a olHH f  guHHiss combin rhe asd uMoss 9thacHH g  et HHmaitiated she  d  tt :n e HH h  tHHeoModMap ts  md brduu ;llinHH i  HHW  HH   ue $ cIf StickyKeys are enabled, all SA_SetMods and SA_SetGroup actions act like  TSA_LatchMods and SA_LatchGroup respectively. If the LatchToLock f  VAccessX option is set, either action behaves as if both the SA_ClearLocks and D "SA_LatchToLock flags are set. $ QActions which cause an event from another key or from a button on another device  Uimmediately generate the specified event. These actions do not consider the behavior D Zor actions (if any) that are bound to the key or button to which the event is redirected.  $ YCore events generated by server actions contain the keyboard state that was in effect at  Zthe time the key event occurred; the reported state does not reflect any changes in state $D Othat occur as a result of the actions bound to the key event that caused them. cIf9$  YEvents sent to clients that have not issued an XkbUseExtension request contain a F Mo^compatibility state in place of the actual XKB keyboard state. See Rsection 12.3S for a SD s +description of this compatibility mapping. SAd, Aatvv <. HH j  e fHHim ..ce v.d ) s-Delivering a Key or Button Event to a Client h$ SThe window and client that receive core protocol and input extension key or button ent# Tevents are determined using the focus policy, window hierarchy and passive grabs as ha0D  Tspecified by the core protocol and the input extension, with the following changes: leDUTUT$ stYA passive grab triggers if the modifier state specified in the grab matches the grab com PURUT bpatibility state (described in Tsection 2.4U). Clients can choose to use the XKB grab state \UPUT [instead by setting the GrabsUseXKBState per-client flag. This flag affects all pasShUNUT \sive grabs that are requested by the client which sets it but does not affect passive grabs tULUTD v"that are set by any other client. UJUT$ `The state field of events which trigger a passive grab reports the XKB or compatibility UHUT ve]grab state in effect at the time the grab is triggered; the state field of the corresponding eUFUT  iWrelease event reports the corresponding grab state in effect when the key or button is us UDUTD ra released. UBUT$ WIf the LookupStateWhenGrabbed per-client flag is set, all key or button events ingU@UT UTWthat occur while a keyboard or pointer grab is active contain the XKB or compatibility thU>UT UTYlookup state, depending on the value of the GrabsUseXKBState per-client flag. If eU<UT e RLookupStateWhenGrabbed is not set, they include the XKB or compatibility grab U:UTD tsstate, instead. UTU8UT$  gZOtherwise, the state field of events that do not trigger a passive grab report is derived U6UTL thSfrom the XKB effective modifiers and group, as described in Vsection 2.2.2W. trU4UT$ abZIf a key release event is the result of an autorepeating key that is being held down, and U2UT  t[the client to which the event is reported has requested detectable autorepeat (see Xseche U0UTL  s;tion 4.1.2Y), the event is not delivered to the client. ra0$ !UTUThe following section explains the intent of the XKB interactions with core protocol b=D !U@;grabs and the reason that the per-client flags are needed. isVd ")e *XKB Interactions With Core Protocol Grabs d$ #peSXKB provides the separate lookup and grab states to help work around some difficul q #heUties with the way the core protocol specifies passive grabs. Unfortunately, many clis~ #UTTents work around those problems differently, and the way that XKB handles grabs and ve #riTreports keyboard state can sometimes interact with those client workarounds in unexD #.pected and unpleasant ways. k$ $s STo provide more reasonable behavior for clients that are aware of XKB without caus[th $thVing problems for clients that are unaware of XKB, this extension provides two per-cliD $YOent flags that specify the way that XKB and the core protocol should interact. ng U.UT$ %heUThe largest problems arise from the fact that an XKB state field encodes an explicit U,UT %r-`keyboard group in bits 13-14 (as described in Zsection 2.2.2[), while pre-XKB clients use U*UT %prSone of the eight keyboard modifiers to select an alternate keyboard group. To make U(UT % wSexisting clients behave reasonably, XKB normally uses the compatibility grab state  U&UT % wWinstead of the XKB grab state to determine whether or not a passive grab is triggered. U$UT %keXXKB-aware clients can set the GrabsUseXKBState per-client flag to indicate that #$U"UTD %np6they are specifying passive grabs using an XKB state. 6U UT$ &foVSome toolkits start an active grab when a passive grab is triggered, in order to have BUUT &awXmore control over the conditions under which the grab is terminated. Unfortunately, the fyNUUT &anXfact that XKB reports a different state in events that trigger or terminate grabs means roZUUT & XXthat this grab simulation can fail to terminate the grab under some conditions. To work dfUUT &ctWaround this problem, XKB normally reports the grab state in all events whenever a grab rd d3  p.ww = % wHH k  oalHHnit"" % wof"UTUT &erWis active. Clients which do not use active grabs like this can set the LookupStatets URUT &abXWhenGrabbed per-client flag in order to receive the same state component whether or inUPUTD &innot a grab is active. 1UNUT$ 'lk\The GrabsUseXKBState per-client flag also applies to the state of events sent while aw=ULUT 'r [a grab is active. If it is set, events during a grab contain the XKB lookup or grab state; XfaIUJUTD 's Qby default, events during a grab contain the compatibility lookup or grab state. &]$ (abYThe state used to trigger a passive grab is controlled by the setting of the GrabsUs&j (prZeXKBState per-client flag at the time the grab is registered. Changing this flag does wD (#not affect existing passive grabs. %UH UTd )#Key Event Processing in the Client H$ *"]The XKB jclient map for a keyboard is the collection of information a client needs to i *vecinterpret key events that come from that keyboard. It contains a global list of jkey types, in *thedescribed in \section 7.2.1], and an array of jkey symbol maps, each of which describes k *XKTthe symbols bound to one particular key and the rules to be used to interpret those D *s symbols. id +)urNotation and Terminology l $ ,e;MXKB associates a two-dimensional array of symbols with each key. Symbols are i ,b aaddressed by keyboard group (see ^section 2.0_) and shift level, where level is defined as #D ,&in the ISO9995 standard: t8UFUT$ - fTLevel:One of several states (normally 2 or 3) which govern which graphic character noEUDUT -paPis produced when a graphic key is actuated. In certain cases the level may also RUBUTD -XKaffect function keys. g$ . cZNote that shift level is derived from the modifier state, but not necessarily in the same t .bo^way for all keys. For example, the Shift modifier selects shift level 2 on most keys,  .anabut for keypad keys the modifier bound to Num_Lock (i.e. the NumLock virtual modoD .la@ifier) also selects shift level 2.gray symbols on a key *"l /lWe use the notation GsnLsn to specify the position of a symbol on a key or in memory:` mb$ 0 SWThe gray characters indicate symbols that are implied or expected but are not actually nd &D 0 lengraved on the key. ;U5UT$ 1heUUnfortunately, the natural orientation of symbols on a key and the natural orienta)GU3UT 1Stion in memory are reversed from one another, so keyboard group refers to a column InSU1UT 1 lTon the key and a row in memory. Theres no real help for it, but we try to minimize t_U/UT 1 dUconfusion by using group and level (or shift level) to refer to symbols regardakU-UTD 1r less of context. id. skexx >bufoHH l  _ckHHLo--xr)-l 2)2.7aDetermining the KeySym Associated with a Key Event use$ 3nRTo look up the symbol associated with an XKB key event, we need to know the group #D 3 S/and shift level that correspond to the event. mpl8, 4t ]Group is reported in bits 13-14 of the state field of the key event, as described in bsectE 4raWtion 2.2.2c. The keyboard group reported in the event might be out-of-range for any meR 4frNparticular key because the number of groups can vary from key to key. The XKB _ 4 i`description of each key contains a jgroup info field which is interpreted identically to ul 4le^the global groups wrap control (see dsection 2.2.1e) and which specifies the interpretayD 4.3tion of groups that are out-of-range for that key. fo$ 5UOnce we have determined the group to be used for the event, we have to determine the  5-\shift level. The description of a key includes a jkey type for each group of symbols 3 5heWbound to the key. Given the modifiers from the key event, this key type yields a shift /anL 5 cVlevel and a set of leftover modifiers, as described in fsection 7.2.1g below. $ 6e YFinally, we can use the effective group and the shift level returned by the type of that p 6veTgroup to look up a symbol in a two-dimensional array of symbols associated with the umD 6vakey. l 7)B hKey Types  $ 8of`Each entry of a key types jmap field specifies the shift level that corresponds to some 4 8roTXKB modifier definition; any combination of modifiers that is not explicitly listed % 8 oSsomewhere in the map yields shift level one. Map entries which specify unbound virter2 8 b_tual modifiers (see isection 3.1.1j) are not considered; each entry contains an automatin o?D 8 Ucally-updated jactive field which indicates whether or not it should be used. eT$ 9omVEach key type includes a few fields that are derived from the contents of the map and a 9erSwhich report some commonly used values so they dont have to be constantly recalcu usn 9ou_lated. The jnumLevels field contains the highest shift level reported by any of its map ol { 9alZentries; XKB uses lnumLevels to insure that the array of symbols bound to a key is  9Ularge enough (the number of levels reported by a key type is also referred to as its a 9om\width). The jmodifiers field reports all real modifiers considered by any of the map pl 9hentries for the type. Both lmodifiersn and lnumLevels are updated automatically by XKB D 9tu'and neither can be changed explicitly. are, :aclAny modifiers specified in lmodifiers are normally jconsumed (see ksection 7.3l), which er :beWmeans that they are not considered during any of the later stages of event processing. he  :p _For those rare occasions that a modifier kshould be considered despite having been used tly :ito look up a symbol, key types include an optional jpreserve field. If a lpreserve list is p : 9Wpresent, each entry corresponds to one of the key types map entries and lists the modkey : 9`ifiers that should knot be consumed if the matching map entry is used to determine shift D :h)level. mo'$ ;reTFor example, the following key type implements caps lock as defined by the core profo4D ;l2tocol (using the second symbol bound to the key): HUTUT$ <XKtype ALPHABETIC { tuTURUT <bemodifiers = Shift+Lock; `UPUT <Anmap[Shift]= Level2; nlUNUT < amap[Lock]= Level2; edxULUT <iomap[Shift+Lock]= Level2; UJUTD <s }; thedE rtayy ?e HH m  tt HHq,,having by,$ =upVThe problem with this kind of definition is that we could assign completely unrelated  =Qsymbols to the two shift levels, and Caps Lock would choose the second symbol. l"D =VAnother definition for alphabetic keys uses system routines to capitalize the keysym: 6UTUT$ >e type ALPHABETIC { :BURUT >modifiers= Shift; exNUPUT >ngmap[Shift]= Level2; pZUNUTD >by}; corn$ ?UWhen caps lock is applied using this definition, we take the symbol from shift level { ?URYone and capitalize it using system-specific capitalization rules. If shift and caps lock N ?mZare both set, we take the symbol from shift level two and try to capitalize it, which usuD ?ally has no effect. $ @yRThe following key type implements shift-cancels-caps lock behavior for alphabetic D @keys: ULUT$ Atype ALPHABETIC { UJUT Aprmodifiers = Shift+Lock; iUHUT Acomap[Shift] = Level2; UFUT Apreserve[Lock]= Lock; twoUDUTD A }; Loc$ Be WConsider the four possible states that can affect alphabetic keys: no modifiers, shift rou Be Ualone, caps lock alone or shift and caps lock together. The map contains no explicit s* BUT\entry for None (no modifiers), so if no modifiers are set, any group with this type s 7 Bin_returns the first keysym. The map entry for Shift reports Level2, so any group it D Bfi^with this type returns the second symbol when Shift is set. There is no map entry for Q BlebLock alone, but the type specifies that the Lock modifier should be preserved in this ^ Bowacase, so Lock alone returns the first symbol in the group but first applies the capitali k BYzation transformation, yielding the capital form of the symbol. In the final case, there ox Bve^is no map entry for Shift+Lock, so it returns the first symbol in the group; there is  B fZno preserve entry, so the Lock modifier is consumed and the symbol is not capitalD Bloized. l C) lmKey Symbol Map co$ D s`The jkey symbol map for a key contains all of the information that a client needs to pro wD DDcess events generated by that key. Each key symbol mapping reports: tUBUTd EveFThe number of groups of symbols bound to the key (VnumGroups). U@UTd Fn :The treatment of out-of-range groups (VgroupInfo). U>UTd G a_The index of the key type to for each \possible group (Vkt_index[MaxKbdGroups]). U<UTd H LThe width of the widest type associated with the key (VgroupsWidth). ca U:UTd IYThe two-dimensional (numGroups c groupsWidth) array of symbols bound to the key. ,$ JZIt is legal for a key to have zero groups, in which case it also has zero symbols and all , J]events from that key yield NoSymbol. The array of key types is of fixed width and is 9 JRlarge enough to hold key types for the maximum legal number of groups (MaxKbdF Jap\Groups, currently four); if a key has fewer than MaxKbdGroups groups, the extra S JraWkey types are reported but ignored. The lgroupsWidth field cannot be explicitly rou` Jd Uchanged; it is updated automatically whenever the symbols or set of types bound to a umD Jkey are changed. Gd_  \zz @_iexHH n  ThHHzty$$ey (V z)$$ KThXIf, when looking up a symbol, the effective keyboard group is out-of-range for the key,  KIt^the jgroupInfo field of the key symbol map specifies the rules for determining the cor"D Kts#responding legal group as follows: . T6UTUT$ LpebIf the RedirectIntoRange flag is set, the two least significant bits of UgroupInfo BURUT Ls Vspecify the index of a group to which all illegal groups correspond. If the specified NUPUTD L Fgroup is also out of range, all illegal groups map to Group1. ZUNUT$ Mps[If ClampIntoRange flag is set, out-of-range groups correspond to the nearest legal calfULUT MmbWgroup. Effective groups larger than the highest supported group are mapped to the highrUJUT Maest supported group; effective groups less than Group1 are mapped to Group1. For ~UHUT MZexample, a key with two groups of symbols uses Group2 type and symbols if the gloUFUTD Miv@bal effective group is either Group3 or Group4. ItUDUT$ N 1ZIf neither flag is set, group is wrapped into range using integer modulus. For example, a UBUT NegXkey with two groups of symbols for which groups wrap uses Group1 symbols if the , U@UT Nifdglobal effective group is Group3 or Group2 symbols if the global effective group is l U>UTD N I Group4. d $ O UThe client map contains an array of key symbol mappings, with one entry for each key M OInNbetween the minimum and maximum legal keycodes, inclusive. All keycodes which  OmbTfall in that range have key symbol mappings, whether or not any key actually yields ghD O M that code. porl P)ve8nTransforming the KeySym Associated with a Key Event $ QUAny modifiers that were not used to look up the keysym, or which were explicitly pres) QUTTserved, might indicate further transformations to be performed on the keysym or the UT6 Qei`character string that is derived from it. For example, If the Lock modifier is set, the NC Q gTsymbol and corresponding string should be capitalized according to the locale-sensiP Qff_tive capitalization rules specified by the system. If the Control modifier is set, the UT] Qp4Ukeysym is not affected, but the corresponding character should be converted to a conwjL Qea3trol character as described in oAppendix Ap. ma$ ResWThis extension specifies the transformations to be applied when the Control or mapBL RnoXLock modifiers are active but were not used to determine the keysym to be used:q Tr&d SSy$ ^ bWThe core protocol does not provide any information to clients other than that actually cifK ^otWused to interpret events. This makes it difficult to write a client which presents the mboX ^icSkeyboard to a user in an easy-to-understand way. Such applications have to examine rd e ^Rthe vendor string and keycodes to determine the type of keyboard connected to the r ^veRserver and have to examine keysyms and modifier mappings to determine the effects  ^beiof most modifiers (the Shift, Lock and Control modifiers are defined by the core D ^@protocol but no semantics are implied for any other modifiers). p$ _ oRThis extension provides such applications with symbolic names for most components D _usTof the keyboard extension and a description of the physical layout of the keyboard. a$ `UTZThe jkeycodes name describes the range and meaning of the keycodes returned by the  `o bkeyboard in question; the jkeyboard jgeometry name describes the physical location,  ` cQsize and shape of the various keys on the keyboard. As an example to distinguish u `h Qbetween these two names, consider function keys on PC-compatible keyboards. Funcs `tyQtion keys are sometimes above the main keyboard and sometimes to the left of the y `ma`main keyboard, but the same keycode is used for the key that is logically F1 regardless ck `olTof physical position. Thus, all PC-compatible keyboards might share a keycodes name s D `y but different geometry names. 3URUT$ aenOThe keycodes name is intended to be a very general description of the keycodes ?UPUT aeyTreturned by a keyboard; A single keycodes name might cover keyboards with differing KUNUT akeRnumbers of keys provided that the keys that all keys have the same semantics when WULUT akeLpresent. For example, 101 and 102 key PC keyboards might use the same name. hycUJUT aRApplications can use the keyboard geometry to determine which subset of the named oUHUTD akeyboard type is in use. h$ bsiYThe jsymbols name identifies the symbols bound to the keys. The symbols name is a e binUhuman or application-readable description of the intended locale or usage of the keye bse[board with these symbols. The jphysical symbols name describes the symbols actually iti bomTengraved on the keyboard, which might be different than the symbols currently being omD bUTused. $ c n]The jtypes name provides some information about the set of key types that can be asson cA [ciated with the keyboard keys. The jcompat name provides some information about the keyD ce Irules used to bind actions to keys changed using core protocol requests. n$ d1 |The lcompat, ltypes, lkeycodes, lsymbols and lgeometry names typically correspond to the in dthOkeyboard components from which the current keyboard description was assembled.  d iTThese components are stored individually in the servers database of keyboard compohu" d*~Ynents, described in |section 13.0}, and can be combined to assemble a complete key /D d. board description. olsD$ es REach key has a four-byte symbolic name. The key name links keys with similar funcQ ethations or in similar positions on keyboards that report different scan codes. jKey aliases e^ eorXallow the keyboard layout designer to assign multiple names to a single key, to make it kekD ejQeasier to refer to keys using either their position kor their function. d fns:For example, consider the common keyboard customizations: d ,l}} C aHH q  o tHH d**s from w}nt*UTUTd gas@Set the key to the left of the letter a to be a control key. viURUTd herDChange the caps lock key, wherever it might be, to a control key. i'$ iYIf we specify key names by position, the first customization is simple but the second is .4 i eTimpossible; if we specify key names by function, the second customization is simple cA ithZbut the first is impossible. Using key aliases, we can specify both function and position ND iEfor troublesome keys, and both customizations are straightforward. oc$ jmaQKey aliases can be specified both in the symbolic names component and in the keyp jnc`board geometry (see ~section 11.0). Both sets of aliases are always valid, but key alias } jTdefinitions in the keyboard geometry have priority; if both symbolic names and geom jUetry include aliases, applications should consider the definitions from the geometry sD jthDbefore considering the definitions from the symbolic names section. Ch$ kkRXKB provides symbolic names for each of the four keyboard groups, sixteen virtual  kioWmodifiers, thirty-two keyboard indicators, and up to MaxRadioGroups (32) radio ifD kmegroups. io$ lomUXKB allows keyboard layout designers or editors to assign names to each key type and s lotWto each of the levels in a key type. For example, the second position on an alphabetic ion larSkey might be called the Caps level while the second position on a numeric keypad ponD l*key might be called the Num Lock level. #UP UTd m).Keyboard Indicators ar9$ nt UAlthough the core X protocol supports thirty-two LEDs on a keyboard, it does not profF nesVvide any way to link the state of the LEDs and the logical state of the keyboard. For S nthPexample, most keyboards have a Caps Lock LED, but X does not provide any stanol` nChPdard way to make the LED automatically follow the logical state of the modifier oumD nl $bound to the Caps Lock key. y-$ oat]The core protocol also gives no way to determine which bits in the lled_mask field of  owsSthe keyboard state map to the particular LEDs on the keyboard. For example, X does  oof`not provide a method for a client to determine which bit to set in the lled_mask to turn arD oleKon the Scroll Lock LED, or even if the keyboard has a Scroll Lock LED. $ pt PMost X servers implement some kind of automatic behavior for one or more of the  pouVkeyboard LEDs, but the details of that automatic behavior are implementation-specific D p a0and can be difficult or impossible to control. al$ qoaRXKB provides indicator names and programmable indicators to help solve these prob qnyRlems. Using XKB, clients can determine the names of the various indicators, deter qodUmine and control the way that the individual indicators should be updated to reflect t ql Tkeyboard changes, and determine which of the 32 keyboard indicators reported by the ! qoaRprotocol are actually present on the keyboard. Clients may also request immediate . qprUnotification of changes to the state of any subset of the keyboard indicators, which r;D q oFmakes it straightforward to provide an on-screen virtual LED panel. Td r)$Global Information About Indicators sbd stiNXKB provides only two pieces of information about the indicators as a group. w$ tut]The lphysical indicators mask reports which of the 32 logical keyboard indicators sups talTported by the core protocol and XKB corresponds to some actual indicator on the key sd  in~~ DneheHH r  [HH cindividu~sh t tWboard itself. Because the physical indicators mask describes a physical characteristic re tVof the keyboard, it cannot be directly changed under program control. It is possible, " tWhowever, for the set of physical indicators to be change if a new keyboard is attached rs,/ tPor if a completely new keyboard description is loaded by the XkbGetKeyboard<L tGl2ByName request (see section 16.3.12). Q$ u o]The lindicator state mask reports the current state of the 32 logical keyboard indicah^ ubtors. This field and the core protocol indicator state (as reported by the lled-mask field kD uXKOof the core protocol GetKeyboardControl request) are always identical. d v)Per-Indicator Information $ wREach of the thirty-two keyboard indicators has a symbolic name, of type ATOM. The  wPXkbGetNames request reports the symbolic names for all keyboard components, ib wacXincluding the indicators. Use the XkbSetNames request to change symbolic names. grL wpo7Both requests are described in section 16.3.9. sicl x)e Indicator Maps ard$ y^XKB also provides an jindicator map for each of the thirty-two keyboard indicators; an D y tindicator map specifies: eUTUTd z.1NThe conditions under which the keyboard modifier state affects the indicator.  URUTd { lKThe conditions under which the keyboard group state affects the indicator. rotUPUTd |teTThe conditions under which the state of the boolean controls affects the indicator. %UNUT$ }roZThe effect (if any) of attempts to explicitly change the state of the indicator using the 1ULUTD }Ea2core protocol SetKeyboardControl request. E$ ~ATfIf IM_NoAutomatic is set in the lflags field of an indicator map, that indicator never R ~Wchanges in response to changes in keyboard state or controls, regardless of the values c n_ ~ffor the other fields of the indicator map. If IM_NoAutomatic is not set in lflags, the l ~Tother fields of the indicator map specify the automatic changes to the indicator in rdyD ~7response to changes in the keyboard state or controls. d z$ nsaThe lwhich_groups and the lgroups fields of an indicator map determine how the keys ey_board group state affects the corresponding indicator. The lwhich_groups field controls staBL coZthe interpretation of lgroups and may contain any one of the following values: z$  sbThe lwhich_mods and lmods fields of an indicator map determine how the state of the   ~Xkeyboard modifiers affect the corresponding indicator. The lmods field is an XKB t d  ein EybrdHH s  s nHHgfoe indica lbmodifier definition, as described in section 3.1, which can specify both real and virtual   iUmodifiers. The mods field takes effect even if some or all of the virtual indicators "D Th(specified in lmods are unbound. 7$ icTThe lwhich_mods field can specify one or more components of the XKB keyboard rrD r.Zstate. The corresponding indicator is lit whenever any of the real modifiers specified in Q  cfthe lmask field of the lmods modifier definition are also set in any of the current key^ bboard state components specified by the lwhich_mods. The lwhich_mods field may have kBL he-any combination of the following values: , `The lcontrols field specifies a subset of the boolean keyboard controls (see section  c4.11). The indicator is lit whenever any of the boolean controls specified in lcontrols , aD s are enabled. $ boVAn indicator is lit whenever any of the conditions specified by its indicator map are   e Rmet, unless overridden by the IM_NoAutomatic flag (described above) or an -D ic-explicit indicator change (described below). oBd of*Effects of Explicit Changes on Indicators O$ di[If the IM_NoExplicit flag is set in an indicator map, attempts to change the state \D f of the indicator are ignored. q$ in[If both IM_NoExplicit and IM_NoAutomatic are both absent from an indicator ch_~ whSmap, requests to change the state of the indicator are honored but might be immedilue Vately superseded by automatic changes to the indicator state which reflect changes to D keyboard state or controls. ).$ li]If the IM_LEDDrivesKB flag is set and the IM_NoExplicit flag is not, the keyr Zboard state and controls are changed to reflect the other fields of the indicator map, as  Wdescribed in the remainder of this section. Attempts to explicitly change the value of an  ic[an indicator for which IM_LEDDrivesKB is absent or for which IM_NoExplicit ngeD 5is present do not affect keyboard state or controls. s$  mVThe effect on group state of changing an explicit indicator which drives the keyboard BL inWis determined by the value of lwhich_groups and lgroups, as follows: tord cng ForreHH t  HH bhe indic ches$  TThe effect on the keyboard modifiers of changing an explicit indicator which drives   e dthe keyboard is determined by the values that are set in of lwhich_mods and lmods, as tBL r follows: n$ VLighting an explicit indicator which drives the keyboard also enables all of the bool n aean controls specified in the lcontrols field of its indicator map. Explicitly extinguishoD Zing such an indicator disables all of the boolean controls specified in lcontrols. $ ouUThe effects of changing an indicator which drives the keyboard are cumulative; it is n  tVpossible for a single change to affect keyboard group, modifiers and controls simultaD  neously. g$ [If an indicator for which both the IM_LEDDrivesKB and IM_NoAutomatic flags  icSare specified is changed, the keyboard changes specified above are applied and the fie ex\indicator is changed to reflect the state that was explicitly requested. The indicator will tD >remain in the new state until it is explicitly changed again. 0$ ZIf the IM_NoAutomatic flag is not set for an indicator which drives the keyboard, = Ythe changes specified above are applied and the state of the indicator is set to the valiJ \ues specified by the indicator map. Note that it is possible in this case for the indicator coW Xto end up in a different state than the one that was explicitly requested. For example, e;d jan indicator with lwhich_mods of IM_UseBase and lmods of Shift is not extinq  g`guished if one of the Shift keys is physically depressed when the request to extinguish at~D the indicator is processed. d d ave GHH u  cthHHci**ator wil!* UT UTd w Keyboard Bells ex$ gaUThe core protocol provides requests to control the pitch, volume and duration of the r,D ke;keyboard bell and a request to explicitly sound the bell. apA$ e WThe X Keyboard Extension allows clients to disable the audible bell, attach a symbolic mapND poKname to a bell request or receive an event when the keyboard bell is rung. difgd )thClient Notification of Bells su$ e;YClients can ask to receive XkbBellNotify event when a bell is requested by a clid Went or generated by the server. Bells can be sounded due to core protocol Bell lly e Vrequests, X Input Extension DeviceBell requests, X Keyboard Extension Xkb XBell requests or for reasons internal to the server such as the XKB AccessXFeed cD back control. $ il\Bell events caused by the XkbBell request or by the AccessXFeedback control p eqRinclude an optional window and symbolic name for the bell. If present, the window  esSmakes it possible to provide some kind of visual indication of which window caused low leSthe sound. The symbolic name can report some information about the reason the bell or D heXwas generated and makes it possible to generate a distinct sound for each type of bell.  l )nt%Disabling Server Generated Bells $ VThe global AudibleBell boolean control for a keyboard indicates whether bells & coWsent to that device should normally cause the server to generate a sound. Applications ell3 eyUwhich provide sound effects for the various named bells will typically disable the @D  a@server generation of bells to avoid burying the user in sounds. . U$ il_When the AudibleBell control is active, all bells caused by core protocol Bell b in[and X Input Extension DeviceBell requests cause the server to generate a sound, as  o siWdo all bells generated by the XKB AccessXFeedback control. Bells requested via le| ymYthe XkbBell request normally cause a server-generated sound, but clients can ask aD ke3the server not to sound the default keyboard bell. ype$ XWhen the AudibleBell control is disabled, the server generates a sound only for ud an]bells that are generated using the XkbBell request and which specify forced delivery dD e of the bell. ad )atGenerating Named Bells ey$ ou[The XkbBell request allows clients to specify a symbolic name which is reported in ver ls[the bell events they cause. Bells generated by the AccessXFeedback control of this ntr beWextension also include a symbolic name, but all kinds of feedback cause a single event D ue$even if they sound multiple tones. nd$ PThe X server is permitted to use symbolic bell names (when present) to generate r(D Asounds other than simple tones, but it is not required to do so. e=,  b\Aside from those used by the XKB AccessXFeedback control (see section 4.9), peJD `this extension does not specify bell names or their interpretation. cd )s Generating Optional Named Bells kbq$ ndTUnder some circumstances, some kind of quiet audio feedback is useful, but a normal at~  BZkeyboard bell is not. For example, a quiet launch effect can be helpful to let the user D epVknow that an application has been started, but a loud bell would simply be annoying. dJ  HsoncHH v  bk HH}--en if th  "pl-$  ]To simplify generation of these kinds of effects, the XkbBell request allows clients  dsWto specify event only bells. The X server never generates a normal keyboard bell for rom"D  XYevent only bells, regardless of the setting of the global AudibleBell control. e7$ oeWIf the X server generates different sounds depending bell name, it is permitted to gen)s D naUerate a sound even for event only bells. This field is intended simply to weed out oQD l,normal keyboard bells. jd ) b Forcing a Server Generated Bell lax$ e ZOccasionally, it is useful to force the server to generate a sound. For example, a client   sWcould filter server bells, generating sound effects for some but sounding the normal  ]server bell for others. Such a client needs a way to tell the server that the requested bell D -Sshould be generated regardless of the setting of the AudibleBell control. ll$  c\To simplify this process, clients which call the XkbBell request can specify that a rm orXbell is forced. A forced bell always causes a server generated sound and never causes a Au roTXkbBellNotify event. Because forced bells do not cause bell notify events, they meD to2have no associated symbolic name or event window. UT UTl s.Keyboard Geometry $  oOThe XKB description of a keyboard includes an optional keyboard geometry which erv laSdescribes the physical appearance of the keyboard. Keyboard geometry describes the und+ liTshape, location and color of all keyboard keys or other visible keyboard components me8 noVsuch as indicators. The information contained in a keyboard geometry is sufficient to ED e Rallow a client program to draw an accurate two-dimensional image of the keyboard. Zd Be?The components of the keyboard geometry include the following: s, gURUTd  t=A Vsymbolic name to help users identify the keyboard. sUPUT", edbThe Vwidth and Vheight of the keyboard, in . For non-rectangular keyboards, the UNUT enUwidth and height describe the smallest bounding-box that encloses the outline of the aULUTD ym keyboard. UJUT$ UTlA list of up to MaxColors (32) Vcolor names. A color name is a string whose interpretiUHUT etVtation is not specified by XKB. Other geometry components refer to colors using their UFUTD crindices in this list. UDUT$ oc_TheV base color of the keyboard is the predominant color on the keyboard and is used as VsuUBUTD ThNthe default color for any components whose color is not explicitly specified. U@UTd nt[The Vlabel color is the color used to draw the labels on most of the keyboard keys. coU>UT$ yb^The Vlabel font is a string which describes the font used to draw labels on most keys; U<UTD eyUTD r :nate; all keys in a vertical row share a left coordinate. U<UT$  tsA key description consists of a key Uname, a Ushape, a key Ucolor, and a Ugap. The key dis U:UT U Wname should correspond to one of the keys named in the keyboard names description, U8UT Sehthe \shape specifies the appearance of the key, and the key Ucolor specifies the color of or!U6UT Tthe key (not the label on the key). Keys are normally drawn immediately adjacent to th-U4UT `one another from left-to-right (or top-to-bottom) within a row. The Ugap field specifies UD9U2UTD A 0the distance between a key and its predecessor. llKU0UT$ jaWAn optional list of doodads; any type of doodad can be enclosed within a section. Posi seWU.UT  r\tion and angle of rotation are relative to the origin and angle of rotation of the sections izcU,UT co[that contain them. Priority is relative to the other components of the section, not to the e. oU*UTD  tkeyboard as a whole. sd , k JUpHH x   sHHe  keyboar$pt UTUT$ Se_An optional list of Voverlay keys. Each overlay key definition indicates a key that can colURUT _yield multiple scan codes and consists of a field named Vunder, which specifies the pri-U4UPUT onZmary name of the key and a field named Vover, which specifies the name for the key +UNUT  ]when the overlay keycode is selected. The key specified in Vunder must be a member of o7ULUT e [the section that contains the overlay key definition, while the key specified in over must otaCUJUTD tonot. i[d )otDoodads hei$ UTRDoodads can be global to the keyboard or part of a section. Doodads have symbolic v heUnames of arbitrary length. The only doodad name whose interpretation is specified by D QXKB is Edges, which describes the outline of the entire keyboard, if present. $ fAll doodads report their origin in fields named jleft and jtop. XKB supports five kinds D ey of doodads: diUHUT$ an]An Vindicator doodad describes one of the physical keyboard indicators. Indicator doo,UFUT hecdads specify the shape of the indicator, the indicator color when it is lit (Von_color) and e nUDUTD UN9the indicator color when it is dark (Voff_color). UBUT$ V[An Voutline doodad describes some aspect of the keyboard to be drawn as one or more ey U@UT thUhollow, closed polygons. Outline doodads specify the shape, color, and angle of rotadU>UTD  U2UTD  s%tion of the doodad about its origin. iJU0UT$ n \A Vlogo doodad is a catch-all, which describes some other visible element of the key(VU.UT  Rboard. A logo doodad is essentially an outline doodad with an additional symbolic bU,UTD ne-name that describes the element to be drawn. dtU*UT$  dRIf a keyboard display program recognizes the symbolic name, it can draw something U(UT  aTappropriate within the bounding region of the shape specified in the doodad. If the sU&UT keVsymbolic name does not describe a recognizable image, it should draw an outline using U$UTD , 5the specified shape, outline, and angle of rotation. U"UTd n EThe XKB extension does not specify the interpretation of logo names. d  yb K U4HH y  tndHH$wigle of r  %d )adKeyboard Geometry Example "l -Consider the following example keyboard: $$  eWThis keyboard has six sections: The left and right function sections (at the very top) doo$ onWeach have one horizontal row with eight keys. The left and right alphanumeric sections  $ boZ(the large sections in the middle) each have six vertical rows, with four or five keys in $ inXeach row. The left and right editing sections each have three vertical rows with one to sy#$ otWthree keys per row; the left editing section is rotated 20 clockwise about its origin sp0$D liAwhile the right editing section is rotated 20 counterclockwise. E$$ heTThis keyboard has four global doodads: Three small, round indicators and a rectanguR$  Wlar logo. The program which generated this image did not recognize the logo, so it dis_$D  9plays an outline with an appropriate shape in its place. t$$ UThis keyboard has seven shapes: All of the keys in the two function sections use the o$ nsTFKEY shape. Most of the keys in the alphanumeric sections, as well as four of the h$  rUkeys in each of the editing sections use the NORM shape. The keys in the first colt$ inSumn of the left alphanumeric section and the last column of the right alphanumeric in$ ftSsection all use the WIDE shape. Two keys in each of the editing sections use the  $ erRTALL shape. The LED shape describes the three small, round indicators between $ e Tthe function and alphabetic sections. The LOGO shape describes the keyboard logo, k$D loGand the EDGE shape describes the outline of the keyboard as a whole.  $$ e YThe keyboard itself is white, as are all of the keys except for the eight keys that make $ liXup the home row, which use the grey20 color. It isnt really visible in this picture, sh$ eyWbut the three indicators have an on color of green and are green30 when they are eys $ icXturned off. The keys in the alphanumeric and editing sections all have a (vertical) gap io$D shPof 0.5mm; the keys in the two function sections have a (horizontal) gap of 3mm. s-$$ t WMany of the keys in the right alphanumeric section, and the rightmost key in the right e. :$ f Tediting section are drawn with two names in this image. Those are overlay keys; the scG$ alUbottom key name is the normal name while the overlay name is printed at the top. For T$ esVexample, the right editing section has a single overlay key entry, which specifies an a$ lrdlunder name of  and an lover name of , which indicates that the key in t n$ $_question is usually the shift key, but can behave like the 0 key on the numeric keypad pic{$D when an overlay is active. atod rn3 LHH z  nerHHis ##p io$,&sh# UT UTd e /Interactions Between XKB and the Core Protocol 3mm$  TIn addition to providing a number of new requests, XKB replaces or extends existing r, Xcore protocol requests and events. Some aspects of the this extension, such as the abilth9  Yity to lock any key or modifier, are visible even to clients that are unaware of the XKB F esWextension. Other capabilities, such as control of keysym selection on a per-key basis, a$SD un*are available only to XKB-aware clients. h$ <PThough they do not have access to some advanced extension capabilities, the XKB llu utRextension includes compatibility mechanisms to ensure that non-XKB clients behave D ctVas expected and operate at least as well with an XKB-capable server as they do today. $ SThere are a few significant areas in which XKB state and mapping differences might D ##be visible to XKB-unaware clients: tweURUT$ e TThe core protocol uses a modifier to choose between two keyboard groups, while this KBUPUTD ds:extension provides explicit support for multiple groups. UNUT$ ctRThe order of the symbols associated with any given key by XKB might not match the ULUTD  v(ordering demanded by the core protocol. t$ TTo minimize problems that might result from these differences, XKB includes ways to keD Pspecify the correspondence between core protocol and XKB modifiers and symbols. gh$ acUThis section describes the differences between the core X protocols notion of a key  D li?board mapping and XKB and explains the ways they can interact. D 9l )anGroup Compatibility Map h G, ve]As described in section 2.0, the current keyboard group is reported to XKB-aware cliaT ncXents in bits 13-14 of the state field of many core protocol events. XKB-unaware clients e a l Ucannot interpret those bits, but they might use a keyboard modifier to implement supsn esRport for a single keyboard group. To ensure that pre-XKB clients continue to work {  aLwhen XKB is present, XKB makes it possible to map an XKB state field, which d  olUincludes both keyboard group and modifier state into a pre-XKB state field which con,D  ttains only modifiers. $ esWA keyboard description includes one jgroup compatibility map per keyboard group s s he\(four in all). Each such map is a modifier definition (i.e. specifies both real and virtual g  nsXmodifiers) which specifies the modifiers to be set in the compatibility states when the  esRcorresponding keyboard group is active. Here are a few examples to illustrate the BL  0application of the group compatibility map: y K$ tsXNote that non-XKB clients (i.e. clients that are linked with a version of the X library usX ie]that does not support XKB) cannot detect the fact that Group4 is active in this examXeD e [ple because the group compatibility map for Group4 does not specify any modifiers. fied bh  Mr atHH {  HH~ly'$ es'es'l )ib,Setting a Passive Grab for an XKB State $  a_The fact that the lstate field of an event might look different when XKB is present can  # hiWcause problems with passive grabs. Existing clients specify the modifiers they wish to  0 g Wgrab using the rules defined by the core protocol, which use a normal modifier to indi0ap= roUcate keyboard group. If we used an XKB state field, the high bits of the state field tJ wiXwould be non-zero whenever the keyboard was in any group other than Group1, and teWD Bnone of the passive grabs set by clients could ever be triggered. l$ ibSTo avoid this behavior, the X server normally uses the compatibility grab state to y bRdecide whether or not to activate a passive grab, even for XKB-aware clients. The  Rgroup compatibility map attempts to encode the keyboard group in one or more modi inWfiers of the compatibility state, so existing clients continue to work exactly the way fi ghUthey do today. By default, there is no way to directly specify a keyboard group in a a inYGrabbed or GrabButton request, but groups can be specified indirectly by cordD  p.rectly adjusting the group compatibility map. $ roRClients that wish to specify an XKB keyboard state, including a separate keyboard   Ygroup, can set the GrabsUseXKBState per-client flag which indicates that all subn  Tsequent key and button grabs from the requesting clients are specified using an XKB D s state. th $ y TWhether the XKB or core state should be used to trigger a grab is determined by the a gr[setting of the GrabsUseXKBState flag for the requesting client at the time the key en% grXor button is grabbed. There is no way to change the state to be used for a grab that is g 2D o Calready registered or for grabs that are set by some other client. lt,Kl )o :Changing the Keyboard Mapping Using the Core Protocol Y$ UAn XKB keyboard description includes a lot of information that is not present in the f tiUcore protocol description of a keyboard. Whenever a client remaps the keyboard using Ks inTcore protocol requests, XKB examines the map to determine likely default values for atD laBthe components that cannot be specified using the core protocol. $ m TSome aspects of this automatic mapping are configurable, and make it fairly easy to  Wh[take advantage of many XKB features using existing tools like txmodmap, but much of  ofNthe process of mapping a core keyboard description into an XKB description is   Udesigned to preserve compatible behavior for pre-XKB clients and cannot be redefined h Uby the user. Clients or users that want behavior that cannot be described using this D Ch+mapping should use XKB functions directly. otod ) %Explicit Keyboard Mapping Components d$ atUThis automatic remapping might accidentally replace definitions that were explicitly y  cl[requested by an application, so the XKB keyboard description defines a set of jexplicit e m jkeWcomponents for each key; any components that are listed in the explicit components ng $  Pfor a key are not changed by the automatic keyboard mapping. The explicit compo m1BL  tOnents field for a key can contain any combination of the following values: s ld  NapngHH |  sipHH ve compa( fd in hd )Assigning Symbols To Groups s $  tRThe first step in applying the changes specified by a core protocol ChangeKey toRboardMapping request to the XKB description of a keyboard is to determine the  piSnumber of groups that are defined for the key and the width of each group. The XKB [re! icQextension does not change key types in response to core protocol SetModifier.L ts]Mapping requests, but it does choose key actions as described in section 12.2.4. C$ e UDetermining the number of symbols required for each group is straightforward. If the tP a Vkey type for some group is not protected by the corresponding ExplicitKeyType ] Ucomponent, that group has two symbols. If any of the explicit components for the key j  Xinclude ExplicitKeyType3 or ExplicitKeyType4, the width of the key type hw Scurrently assigned to that group determines the number of symbols required for the cha a Rgroup in the core protocol keyboard description. The explicit type components for   k\Group1 and Group2 behave similarly, but for compatibility reasons the first two y  acSgroups must have at least two symbols in the core protocol symbol mapping. Even if ons  Xan explicit type assigned to either of the first two keyboard groups has fewer than two aD sKsymbols, XKB requires two symbols for it in the core keyboard description. equ$ p SIf the core protocol request contains fewer symbols than XKB needs, XKB adds trailect nd`ing NoSymbol keysyms to the request to pad it to the required length. If the core proto t enVcol request includes more symbols than it needs, XKB truncates the list of keysyms to D dtthe appropriate length.  $ enUFinally, XKB divides the symbols from the (possibly padded or truncated) list of sym p Tbols specified by the core protocol request among the four keyboard groups. In most # Qcases, the symbols for each group are taken from the core protocol definition in 0 ac_sequence (i.e. the first pair of symbols is assigned to Group1, the second pair of sym= ciebols is assigned to Group2, and so forth). If either Group1 or Group2 has an yJ s Vexplicitly defined key type with a width other than two, it gets a little more compliWD  ccated. eweld  nJAssigning Symbols to Groups One and Two with Explicitly Defined Key Types y$ adTThe server assigns the first four symbols from the expanded or truncated map to the ud anjsymbol positions G1L1, G1L2, G2L1 and G2L2, respectively. If the key type d fm  OunteHH }  sciHHco keyboar P Y)os ca[assigned to Group1 reports more than two shift levels, the fifth and following sym  e.^bols contain the extra keysyms for Group2. If the key type assigned to Group2 " asVreports more than two shift levels, the extra symbols follow the symbols (if any) for /  cGroup1 in the core protocol list of symbols. Symbols for Group3 and Group4 are <D weXcontiguous and follow the extra symbols, if any, for Group1 and Group2. TyQ$  UFor example, consider a key with a key type that returns three shift levels bound to h^  Seach group. The symbols bound to the core protocol are assigned in sequence to the peckD  tsymbol positions: UTUT$ G1L1, G1L2, G2L1, G2L2, G1L3, G2L3, G3L1, G3L2, G3L3, G4L1, URUTD )G4L2, and G4L3  $ TFor a key with a width one key type on group one, a width two key type on group two   cTand a width three key type on group three, the symbols bound to the key by the core  D as6protocol are assigned to the following key positions: UPUTd  ([G1L1, (G1L2), G2L1, G2L2, G3L1, G3L2, G3L3 r $ WNote that the second and fourth symbols (positions G1L2 and G2L2) can never be , f anPgenerated if the key type associated with the group yields only one symbol. XKB ypD eeTaccepts and ignores them in order to maintain compatibility with the core protocol. e l )ne3Assigning Types To Groups of Symbols for a Key pos#$ ROnce the symbols specified by ChangeKeyboardMapping have been assigned to 0 , Uthe four keyboard groups for a key, the X server assigns a key type to each group on 3=  Uthe key from a canonical list of key types. The first four key types in any keyboard wJBL  3map are reserved for these standard key types: symD$ keWUsers or applications may change these key types to get different default behavior (to s: Q  (Rmake shift cancel caps lock, for example) but they must always have the specified ^D number of symbols per group. os$ olSBefore assigning key types to groups, the X server expands any alphanumeric symbol f tD atdefinitions as follows: ld cpt Pr mHH ~  le HH},,ups of S*ey,$ On_If the second symbol of either group is NoSymbol and the first symbol of that group is ,  d San alphabetic keysym for which both lowercase and uppercase forms are defined, the  " anXX server treats the key as if the first element of the group were the lowercase form of ma/  tQthe symbol and the second element were the uppercase form of the symbol. For the n<  tUpurposes of this expansion, XKB ignores the locale and uses the capitalization rules cIL t defined in Appendix A. ed ^$ VFor each keyboard group that does not have an explicit type definition, XKB chooses a k xpSkey type from the canonical key types. If the second symbol assigned to a group is x  ]NoSymbol (after alphabetic expansion), the server assigns key type ONE_LEVEL. If l Vthe group contains the lowercase and uppercase forms of a single glyph (after alphanu  o[meric expansion), the server assigns key type ALPHABETIC. If either of the symbols d  ysbin a group is a numeric keypad keysym (KP_*), the server assigns key type KEYPAD. D f 2Otherwise, it assigns key type TWO_LEVEL. $ RFinally, XKB determines the number of groups of symbols that are actually defined  ^for the key. Trailing empty groups (i.e. groups that have NoSymbol in all symbol posiD t tions) are ignored. i$ [There are two last special cases for compatibility with the core protocol: If, after trailose  Ring empty groups are excluded, all of the groups of symbols bound to the key have   Nidentical type and symbol bindings, XKB assigns only one group to the key. If  . jGroup2 is empty and either of Group3 or Group4 are not, and if neither Group1 $  Unor Group2 have explicit key types, XKB copies the symbols and key type from e1D  Group1 into Group2. riJl )Assigning Actions To Keys X$ MOnce symbols have been divided into groups and key types chosen for the keys e FiRaffected by a ChangeKeyboardMapping request, XKB examines the symbols and r foTmodifier mapping for each changed key and assigns server actions where appropriate. p  UXKB also automatically assigns server actions to changed keys if the client issues a c thUcore protocol SetModifierMapping request, and does so optionally in response ,D  o;to XkbSetMap and XkbSetCompatMap requests. al $ nd\The compatibility map includes a list of jsymbol interpretations, which XKB compares ei Tto each symbol associated with any changed keys in turn, unless the ExplicitInt Zerp component is set for a key. Setting the ExplicitInterp component prevents D 7the application of symbol interpretations to that key. X$ OnTIf the modifiers and keysym specified in a symbol interpretation match the modifier   bPmapping and a symbol bound to a changed key that is not protected by Explic  mWitInterp, the server applies the symbol interpretation to the symbol position. The   omTserver considers all symbol interpretations which specify an explicit keysym before  l Xconsidering any that do not. The server uses the first interpretation which matches the o+ Qgiven combination of keysym and modifier mapping; other matching interpretations 8D t are ignored. nM$  wVXKB uses four of the fields of a symbol interpretation to decide if it matches one of ZD th(the symbols bound to some changed key: ernUTUT$  scThe Usymbol field is a keysym which matches if it has the value NoSymbol or is identiozURUTD re"tical to the symbol in question. d fd  Q mchHH   nanHHch//otected +/UTUT$ te`The modifiers specified in the Umods field are compared to the modifiers affected by the URUTD de/key in question as indicated by Umatch. pliUPUT$  aThe Umatch field can specify any of the comparisons: NoneOf, AnyOfOrNone, a+UNUTD .AnyOf, AllOf or Exactly. 7ULUT$ he`The VlevelOneOnly setting, indicates that the interpretation in question should only use r CUJUT  sVthe modifiers bound to this key by the modifier mapping if the symbol that matches in OUHUT d Xlevel one of its group. Otherwise, if the symbol being considered is not in shift level t[UFUT boYone of its group, the server behaves as if the modifier map for the key were empty. Note gUDUT [that it is still possible for such an interpretation to apply to a symbol in a shift level HsUBUT ch]other than one if it matches a key without modifiers; the UlevelOneOnly flag only concU@UT odVtrols the way that matches are determined and that the key modifiers are applied when U>UTD atan interpretation does match. $ UApplying a symbol interpretation can affect several aspects of the XKB definition of D  /the key symbol mapping to which it is applied: . U<UT$ he_The Saction specified in the symbol interpretation is bound to the symbol position; any r U:UTD  sFkey event which yields that symbol will also activate the new action. U8UT$ UHVIf the matching symbol is in position G1L1, the autorepeat behavior of the key is set U6UT  t_from the Sautorepeat field of the symbol interpretation. The ExplicitAutoRepeat e eU4UT UTWcomponent protects the autorepeat status of a key from symbol interpretation initiated n aU2UTD UB changes.  U0UT$ neYIf the symbol interpretation specifies an associated virtual modifier, that virtual modiU.UT e Yfier is added to the virtual modifier map for the key. The ExplicitVModMap compo!U,UT atNnent guards the virtual modifier map for a key from automatic changes. If the -U*UT Uof_levelOneOnly flag is set for the interpretation, and the symbol in question is not in posiU<9U(UTD Th4tion G1L1, the virtual modifier map is not updated. n EU&UT$ mb`If the matching symbol is in position G1L1, and the Ulocking key field is set in the syme QU$UT UTebol interpretation, the behavior of the key is changed to KB_Lock (see section 6.2). 6]U"UTD fr=The ExplicitBehavior component prevents this change. hq$ ReYIf no interpretations match a given symbol or key, the server uses: SA_NoAction, m~D  i@autorepeat enabled, non-locking key. with no virtual modifiers. If$ reXIf all of the actions computed for a key are SA_NoAction, the server assigns an fiD  v(length zero list of actions to the key. xp$ omYIf the core protocol modifier mapping is changed, the server regenerates actions for the n UTYaffected keys. The XkbSetMap and XkbSetCompatMap requests can also cause oD U<8actions for some or all keyboard keys to be recomputed. isd )U&Updating Everything Else t$  pUChanges to the symbols or modifier mapping can affect the bindings of virtual modifiT on\ers. If any virtual modifiers change, XKB updates all of its data structures to reflect the  ExRchange. Applying virtual modifier changes to the keyboard mapping night result in  a Uchanges to types, the group compatibility map, indicator maps, internal modifiers or e*D loignore locks modifiers. mCl )+Effects of XKB on Core Protocol Events forQ$ NoSAfter applying server actions which modify the base, latched or locked modifier or to^ Tgroup state of the keyboard, the X server recomputes the effective group and state. ak RSeveral components of the keyboard state are reported to XKBaware clients dependx auaing on context (see section 2.0 for a detailed description of each of the keyboard state D ry components): d   di Re ndHH   nerHH--all of i,ur-UTUT$ ZThe effective modifier state is reported in XkbStateNotify events and in response URUTD  !to XkbGetState requests. oUPUT$ ndXThe symbol lookup state is reported to XKBaware clients in the state field of core pro+UNUT EfTtocol and input extension key press and release events that do not activate passive ti7ULUT heTgrabs. Unless the LookupStateWhenGrabbed per-client flag is set, the lookup arCUJUTD coAstate is only reported in these events when no grabs are active. aOUHUT$ e XThe grab state is reported to XKBaware clients in the state field of all core protocol xt[UFUT 2.aevents that report keyboard state, except KeyPress and KeyRelease events that do gUDUTD not activate passive grabs. sUBUT$ WThe effective group is the sum of the base, latched and locked keyboard groups. An out U@UT  iXof range effective group is wrapped or truncated into range according to the setting of U>UTD .the UgroupsWrap flag for the keyboard. $ YThe server reports compatibility states to any clients that have not issued a successful i ofRXkbUseExtension request. The server computes the compatibility symbol lookup  ctXstate and the compatibility effective grab state by applying the compatibility modifier -cD  t/map to the corresponding computed XKB states. epo$ tsQThe compatibility symbol lookup state is reported to nonXKB clients whenever an  heUXKB-aware client would receive the XKB lookup state. The compatibility grab state is t yPMreported to XKB-unaware clients whenever an XKB client would receive the XKB aD  grab state. $ e UIf the GrabsUseXKBState per-client option is not set, even XKB-aware clients $  e[receive the compatibility grab state in events that trigger or terminate passive grabs. If D 1 psVthis flag is not set, XKB clients also receive the compatibility grab or lookup state >D ts&whenever any keyboard grab is active. S$ XWIf the LookupStateWhenGrabbed per-client option is set, clients receive either ` d Sthe XKB or compatibility lookup state when the keyboard is grabbed, otherwise they m toTreceive either the XKB or compatibility grab state. All non-XKB clients receive the mbz  rScompatibility form of the appropriate state component; the form that is sent to an rec p SXKB-aware client depends on the setting of the GrabsUseXKBState option for clD XK that client. rl ),Effect of XKB on Core Protocol Requests $ raRWhenever a client updates the keyboard mapping using a core protocol request, the  thXserver saves the requested core protocol keyboard mapping and reports it to any clients   fSthat issue GetKeyboardMapping or GetModifierMapping requests. When evSever a client updates the keyboard mapping using XKB requests, the server discards ed ioYthe affected portion of the stored core keyboard description and regenerates it based on tD ar%the XKB description of the keyboard. d ivNThe symbols associated with the XKB keyboard description appear in the order: &U<UTd  r,G1L1 G1L2 G2L1 G2L2 G1L3-n G2L3-n G3L* G4L* co:$ thcIf the type associated with Group1 is width one, the second symbol is NoSymbol; if XKBGD or^the type associated with Group2 is width one, the fourth symbol is NoSymbol. \$ ]If a key has only one group but the keyboard has several, the symbols for Group1 are i thSrepeated for each group. For example, given a keyboard with three groups and a key entv  ^with one group that contains the symbols { a A }, the core protocol description would  evcontain the six symbols: { a A a A a A }. As a slightly more complicated example, an td& t i S arHH   HHol++B keyboa- a+ UTkXKB key which had a single width three group with the symbols { a b c } would show  dtup in the generated core protocol keyboard description with the symbols { a b a b c c "D oS>a b c } for a keyboard with three groups. 7$ WThe generated modifier mapping for a key contains all of the modifiers affected by all . FD a Yof the actions associated with the key plus all of the modifiers associated with any virtQ  AWtual modifiers bound to the key by the virtual modifier mapping. If any of the actions : {^ Passociated with a key affect any component of the keyboard group, any modifiers , k aspecified in any entry of the group compatibility map (see section 12.1) are reported in x Xthe modifier mask. The SA_ISOLock action can theoretically affect any modifier, UT d Wbut the modifier map of an SA_ISOLock key contains only the modifiers or group D dtstate that it sets by default. ol $ onVThe server notifies interested clients of keyboard map changes in one of two ways. It   [sends XkbMapNotify to clients that have explicitly selected them and core protocol odi  kUMappingNotify events to clients that have not. Once a client requests XkbMaps he\Notify events, the server stops sending it MappingNotify events to inform it of ouD hekeyboard changes. l *he-Sending Events to Clients $ xa SXKB normally assumes that events sent to clients using the core protocol SendEasp ryXventx request contain a core protocol state, if applicable. If the client which will  x mSreceive the event is not XKB-capable, XKB attempts to convert the core state to an ) xmo[XKB state as follows: if any of the modifiers bound to Group2x in the group compatiD 6 xt [bility map are set in the event state, XKB clears them in the resulting event but sets the mapCD x t6effective group in the event state to Group2x. X$ !xatSIf the PCF_SendEventUsesXKBStatex per-client flag is set at the time of the fye !xntRSendEvent request, XKB instead assumes that the event reported in the event is an r !xr TXKB state. If the receiving client is not XKB-aware, the extension converts the XKB ke !xYstate (which contains the effective state in bits 13-14) to a core state by applying the tD !x c@group compatibility map just as it would for actual key events. veUT UTl ta/The Server Database of Keyboard Components lie$ "uMThe X server maintains a database of keyboard components and common keyboard  "uanPmappings. This database contains five kinds of components; when combined, these D "u gXfive components provide a complete description of a keyboard and its behavior.u u em$ #uevYTuhe X Keyboard Extension provides requests to list the contents of this database, to  #u !Lassemble and complete keyboard descriptions by merging the current keyboard im  #uSdescription with the contents of this database, or to replace the current keyboard venD #uWdescription with a complete keyboard description assembled as describedu below.u XK1l $) !Component Names) s ?$ %e gComponent and keymap names have the form lclass(lmember) where lclass describes wouL %ev[a subset of the available components for a particular type and the optional lmember $ "Y % mOidentifies a specific component from that subset. For example, the name atlanuanf %at_tis(acme) xmight specify the symbols used for the atlantis national keyboard layout by ents %teXthe vendor acme. Each class has an optional ldefault member references which ybD %vi^specify a class but not a member refer to the default member of the class, if one exists. d nt T #HH   aseHHnrr--D #.io-$ & d`The lclass and lmember names are both specified using characters from the Latin-1 s  &e Rcharacter set. XKB implementations must accept all alphanumeric characters, minus " &esV(-) and underscore (_) in class or member names, and must not accept parentheses, / &meUplus, vertical bar, percent sign, asterisk, question mark or white space. The use of <D &a2other characters is implementation-dependent. Ul ')bo=Partial Components and Combining Multiple Components) c$ (veWSome of the elements in the server database contain describe only a piece of the correp (ifVsponding keyboard component. These lpartial components should be combined with }D (5other components of the same type to be useful.  #$ )SFor example, a partial symbols map might describe the differences between a common D # )UASCII keyboard and some national layout. Such a partial map is not useful on its own  )roRbecause it does not include those symbols that are the same on both the ASCII and  )chVnational layouts (such as function keys). On the other hand, this partial map can conD )ce
UTD 1 -)$The )T)ypes) C)omponent l 4$ ?ey[The ltypes component of a keyboard mapping specifies the key types that can be assoghtA ?se_ciated with the various keyboard keys. It affects the ltypes symbolic name and the list of N ?re\of types associated with the keyboard (see section 7.2.1). The types component of a nt[ ?inQkeyboard mapping can also optionally contain real modifier bindings and symbolic hD ? n)names for one or more virtual modifiers. }$_xcoSThe special types component named canonical always contains the types and definimapL_x i5tions listed in Appendix B of this document. hd  d s VeseyHH   HHhe!!^i0de!d`ec?XKB defines no hints that are specific to the types component. )y!d A)en The Compatibility Map Component ty/$ Bof`The lcompatibility map component of a keyboard mapping primarily specifies the rules th< B k[used to assign actions to keysyms. It affects the lcompat symbolic name, the symbol s aI B kNcompatibility map and the group compatibility map. The compat component might V BpiRalso specify maps for some indicators and the real modifier bindings and symbolic cD Be "names of some virtual modifiers. xd CspOXKB defines no hints that are specific to the compatibility map component. d D)ti&The )S)ymbols) C)omponent $ EZThe lsymbols component of a keyboard mapping specifies primarily the symbols bound  E]to each keyboard key. It affects the lsymbols symbolic name, a key symbol mapping for  EdeReach key, they keyboard modifier mapping, and the symbolic names for the keyboard  Ep Zsymbol groups. Optionally, the lsymbols component can contain explicit actions and  EspSbehaviors for some keys, or the real modifier bindings and symbolic names for some ts D E svirtual modifiers. bolBl F BNXKB defines the following additional hints for the symbols component: $ G BRThese hints only apply to partial symbols components; full symbols components are D G B8assumed to specify all of the pieces listed above.  spU@UT$ HinRThe alphanumeric, modifier, keypad or function keys hints should describe the priU>UT HolVmary intent of the component designer and should not simply an exhaustive list of the U<UT HimUkinds of keys that are affected. For example, national keyboard layouts affect primasU:UT Hc Orily alphanumeric keys, but many affect a few modifier keys too; such mappings ifiU8UT He Pshould set only LC_AlphanumericKeys hint. In general, symbol components heU6UT HomYshould set only one of those four flags (though LC_AlternateGroup may be comhU4UTD Hnd(bined with any of the other flags). 'd I)ua'The )G)eometry) C)omponent de5$ Jg YThe lgeometry component of a keyboard mapping specifies primarily the geometry of aB JmbOthe keyboard. It contains the geometry symbolic name and the keyboard geometry ifyO J lPdescription. The geometry component might also contain aliases for some keys or nc\ JouSsymbolic names for some indicators and might affect the set of indicators that are houi JxhPphysically present. Key aliases defined in the geometry component of a keyboard mpvD Jar:mapping override those defined in the keycodes component. d K aFXKB defines no hints that are specific to the geometry component. d ? i.  WntheHH   fhoHHug++ may 1UT+d L)nyComplete K)eymaps $ M IUThe X server also reports a set of fully specified keymaps. The keymaps specified in # MkeWthis list are usually assembled from the components stored in the rest of the database t c0D MryXand typically represent the most commonly used keymaps for a particular system. y Ed Nso@XKB defines no hints that are specific to complete keymaps. neUT UTl Oca,Replacing the Keyboard On-the-Fly at{$ PSXKB supports the XkbNewKeyboardNotify event, which reports a change in keyoar P JNboard geometry or the range of supported keycodes. The server can generate an  PnoQXkbNewKeyboardNotify event when it detects a new keyboard, or in response to  P. \an XkbGetKeyboardByName request (see section 16.3.12) which loads a new keyD Pboard description. $ Q+UWhen a client opens a connection to the X server, the server reports the minimum and o Q sQmaximum keycodes. If the range of supported keycodes is changed, XKB keeps track a Q tRof the minimum and maximum keycodes that were reported to each client and filters  QmoRout any events that fall outside of that range. Note that these events are simply D Q t6ignored; they are not delivered to some other client.  $ R 1UWhen the server sends an XkbNewKeyboardNotify event to a client to inform it y RenSof the new keycode range, XKB resets the stored range of legal keycodes to the key of' Rs.Tcode range reported in the event. Non-XKB clients and XKB-aware clients that do not it4 RboUrequest XkbNewKeyboardNotify events never receive events from keys that fall sAD R3.?outside of the legal range that XKB maintains for that client. iptV$ STWhen a client requests XkbNewKeyboardNotify events, the server compares the imc SWrange of keycodes for the current keyboard to the range of keycodes that are valid for k ap S tRthe client. If they are not the same, the server immediately sends that client an } SmoMXkbNewKeyboardNotify event. Even if the new keyboard is not new to the mD S Q-server, it is new to this particular client. td T7In addition to filtering out-of-range key events, XKB: NotURUT$ U cXAdjusts core protocol MappingNotify events to refer only to keys that match the raUPUTD Udestored legal range. UNUT$ V rUReports keyboard mappings for keys that match the stored legal range to clients that ULUTD Ves:issue a core protocol GetKeyboardMapping request. UJUT$ W sUReports modifier mappings only for keys that match the stored legal range to clients tUHUTD W?that issue a core protocol GetModifierMapping request. seUFUT$ XimQRestricts the core protocol ChangeKeyboardMapping and SetModifierMapyUDUTD XidCping requests to keys that fall inside the stored legal range. he $ Y sTIn short, XKB does everything possible to hide the fact that the range of legal keyn! Yt Qcodes has changed from clients non-XKB clients, which cannot be expected to deal . YIn]with it. The corresponding XKB events and requests do knot pay attention to the legal o; YifQkeycode range in the same way because XKB makes it possible for clients to track gHD YUT?changes to the keycode range for a device and respond to them. toriUB UTl Zcl7Interactions Between XKB and the X Input Extension $ [UAll XKB interactions with the input extension are optional; implementors are free to e [e Rrestrict the effects of the X Keyboard Extension to the core keyboard device. The d [ is  XgeybHH   DUTHHo rl inside#|2ga [ YJXkbGetExtensionDeviceInfo request reports whether or not an XKB impleD [Imentation supports a particular capability for input extension devices. n*Bl \deJXKB recognizes the following interactions with the X Input Extension: $ ]y [Attempts to use an XKB feature with an extension device fail with a Keyboard error it ]ntZif the server does not support the XkbXI_Keyboards optional feature. If a capabil ][ity particular capability other than XkbXI_Keyboards is not supported, attempts to XK ]h [use it fail silently. The replies for most requests that can use one of the other optional e e ]ybWfeatures include a field to report whether or not the request was successful, but such iD ]*requests do not cause an error condition. 0$ ^UTTClients can also request an XkbExtensionDeviceNotify event. This event noti= ^etVfies interested clients of changes to any of the supported XKB features for extension J ^tsYdevices, or if a request from the client that is receiving the event attempted to use an sWD ^ -unsupported feature. tpd _)3Using XKB Functions with Input Extension Keyboards an~$ `faTAll XKB requests and events include a device identifier which can refer to an input rt `boYextension KeyClass device, if the implementation allows XKB to control extension e `eyNdevices. If the implementation does not support XKB manipulation of extension D `s idevices, the device identifier is ignored but it must xbe either 20 oxr UseCoreKbd. t$ ar QImplementations which do not support the use of XKB functions with extension keya atiVboards must not set the XkbXI_Keyboards flag. Attempts to use XKB features on  aotVan extension keyboard with an implementation that does not support this feature yield D ansa Keyboard error. d b)ue"Pointer and Device Button Actions , ced_The XKB extension optionally allows clients to assign any key action (see section 6.3) wi c KYto core pointer or input extension device buttons. This makes it possible to control the h" cn Qkeyboard or generate keyboard key events from extension devices or from the core i/D con pointer. iD$ d `PXKB implementations are required to support actions for the buttons of the core n Q ds Upointer device, but support for actions on extension devices is optional. Implementa^ d tQtions which do not support button actions for extension devices must not set the kD daXkbXI_ButtonActions flag. nod # ets YHH   plHHzot((eld 3ns($ e. TAttempts to query or assign button actions with an implementation that does not supex e -Yport this feature report failure in the request reply and might cause the server to send o" enpQan XkbExtensionDeviceNotify event to the client which issued the request c/D ege;that failed. Such requests never cause an error condition. coHd f) c%Indicator Maps for Extension Devices KV$ garTThe XKB extension allows applications to assign indicator maps to the indicators of tec gorTnon-keyboard extension devices. If supported, maps can be assigned to all extension s p grtXdevice indicators, whether they are part of a keyboard feedback or part of an indicator Ac}D gno feedback. $ hSImplementations which do not support indicator maps for extension devices must not D h*set the XkbXI_IndicatorMaps flag. $ iTAttempts to query or assign indicator maps with an implementation that does not supat isuYport this feature report failure in the request reply and might cause the server to send a iseQan XkbExtensionDeviceNotify event to the client which issued the request hD iue;that failed. Such requests never cause an error condition. use$ln.WIf this feature is supported, the maps for the default indicators on the core keyboard XKl aTdevice are visible both as extension indicators and as the core indicators. Changes ke levRmade with 2XkbSetDeviceInfo are visible via 2XkbGetIndicatorMap and DlheWchanges made with 2XkbSetIndicatorMap are visible via 2XkbGetDeviceInfo. fe0d j)&Indicator Names for Extension Devices >$ kapTThe XKB extension allows applications to assign symbolic names to the indicators of apK kTnon-keyboard extension devices. If supported, symbolic names can be assigned to all oeX kXextension device indicators, whether they are part of a keyboard feedback or part of an rveD kindicator feedback. kbz$ lifSImplementations which do not support indicator maps for extension devices must not . SD l c+set the XkbXI_IndicatorMaps flag. n.$ misUAttempts to query or assign indicator names with an implementation that does not supl misYport this feature report failure in the request reply and might cause the server to send v mbSQan XkbExtensionDeviceNotify event to the client which issued the request eD mh ;that failed. Such requests never cause an error condition. fo$nXIf this feature is supported, the names for the default indicators on the core keyboard lon aTdevice are visible both as extension indicators and as the core indicators. Changes onnrtXmade with 2XkbSetDeviceInfo are visible via 2XkbGetNames and changes made orDnCwith 2XkbSetNames are visible via 2XkbGetDeviceInfo. icaUT UTd nXKB Protocol Requests 5$o nRThis document uses the syntactic conventions and common types defined by the specBDodiWification of the core X protocol with a number of additions, which are detailed below. wi[d o)onErrors s ni$ xXIf a client attempts to use any other XKB request except XkbUseExtensionx before tv x[the extension is properly initialized, XKB reports an Accessx error and ignores the d 7 sev Zn.oHH   prtHHdecore key )4& *, , . 0 2 4 6 8 : "(*.02 < >N @ B D F H J6:>8< L N@BD xZrequest. XKB is properly initialized once XkbUseExtensionx reports that the client D xBhas asked for a supported or compatible version of the extension. .d *caKeyboard Errors <$ pueXIn addition to all of the errors defined by the core protocol, the X Keyboard Extension fiI p^defines a single error, Keyboard, which indicates that some request specified an illeV p]gal device identifier or an extension device that is not a member of xan appropriate. c pxtOUnless otherwise noted, any request with an argument of type KB_DEVICESPEC can XKBpD pceZcause Keyboard errors if an illegal xor inappropriate device is specified. $ xoNWhen the extension reports a Keyboard error, the most significant byte of the  lre[resource_idx is a further refinement of the error cause, as defined in the table below. N@BL xXThe least significant byte contains the device, class, or feedback id as indicated:0 hed *Side-Effects of Errors su$ qbl_With the exception of Alloc or Implementation errors, which might result in an tio( qroTinconsistent internal state, no XKB request that reports an error condition has any ne5 qSeffect. Unless otherwise stated, requests which update some aspect of the keyboard B qifZdescription will not apply only part of a request if part of a request fails, the whole OD qwithing is ignored. hd r) o Common Types Ev$ sTThe following types are used in the request and event definitions in subsequent secicBL s tions: xod  o t [f e HH B  fthHHrrthe tabl *35 *, , . 0 2 4 6 8 : "(*.02 < >N @ B D F H J6:>8< L N@BDd ~ Si \HH C  oHHnresult i <=6 < >N @ B D F H J6:>8< L N@BDd @ nne ]ctUnHH D  eomHHrdZdescriB7 a L N@BDCEGIKifeBl t faThese types are used by the XkbGetGeometry and XkbSetGeometry requests: d  ith ^tis HH   is:HHo tC8CEGIK Bl xBWThese types are used by 2XkbGetDeviceInfox and XkbSetDeviceInfox: 5d u) 4 Requests *$ v DXThis section lists all of the requests supported by the X Keyboard Extension, separated D v%into categories of related requests. d w)&Initializing the X Keyboard Extension U UTd x6XkbUseExtension F"UUTd y"wantedMajor, wantedMinor: CARD16 /UUT$ z naffectWhich field of this request are changed as follows: UFUT$ hefIf the event type is also set in Uclear, the detail mask for the corresponding event is set to UDUTD ,(0 or False, as appropriate. reUBUT$ ancIf the event type is also set in UselectAll, the detail mask for the corresponding event is ap U@UTD k,6set to include all legal detail values for that type. U>UT$ d hIf the event type is not set in either Sclear or SselectAll, the corresponding element of sU<UT San\details lists a set of explicit changes to the details mask for the event, as described ea&U:UTD ctbelow. a :$  r`Each entry of the ~details list specifies changes to the event details mask for a single ecG n gtype of event, and consists of an ~affects mask and a ~values mask. All details that are y eT edhspecified in ~affects are set to the corresponding value from ~values; if any details are aD  tUlisted in ~values but not in ~affects, a Match error results. d W as ` HH   secHHwasevent is.Q:$ll]The details list contains entries only for those event types, if any, that are listed in the r~jaffectWhich mask and not in either ~clear or ~selectAll. When present, the items of the "BL~ls4details list appear in the following order: ctd \Detail masks for event types that are not specified in ~affectWhich are not changed. sk$ YIf any components are specified in a clients event masks, the X server sends the client  s Ran appropriate event whenever any of those components change state. Unless explic(  _itly modified, all event detail masks are empty. Section 16.4 describes all XKB events af5D at>and the conditions under which the server generates themx. Nd *$G)enerating Named Keyboard Bells jU> UTd XkbBell zU<UT$ asdeviceSpec: KB_DEVICESPEC U:UT bellClass: KB_BELLCLASSSPEC ThU8UT tabellID: KB_IDSPEC U6UT , percent: INT8 U4UT forceSound: BOOL tU2UT  neventOnly: BOOL leU0UT ctpitch, duration: INT16 emsU.UT  name: ATOM ailU,UTD inwindow: WINDOW derU*UTd 3Errors: Keyboard, Value, Match pecU(UTd tW h$ edVThis request generates audible bells and/or XkbBellNotify events for the bell * e kspecified by the lbellClass and lbellID on the device specified by ~deviceSpec at the ic7  nspecified ~pitch, ~duration and volume (~percent). If deviceSpec specifies a device that DD coMdoes not have a bell or keyboard feedback, a Keyboard error results. eY$ booIf both ~forceSoundx and ~eventOnly are set, this request yields a Match error. Otherbef ASgwise, if ~forceSoundx is True, this request always generates a sound and never generfos  taates an event; if ~eventOnly is True, it causes an event but no sound. If neither Td  in aUTHH   uHHzUT**$ ;ue* ~ ajforceSoundx nor ~eventOnly are True, this request always generates an event; if the D  tUkeyboards global AudibleBell control is enabled, it also generates a sound. *$ atXAny bell event generated by this request contains all of the information about the bell 7 e \that was requested, including the symbolic name specified by lname and the event winD bdow specified by window. The ~name and ~window are not directly interpreted by XKB, Q f[but they must have the value None or specify a legal Atom or Window, respectively. s^ atUXkbBellNotify events generated in response to core protocol or X input extension nkD @bell requests always report None as their ~name. $ oThe lbellClass, lbellID, and lpercent fields are interpreted as for the X input extension  eSgDeviceBell request. If ~pitch and ~duration are zero, the server uses the correspond oa`ing values for that bell from the core protocol or input extension, otherwise lpitch and at lenTduration are interpreted as for the core protocol ChangeKeyboardControl  uefrequest; if they do not include legal values, a Value error results. The ~window field  dobmust specify a legal Window or have the value None, or a Value error results. The  he^name field must specify a legal Atom or have the value None, or an Atom error  en[results. If an error occurs, this request has no other effect (i.e. does not cause a sound queD or generate an event). ame$ lThe ~pitch, ~volume, and ~duration are suggested values for the bell, but XKB does not e D "require the server to honor them. #d ) a%Querying and Changing Keyboard State r>UT UTd nd XkbGetState NURUTd esdeviceSpec: KB_DEVICESPEC [UPUT$  e nhUNUT ldeviceID: CARD8 uULUT du1mods, baseMods, latchedMods, lockedMods: KEYMASK UJUT Cogroup, lockedGroup: KB_GROUP eUHUT  dbaseGroup, latchedGroup: INT16 VaUFUT ltcompatState: KEYMASK iUDUT  #grabMods, compatGrabMods: KB_GROUP havUBUT ne&lookupMods, compatLookupMods: KEYMASK U@UTD  ptrBtnState: BUTMASK pU>UTd  oErrors: Keyboard nU<UTd to $ WThis request returns a detailed description of the current state of the keyboard speciuse D fied by ldeviceSpec. ve $ \The ldeviceID return value contains the input extension identifier for the specified b-D noIdevice, or 0 if the server does not support the input extension. B$  CYThe lbaseMods return value reports the modifiers that are set because one or more cO UP_modifier keys are logically down. The llatchedMods and llockedMods return values la\ od\report the modifiers that are latched or locked respectively. The lmods return value p,i 16Rreports the effective modifier mask which results from the current combination of vD UP$base, latched and locked modifiers. cod  pt bUTHH   HHu **ns a det<io*$  ]The lbaseGroup return value reports the group state selected by group shift keys that h  rfare logically down. The llatchedGroup and llockedGroup return values detail the effects " seTof latching or locking group shift keys and XkbLatchLockState requests. The r/ ls [group return value reports the effective keyboard group which results from the current all<D tc6combination of base, latched and locked group values. Q$ re[The ~lookupMods return value reports the lookup modifiers, which consist of the curi^ reZrent effective modifiers minus any server internal modifiers. The ~grabMods return k tcRvalue reports the grab modifiers, which consist of the lookup modifiers minus any x UTUmembers of the ignore locks mask that are not either latched or logically depressed. L etVSection 2.0 describes the lookup modifiers and grab modifiers in more detail. $ el`The ~ptrBtnState return value reports the current logical state of up to five buttons on aD the core pointer device. $ ]The lcompatState return value reports the compatibility state that corresponds to the r s Yeffective keyboard group and modifier state. The lcompatLookupMods and lcompatt l YGrabMods return values report the core protocol compatibility states that correspond o n Rto the XKB lookup and grab state. All of the compatibility states are computed by  odOapplying the group compatibility mapping to the corresponding XKB modifier and L po4group states, as described in Section 12.1. diUT UTd XkbLatchLockState 'URUT$ e deviceSpec: KB_DEVICESPEC 4UPUT ca"affectModLocks, modLocks: KEYMASK AUNUT lockGroup: BOOL okNULUT ragroupLock: KB_GROUP ta[UJUT  %affectModLatches,modLatches: KEYMASK lhUHUT relatchGroup: BOOL uUFUTD  ogroupLatch: INT16 UDUTd nt$Errors: Keyboard, Value UBUTd re n$  cVThis request locks or latches keyboard modifiers and group state for the device speci atified by ldeviceSpec. If ~deviceSpec specifies an illegal or non-keyboard device, a Key D atboard error occurs. po$  \The locked state of any modifier specified in the laffectModLocks mask is set to the  yiecorresponding value from lmodLocks. If llockGroup is True, the locked keyboard  edggroup is set to the group specified by lgroupLock. If any modifiers are set in ~modLocks DEVD >but not ~affectModLocks, a Match error occurs. $  _The latched state of any modifier specified in the laffectModLatches mask is set to the YMA(  icorresponding value from lmodLatches. If llatchGroup is True, the latched keyboard 5 UB_group is set to the group specified by lgroupLatch. if any modifiers are set in ~modoupBD ~icOLatches but not in ~affectModLatches, a Match error occurs. pecW$ r QIf the locked group exceeds the maximum number of groups permitted for the specid ThUfied keyboard, it is wrapped or truncated back into range as specified by the global hqD  WGroupsWrapl control. No error results from an out-of-range group specification. e ld 4  s cbylHH   ~HH,,~affect=a ,$ . VAfter changing the locked and latched modifiers and groups as specified, the X server  seRrecalculates the effective and compatibility keyboard state and generates Xkb" s RStateNotify events as appropriate if any state components have changed. Chang/ roLing the keyboard state might also turn indicators on or off which can cause he<D ~,XkbIndicatorStateNotify events as well. ccQd 1If any errors occur, this request has no effect. ujd )mi(Querying and Changing Keyboard Controls fiUT UTd  wXkbGetControls ed URUTd  sdeviceSpec: KB_DEVICESPEC UPUT$ Gr sUNUT oldeviceID: CARD8 fULUT e mouseKeysDfltBtn: CARD8 UJUT 4numGroups: CARD8 UHUT groupsWrap: KB_GROUPINFO UFUT 'internalMods,ignoreLockMods: KB_MODDEF ,UDUT ,#repeatDelay,repeatInterval: CARD16 UBUT r %slowKeysDelay, debounceDelay: CARD16 r U@UT ec*mouseKeysDelay, mouseKeysInterval: CARD16 U>UT ec.mouseKeysTimeToMax, mouseKeysMaxSpeed: CARD16 $U<UT mouseKeysCurve: INT16 1U:UT ri$accessXOptions: KB_AXOPTIONMASK ed>U8UT accessXTimeout: CARD16 d sKU6UT rnNaccessXTimeoutOptionsMask, accessXTimeoutOptionValues: CARD16 XU4UT s 0accessXTimeoutMask,accessXTimeoutValues: CARD32 teU2UT  e!enabledControls: KB_BOOLCTRLMASK irU0UTD ybperKeyRepeat: LISTofCARD8 U.UTd ntErrors: Keyboard U,UTd KB V$ YThis request returns the current values and status of all controls for the keyboard spec  hified by ldeviceSpec. If ldeviceSpec specifies an illegal device a Keyboard error Mo  Kbresults. On return, the ldeviceID specifies the identifier of the requested device or zero D el4if the server does not support the input extension. eK$ 6 `The lnumGroups return value reports the current number of groups, and ~groupsWrap sC U:creports the treatment of out-of-range groups, as described in Section 7.2.2. The ~interd s ~rn]nalMods and ~ignoreLockMods return values report the current values of the server  ut`internal and ignore locks modifiers as described in section 2.0. Both are modifier defiUT eyanitions (section 3.1) which report the real modifiers, virtual modifiers, and the result*D ueOing combination of real modifiers that are bound to the corresponding control. ?$ ifsThe lrepeatDelay, lrepeatInterval, lslowKeysDelay and ldebounceDelay fields report the  L reYcurrent values of the for the autorepeat delay, autorepeat interval, slow keys delay and Y heZbounce keys timeout, respectively. The lmouseKeysDelay, lmouseKeysInterval, f lts^mouseKeysTimeToMax and lmouseKeysMaxSpeed and lmouseKeysCurve return values s e `report the current acceleration applied to mouse keys, as described in section 4.6. All anD ds$times are reported in milliseconds. vad ~ nrn derasHH   diHH0ection 3>re$ irYThe lmouseKeysDfltBtn return value reports the current default pointer button for tD co?which events are synthesized by the mouse keys server actions. *$va\The /accessXOptions return value reports the current settings of the various AccessX re7f Yoptions flags which govern the behavior of the 2StickyKeys control and of AccessX eDDou feedback. Y$ Ke]The laccessXTimeout return value reports the length of time, in seconds, that the keyuf  aMboard must remain idle before AccessX controls are automatically changed; an ts lie_accessXTimeout of 0 indicates that AccessX controls are not automatically changed. ted va[The laccessXTimeoutMask specifies the boolean controls to be changed if the AccessX  \timeout expires; the laccessXTimeoutValues field specifies new values for all of the  ThXcontrols in the timeout mask. The laccessXTimeoutOptionsMask field specifies the  whTAccessX options to be changed when the AccessX timeout expires; the laccessXTimeThD lnsOoutOptionValues return value reports the values to which they will be set. $ fl`The lenabledControls return value reports the current state of all of the global boolean ouD  controls. ]Th$ ut^The lperKeyRepeat array consists of one bit per key and reports the current autorepeat  le^behavior of each keyboard key; if a bit is set in lperKeyRepeat, the corresponding key  caWrepeats if it is held down while global keyboard autorepeat is enabled. This array parac Xallels the core protocol and input extension keyboard controls, if the autorepeat behavou aTior of a key is changed via the core protocol or input extension, those changes are Th,D ti;automatically reflected in the lperKeyRepeat array. fied # nto esXimHH   HHuets the vu? t UT UTd XkbSetControls enURUT$redeviceSpec: KB_DEVICESPEC &UPUT t2affectInternalRealMods, internalRealMods: KEYMASK 3UNUT ;affectInternalVirtualMods,internalVirtualMods: KB_VMODMASK key@ULUTur8affectIgnoreLockRealMods,ignoreLockRealMods: KB_MODMASK boMUJUTis?affectIgnoreLockVirtualMods,ignoreLockVirtualMods: KB_VMODMASK  ZUHUTt mouseKeysDfltBtn: CARD8 kegUFUTisgroupsWrap: KB_GROUPINFO ctUDUTaccessXOptions: CARD16 l aUBUT k'affectEnabledControls: KB_BOOLCTRLMASK ouU@UTa!enabledControls: KB_BOOLCTRLMASK oU>UTutchangeControls: KB_CONTROLMASK ,U<UTau#repeatDelay,repeatInterval: CARD16 eyRU:UTie%slowKeysDelay, debounceDelay: CARD16 U8UT*mouseKeysDelay, mouseKeysInterval: CARD16 U6UT .mouseKeysTimeToMax, mouseKeysMaxSpeed: CARD16 U4UTmouseKeysCurve: INT16 U2UTetaccessXTimeout: CARD16 $U0UTKB:accessXTimeoutMask, accessXTimeoutValues: KB_BOOLCTRLMASK U.UTYM>accessXTimeoutOptionsMask,accessXTimeoutOptionsValues: CARD16 U,UTDSKperKeyRepeat: LISTofCARD8 )U*UTd Mo$Errors: Keyboard, Value UJ6U(UTd af tK$ od]This request sets the keyboard controls indicated in lchangeControls for the keyboard TX psfspecified by ldeviceSpec. Each bit that is set in lchangeControls indicates that one or eBL RLDmore of the other request fields should be applied, as follows: UTd  K fatlaHH   ieHHvnc((@sD(?$ 6 gIf any other bits are set in lchangeControls, a Value error results. If any of the bits L [listed above are not set in lchangeControls, the corresponding fields must have the aluYD K 3value 0, or a Match error results. sXTn$ s:hIf applied, lrepeatDelay and lrepeatInterval change the autorepeat characteristics of the { lkeyboard, as described in section 4.1. If specified, lrepeatDelay and lrepeatInterval foD 8must both be non-zero or a Value error results. t $ cdIf applied, the lslowKeysDelay field specifies a new delay for the SlowKeys control, be wslas defined in section 4.2. If specified, lslowKeysDelay must be non-zero, or a Value D  error results. $ aIf applied, the ldebounceDelay field specifies a new delay for the BounceKeys con gtrol, as described in section 4.3. If present, the ldebounceDelay must be non-zero or a D Value error results. m$ [If applied, the lmouseKeysDfltBtn field specifies the core pointer button for which hIf atYevents are generated whenever a SA_PtrBtn or SA_LockPtrBtn key action is  oaYactivated. If present, lmouseKeysDfltBtn must specify a legal button for the core t" jpointer device, or a Value error results. Section 6.3 describes the SA_PtrBtn and /D y*SA_LockPtrBtn actions in more detail. D$ ol_If applied, the lmouseKeysDelay, lmouseKeysInterval, lmouseKeysTimeToMax, musQ la ]mouseKeysMaxSpeed and lmouseKeysCurve fields change the rate at which the pointer ^  _moves when a key which generates a SA_MovePtr action is held down. Section 4.6 bedk 3Rdescribes these MouseKeysAccel parameters in more detail. If defined, the x ~ _mouseKeysDelay, ~mouseKeysInterval, ~mouseKeysTimeToMax and ~mouseKeysMaxre  ~ wcSpeed values must all be greater than zero, or a Value error results. The lmouseKeyD lVsCurve value must be greater than -1000 or a Value error results. $  t^If applied, the laccessXOptions field sets the AccessX options, which are described in  tr]detail in section 4.7. If either one of XkbStickyKeysMask and XkbAccessXl ZFeedbackMask are set in lchangeControls and XkbAccessXKeysMask is not,  sMVonly a subset of the AccessX options are changed, as described in the table above; if  modboth are set or if the AccessXKeys bit is set in lchangeControls, all of the AccessX  riYoptions are updated. Any bit in laccessXOptions whose interpretation is undefined D ay1must be zero, or a Value error results. o $ usbIf applied, the laccessXTimeout, laccessXTimeoutMask, laccessXTimeoutValues,  le XaccessXTimeoutOptionsMask and laccessXTimeoutOptionsValues fields change the or$ rr^behavior of the AccessX Timeout control, as described in section 4.8. The laccessX1 l d`Timeout must be greater than zero, or a Value error results. The laccessXTimeoutsM> lbA_Mask or laccessXTimeoutValues fields must specify only legal boolean controls, or a sXKK , ]Value error results. The laccessXTimeoutOptionsMask and laccessXTimeoutOptionslX lcValues fields must contain only legal AccessX options or a Value error results. If any the ]bits are set in either values field but not in the corresponding mask, a Match error drD  results. ud  s o gppedHH   mutHHqim Aim$ lZIf present, the lgroupsWrap field specifies the treatment of out-of-range keyboard  rohgroups, as described in section 7.2.2. If the lgroupsWrap field does not specify a legal th"D VaBtreatment for out-of-range groups, a Value error results. 7$ ac_If present, the laffectInternalRealMods field specifies the set of real modifiers to be , D re]changed in the internal modifier definition and the linternalRealMods field specifies Q s _new values for those modifiers. The laffectInternalVirtualMods and linternalVirtualM ^ l iUods fields update the virtual modifier component of the modifier definition that k ltWdescribes the internal modifiers in the same way. If any bits are set in either values HxD  Nfield but not in the corresponding mask field, a Match error results. $ aIf present, the laffectIgnoreLockRealMods field specifies the set of real modifiers to be n Ychanged in the ignore locks modifier definition and the lignoreLockRealMods field d a Vspecifies new values for those modifiers. The laffectIgnoreLockVirtualMods and  lUignoreLockVirtualMods fields update the virtual modifier component of the ignore l , Zlocks modifier definition in the same way. If any bits are set in either values field but D fiDnot in the corresponding mask field, a Match error results. ct$ s_If present, the lperKeyRepeat array specifies the repeat behavior of the individual keycom fiRboard keys. The corresponding core protocol or input extension per-key autorepeat  s ]information is updated to reflect any changes specified in lperKeyRepeat. If the bits ,  rr`that correspond to any out-of-range keys are set in lperKeyRepeat, a Value error tD if results. n,$ cIf present, the laffectEnabledControls and lenabledControls field enable and disable 9 s Xglobal boolean controls. Any controls set in both fields are enabled; any controls that F rthare set in laffectEnabledControls but not in lenabledControls are disabled. Controls that erS  s^are not set in either field are not affected. If any controls are specified in lenabledCon` l altrols but not in laffectEnabledControls, a Match error results. If either field contains rmD thAanything except boolean controls, a Value error results. dd  yut hs inHH !  ecHHXea,,B c,d )ng+Querying and Changing the Keyboard Mapping Va#UT UTd  XkbGetMap 3URUT$ deviceSpec: KB_DEVICESPEC @UPUT abfull, partial:KB_MAPPARTMASK MUNUT enfirstType, nTypes: CARD8 ZULUT al%firstKeySym, firstKeyAction: KEYCODE bgUJUT blnKeySyms, nKeyActions: CARD8 tUHUT se+firstKeyBehavior,firstKeyExplicit: KEYCODE UFUT "nKeyBehaviors,nKeyExplicit: CARD8 UDUT ar(firstModMapKey,firstVModMapKey: KEYCODE . UBUT e !nModMapKeys, nVModMapKeys: CARD8 U@UTD svirtualMods: KB_VMODMASK aU>UT$ a  U<UT sudeviceID: CARD8 ldU:UT  minKeyCode, maxKeyCode: KEYCODE eaU8UT Vapresent: KB_MAPPARTMASK U6UT &firstType, nTypes, nTotalTypes: CARD8 U4UT %firstKeySym, firstKeyAction: KEYCODE U2UT nKeySyms, nKeyActions: CARD8 ,U0UT B totalSyms, totalActions: CARD16 QuU.UT g ,firstKeyBehavior, firstKeyExplicit: KEYCODE Xk*U,UT #nKeyBehaviors, nKeyExplicit: CARD8 @UP7U*UT fu+totalKeyBehaviors, totalKeyExplicit: CARD8 enDU(UT s:)firstModMapKey, firstVModMapKey: KEYCODE fQU&UT CO!nModMapKeys, nVModMapKeys: CARD8 ^U$UT  )totalModMapKeys, totalVModMapKeys: CARD8 tkU"UT DEvirtualMods: KB_VMODMASK KxU UT pltypesRtrn: LISTofKB_KEYTYPE arUUT irsymsRtrn: LISTofKB_KEYSYMMAP TUUT Ma8actsRtrn: { count: LISTofCARD8, acts: LISTofKB_ACTION } odUUT U>$behaviorsRtrn: LISTofKB_SETBEHAVIOR suUUT ldvmodsRtrn: LISTofSETofKEYMASK UUT OD#explicitRtrn: LISTofKB_SETEXPLICIT _MAUUT UTmodmapRtrn: LISTofKB_KEYMODMAP nToUUT U4!vmodMapRtrn: LISTofKB_KEYVMODMAP tUUT   2UUTD nKBErrors: Keyboard, Value, Match, Alloc U UTd U. T$ tKWThis request returns the indicated components of the server and client maps of the key: C  `board specified by ldeviceSpec. The lfull mask specifies the map components to be tV-  f]returned in full; the lpartial mask specifies the components for which some subset of t: AR]the legal elements are to be returned. The server returns a Match error if any compoEG snent is specified in both lfull and lpartial, or a Value error if any undefined bits are set odTD U>+in either lfull or lpartial. UTd "  U iRt: HH # " moHHMO##U4!vm Z tCTo#$ ]Each bit in the lpartial mask controls the interpretation of one or more of the other lBL  request fields, as follows: r$  i\If any of these keyboard map components are specified in lpartial, the corresponding ec eSWvalues must specify a valid subset of the requested components or this request reports ]re e ba Value error. If a keyboard map component is not specified in lpartial, the correD o Gsponding fields must contain zeroes, or a Match error results. d  iNIf any error is generated, the request aborts and does not report any values. $ ts`On successful return, the ldeviceID field reports the X input extension device ID of the $ ^keyboard for which information is being returned, or 0 if the server does not support 1 #^the X input extension. The lminKeyCode and lmaxKeyCode return values report the >D trKminimum and maximum keycodes that are legal for the keyboard in question. uesS$ ws[The lpresent return value lists all of the keyboard map components contained in the rti`D podreply. The bits in lpresent affect the interpretation of the other return values as follows: equd 6If XkbKeyTypesMask is set in lpresent: UBUTd Ut JfirstType and UnTypes specify the types reported in the reply. U@UTd UoeKnTotalTypes reports the total number of types defined for the keyboard geU>UT$ Ust\typesRtrn has UnTypes elements of type KB_KEYTYPE which describe consecutive key viU<UTD or'types starting from UfirstType. d 5If XkbKeySymsMask is set in lpresent: U:UT$ U_firstKeySym and UnKeySyms specify the subset of the keyboard keys for which symbols axKU8UTD vawill be reported. U6UTd Umi\totalSyms reports the total number of keysyms bound to the keys returned in this reply. wsU4UT$ UTsymsRtrn has UnKeySyms elements of type KB_KEYSYMMAP, which describe the U2UTD heEsymbols bound to consecutive keys starting from UfirstKeySym. v d eq8If XkbKeyActionsMask is set in lpresent: U0UT$ UUB`firstKeyAction and UnKeyActions specify the subset of the keys for which actions are UT$U.UTD al reported. 0U,UTd UmbQtotalActions reports the total number of actions bound to the returned keys. UT sTEach entry specifies the a key in the range for which explicit components are being tU<UT  bZreported and the explicit components that are bound to it. Any keys in that range that do U:UTD atGnot have an entry in UexplicitRtrn have no explicit components. sRtd fa9If XkbModifierMapMask is set in lpresent: fU8UT$ mp^The UfirstModMapKey and UnModMapKeys return values report the range of keyboard U6UTD t3keys for which the modifier map is to be reported. pUFU4UT$ fo[The UtotalModMapKeys return value reports the number of keys in the range specified alKU2UTD ur`by UfirstModMapKey and UnModMapKeys that are bound with to one or more modifiers. ic U0UT$ yEPThe UmodmapRtrn return value has UtotalModMapKeys entries of type U.UT  rQKB_KEYMODMAP. Each entry specifies the a key in the range for which the modifier T!U,UT  eWmap is being reported and the set of modifiers that are bound to that key. Any keys in -U*UT  a^that range that do not have an entry in UmodmapRtrn are not associated with any modifi9U(UTD eners by the modifier mapping. eMd ne;If XkbVirtualModMapMask is set in lpresent: s sZU&UT$ `The UfirstVModMapKey and UnVModMapKeys return values report the range of keyboard thfU$UTD d ;keys for which the virtual modifier map is to be reported. e rrU"UT$ UT\The UtotalVModMapKeys return value reports the number of keys in the range specified s~U UT UT_by UfirstVModMapKey and UnVModMapKeys that are bound with to or more virtual mode mUUTD UTifiers. yEUUT$ rnRThe UvmodmapRtrn return value has UtotalVModMapKeys entries of type UUT chQKB_KEYVMODMAP. Each entry specifies the a key in the range for which the virtual eUUT orWmodifier map is being reported and the set of virtual modifiers that are bound to that  aUUT do\key. Any keys in that range that do not have an entry in UvmodmapRtrn are not associenUUTD ie!ated with any virtual modifiers, fd Ma9If XkbVirtualModsMask is set in lpresent: UUT$ dM]The UvirtualMods return value is a mask with one bit per virtual modifier which speciUUT chTfies the virtual modifiers for which a set of corresponding real modifiers is to be dMUUTD va returned.  U UT$  iXThe UvmodsRtrn return value is a list with one entry of type KEYBUTMASK for each eyU UT ndhvirtual modifier that is specified in UvirtualMods. The entries in UvmodsRtrn contain the #UUT  Vreal modifier bindings for the specified virtual modifiers, beginning with the lowest-/UUTD y `numbered virtual modifier that is present in SvirtualMods and proceeding to the highest. etC$ ercIf any of these bits are not set in lpresent, the corresponding numeric fields all have the ry PD @value zero, and the corresponding lists are all of length zero. did )& tlM kprenHH *' & aodHHa ..rtual moEpe. UT UTd fi XkbSetMap URUT$ hideviceSpec: KB_DEVICESPEC &UPUT  b=flags: { SetMapResizeTypes, SetMapRecomputeActions } 3UNUT tupresent: KB_MAPPARTMASK e @ULUT UT minKeyCode, maxKeyCode: KEYCODE ndMUJUT  tfirstType, nTypes: CARD8 tZUHUT nt%firstKeySym, firstKeyAction: KEYCODE gUFUT  nKeySyms, nKeyActions: CARD8 etUDUT  m totalSyms, totalActions: CARD16 t-UBUT y ,firstKeyBehavior, firstKeyExplicit: KEYCODE U@UT  a#nKeyBehaviors, nKeyExplicit: CARD8 U>UT ny+totalKeyBehaviors, totalKeyExplicit: CARD8 , tU<UT um)firstModMapKey, firstVModMapKey: KEYCODE U:UT an!nModMapKeys, nVModMapKeys: CARD8 fU8UT )totalModMapKeys, totalVModMapKeys: CARD8 MU6UT virtualMods: VMODMASK U4UT types: LISTofKB_KEYTYPE U2UT syms: LISTofKB_KEYSYMMAP U0UT .:actions: { count: LISTofCARD8, actions: LISTofKB_ACTION } U.UT C behaviors: LISTofKB_BEHAVIOR U,UT esvmods: LISTofKEYMASK sU*UT explicit: LISTofKB_EXPLICIT AS*U(UT  modmap: LISTofKB_KEYMODMAP KE7U&UTD vmodmap: LISTofKB_KEYVMODMAP RPU$UTd  BErrors: Keyboard, Value, Match, Alloc ]U"UTd s: Rr$  _This request changes the indicated parts of the keyboard specified by ldeviceSpec. With KE WXKB, the effect of a key release is independent of the keyboard mapping at the time of tot D8Zthe release, so this request can be processed regardless of the logical state of the modiD pK&fier keys at the time of the request. $ odYThe lpresent field specifies the keyboard map components contained to be changed. SD U2VThe bits in lpresent affect the interpretation of the other fields as follows: $ LIsIf XkbKeyTypesMask is set in lpresent, lfirstType and lnTypes specify a subset of the UT icUkey types bound to the keyboard to be changed or created. The index of the first key   LVtype to be changed must be less than or equal to the unmodified length of the list of D c ,key types or a Value error results. Th $  tlIf XkbKeyTypesMask is set in lpresent and SetMapResizeTypes is set in ~flags, ec UTYthe server resizes the list of key types bound to the keyboard so that the last key type s&  b_specified by this request is the last element in the list. If the list of key types is shrunk, me 3 Rany existing key definitions that use key types that eliminated are automatically @ ge`assigned key types from the list of canonical key types as described in Section 12.2.3. s M [The list of key types bound to a keyboard must always include the four canonical typesx nTZ x sZand cannot have more than XkbMaxTypesPerKeyx (32) types; any attempt to reduce g heSthe number of types bound to a keyboard below four xor above XkbMaxTypesPere ut f _Keyx causes a Value error. Symbolic names for newly created key types or levels  tD es3within a key type are initialized to None. zeTd (  l heHH ) ( atHH11ied by tF t1$ t.hIf XkbKeyTypesMask is set in lpresent, the types list has lnTypes entries of type pe argKB_KEYTYPE.xEach key type specified in ltypes must be validx or a Valuex error d i"D x.3Yresults. To be valid xa key type definition must meet the following criteria: .UTUTd  t>The UnumLevels for the type must be greater than zero. :URUT$ xhIf the key type is ONE_LEVEL (i.e. index zero in the list of key types), UnumLevels must w FUPUTD be one. peRUNUT$ gIf the key type is TWO_LEVEL or KEYPAD, or ALPHABETIC (i.e. index one, two, or  t^ULUTD es=three in the lest of key types) group width must be two. r$ x XEach key type in types must also be internally consistent, or a Match error results. To D xRbe internally consistent, a key type definition must meet the following criteria: UJUTd yTJEach map entry must specify a resulting level that is legal for the type. UHUT$ YAny real or virtual modifiers specified in any of the map entries must also be specified UFUTD "in the Umods for the type. $ aloIf XkbKeySymsMask is set in lpresent, lfirstKeySym and lnKeySyms specify a subset or  re]of the keyboard keys to which new symbols are to be assigned and ltotalSyms specifies t es[the total number of symbols to be assigned to those keys. xIf any of the keys specified typ xxby lfirstKeySymx and lnKeySymsx are not legal, a Matchx error results. The lsyms list has es l bNnKeySyms elements of type KB_KEYSYMMAP. Each key in the resulting key sym Ma^bol map must be valid and internally consistent or a Value error results. To be valid D inVand internally consistent, xa key symbol map must meet the following criteria: UDUTd . :The key type indices must specify legal result key types. UBUTd p VThe number of groups specified by UgroupInfo must be in the range 04. +U@UT$ albThe Uwidth of the key symbol map must be equal to UnumLevels of the widest key type 7U>UTD bound to the key. CU<UTd  t[The number of symbols, UnSyms, must equal the number of groups times Uwidth. [thW$ syqIf XkbKeyActionsMask is set in lpresent, lfirstKeyAction and lnKeyActions specify a d x]subset of the keyboard keys to which new actions are to be assigned and ltotalActions q  e[specifies the total number of actions to be assigned to those keys. xIf any of the keys mu~ xterspecified by lfirstKeyActionx and lnKeyActionsx are not legal, a Matchx error results. The  lmaicount field of the lactions return value has lnKeyActions elements of type CARD8; each y ]element of lcount specifies the number of actions bound to the corresponding key. The  laliactions list in the lactions field has ltotalActions elements of type KB_ACTION. These T d hactions are assigned to each target key in turn, as specified by lcount. xThe list of actions me xthUassigned to each key must either be empty or have exactly as many actions as the key KD xl/has symbols, or a Matchx error results. ]su$ rdmIf XkbKeyBehaviorsMask is set in lpresent, lfirstKeyBehavior and lnKeyBehaviors a Uspecify a subset of the keyboard keys to which new behaviors are to be assigned, and  lioZtotalKeyBehaviors specifies the total number of keys in that range to be assigned non- tqdefault behavior. xIf any of the keys specified by lfirstKeyBehaviorx and ln/KleyBehaviorsx  xloare not legal, a Matchx error results. The lbehaviors list has ltotalKeyBehaviors ele li" onXments of type KB_BEHAVIOR; each entry of lbehaviors specifies a key in the specid / gnYfied range and a new behavior for that key; any key that falls in the range specified by < lasdfirstBehavior and lnBehaviors for which no behavior is specified in lbehaviors is lI a Yassigned the default behavior, KB_Default. The new behaviors must be legal, or a V , ^Value error results. To be legal, the behavior specified in the XkbSetMap request cD  w mustx: pU:UTd ss\Specify a key in the range indicated by SfirstKeyBehavior and SnKeyBehaviors. th|U8UT$ ig[Not specify the Upermanent flag; permanent behaviors cannot be set or changed using KeyU6UTD lthe XkbSetMap request. d * rr mhaorHH + * eliHHme.. each enGav.UTUT$ n ]If present, the KB_Overlay1 and KB_Overlay2 behaviors must specify a keycode sURUTD ifU@UTD (gegroupRtrn: LISTofKB_MODDEF ny WU>UTd ) c3Errors: Keyboard, Match, Alloc ifydU<UTd *e  ny$ +teTThis request returns the listed compatibility map components for the keyboard speci v +ffied by ldeviceSpec. If ldeviceSpec does not specify a valid keyboard device, a Keyd g. $ ! oy HH h/ . uHHyi**atibilitIUT* +Macboard Error results. On return, ldeviceID reports the input extension identifier of the UTD +llQkeyboard device or 0 if the server does not support the input extension. H*$ ,dexIf lgetAllSI is False, lfirstSI and lnSI specify a subset of the symbol interpretations to 167 , (fbe returned; if used, lnSI must be greater than 0 and all of the elements specified by D ,lyfirstSI and lnSI must be defined or a Value error results. If lgetAllSyms is True, the oQ ,mphserver ignores lfirstSym and lnSyms and returns all of the symbol interpretations defined es^D ,idfor the keyboard. sd -^The lgroups mask specifies the groups for which compatibility maps are to be returned. $ .]The lnTotalSI return value reports the total number of symbol interpretations defined + .ro`for the keyboard. On successful return, the lsiRtrn return list contains the definitions D . dMfor lnSIRtrn symbol interpretations beginning at lfirstSIRtrn. $ /l^The lgroupRtrn return values report the entries in the group compatibility map for any D /16:groups specified in the lgroupsRtrn return value. UT UTd 0XkbSetCompatMap thURUT$ 1eddeviceSpec: KB_DEVICESPEC UPUT 1nSrecomputeActions: BOOL a UNUT 1 rtruncateSI: BOOL lULUT 1rugroups: KB_GROUPMASK "UJUT 1gnfirstSI, nSI: CARD16 n/UHUT 1d si: LISTofKB_SYMINTERPRET MErrors: Keyboard UHUTd ?ng c$ @anWThis request reports the current state of the indicators for the keyboard specified by y a @loubdeviceSpec. If ldeviceSpec does not specify a valid keyboard, a Keyboard error D @he results. $ Aes_On successful return, the ldeviceID field reports the input extension identifier of the pre Airikeyboard or 0 if the server does not support the input extension. The lstate return value  AVreports the state of each of the thirty-two indicators on the specified keyboard. The  A\least-significant bit corresponds to indicator 0, the most significant bit to indicator 31; ngD AUT5if a bit is set, the corresponding indicator is lit. <UF UTd BKBXkbGetIndicatorMap #UDUT$ CUTdeviceSpec: KB_DEVICESPEC 0UBUTD C =which: KB_INDICATORMASK AS=U@UT$ D > JU>UT DoadeviceID: CARD8 ?WU<UT Dwhich: KB_INDICATORMASK ordU:UT Dte!realIndicators: KB_INDICATORMASK qU8UT DnIndicators: CARD8 ice~U6UTD Devmaps: LISTofKB_INDICATORMAP vU4UTd E$Errors: Keyboard, Value heU2UTd F $ GssWThis request returns a subset of the maps for the indicators on the keyboard specified  Gkejby ldeviceSpec. If ldeviceSpec does not specify a valid keyboard device, a Keyboard D Greerror results. e$ HtwdThe lwhich field specifies the subset to be returned; a set bit in the which field indicates iD HstAthat the map for the corresponding indicator should be returned. i $ Ion_On successful return, the ldeviceID field reports the input extension identifier of the pec IUB_keyboard or 0 if the server does not support the input extension. Any indicators speciD: $ Iafied in lrealIndicators are actually present on the keyboard; the rest are virtual indicaT1 IicWtors. Virtual indicators do not directly cause any visible or audible effect when they $Er>D IHchange state, but they do cause XkbIndicatorStateNotify events. rS$ J tWThe lmaps return value reports the requested indicator maps. Indicator maps are ceS`L Jvi#described in section 9.2.1 eybd W2  G qHH X3 2 fs HHne++h field K+ UT UTd K mXkbSetIndicatorMap ingURUT$ LbedeviceSpec: KB_DEVICESPEC &UPUT Ll which: KB_INDICATORMASK 3UNUTD L imaps: LISTofKB_INDICATORMAP heLULUTd M I$Errors: Keyboard, Value veYUJUTd N t in$ Oy ^This request changes a subset of the maps on the keyboard specified by ldeviceSpec. If {D Ol r[deviceSpec does not specify a valid keyboard device, a Keyboard error results. any$ Pe dThe lwhich field specifies the subset to be changed; the lmaps field contains the new D P definitions. h$ QQIf successful, the new indicator maps are applied immediately. If any indicators J Q Mchange state as a result of the new maps, the server generates XkbIndicaD Q*torStateNotify events as appropriate. UH UTd RXkbGetNamedIndicator UFUT$ Sd deviceSpec: KB_DEVICESPEC UDUT SXkledClass: KB_LEDCLASSSPEC UBUT SceledID: KB_IDSPEC U@UTD Sl indicator: ATOM TO+U>UT$ T L8U<UT TKBdeviceID: CARD8 ULEU:UT TErsupported: BOOL RU8UT TUJindicator: ATOM i_U6UT Ty found: BOOL clU4UT T t on: BOOL tyU2UT TierealIndicator: BOOL .U0UT T O ndx: CARD8 pecU.UTD Tifmap: KB_INDICATORMAP cU,UTd U2Errors: Keyboard, Atom, Value U*UTd Vif $ WhagThis request returns information about the indicator specified by lledClass, lledID, and QIf Wlewiindicator on the keyboard specified by ldeviceSpec. The lindicator field specifies the oD We ?name of the indicator for which information is to be returned. ify$ XrofIf ldeviceSpec does not specify a device with indicators, a Keyboard error results. If   Xlle_ledClass does not have the value DfltXIClass, LedFeedbackClass, or KbdATO X T[FeedbackClass, a Value error results. If lledID does not have the value UT$ XcacDfltXIId or specify the identifier of a feedback of the class specified by lledClass on re1 X.othe device specified by ldeviceSpec, a Match error results. If lindicator is not a valid Ke>D Xom=ATOM other than None, an Atom error results. hS$ Y iXThis request is always supported with default class and identifier on the core keyboard ` YcaXdevice. If the request specifies a device other than the core keyboard device or a feedfim YXback class and identifier other than the defaults, and the server does not support indi Xz YeS[cator names or indicator maps for extension devices, the lsupported return value is  Yla]False and the values of the other fields in the reply are undefined. If the client which d 4 Vue rlIDHH 5 4 XHHsp--a feedbaLs - YSissued the unsupported request has also selected to do so, it will also receive an  Yf MXkbExtensionDeviceNotify event which reports the attempt to use an unsupo" YmKported feature, in this case one or both of XkbXI_IndicatorMaps or th /D YidXkbXI_IndicatorNames. D$ Z YmOtherwise, lsupported is True and the ldeviceID field reports the input extension idenYQ Zndetifier of the keyboard or 0 if the server does not support the input extension. The lindi ^ Zl mbcator return value reports the name for which information was requested and the lfound kD Zth^return value is True if an indicator with the specified name was found on the device. d [#If a matching indicator was found: UTUTd \[The Uon return value reports the state of the indicator at the time of the request. -URUT$ ]iThe UrealIndicator return value is True if the requested indicator is actually present on UPUTD ]ce0the keyboard or False if it is virtual. anUNUTd ^[The Undx return value reports the index of the indicator in the requested feedback. ULUT$ _I_[The Umap return value reports the indicator map used by to automatically change the e UJUTD _elWstate of the specified indicator in response to changes in keyboard state or controls. $ `esqIf no matching indicator is found, the lfound return value is False, and the lon, lrealhD `ls IIndicator, lndx, and lmap return values are undefined. rUH UTd aatXkbSetNamedIndicator aUFUT$ be deviceSpec: KB_DEVICESPEC !UDUT bdiledClass: KB_LEDCLASSSPEC .UBUT bledID: KB_IDSPEC u;U@UT be indicator: ATOM t HU>UT bqusetState: BOOL UU<UT bre on: BOOL bU:UT bs setMap: BOOL oU8UT bcacreateMap: BOOL es|U6UTD bmap: KB_SETINDICATORMAP U4UTd cis3Errors: Keyboard, Atom, Access urnU2UTd d i x$ einhThis request changes various aspects of the indicator specified by lledClass, lledID, and se elllhindicator on the keyboard specified by ldeviceSpec. The lindicator argument specifies stD e)the name of the indicator to be updated. t$ flfIf ldeviceSpec does not specify a device with indicators, a Keyboard error results. If  flan_ledClass does not have the value DfltXIClass, LedFeedbackClass, or Kbd fec[FeedbackClass, a Value error results. If lledID does not have the value KB_  fcDfltXIId or specify the identifier of a feedback of the class specified by lledClass on bU: fseothe device specified by ldeviceSpec, a Match error results. If lindicator is not a valid d c'D fKe=ATOM other than None, an Atom error results. x<$ ginXThis request is always supported with default class and identifier on the core keyboard lI gXdevice. If the request specifies a device other than the core keyboard device or a feedndV gt Xback class and identifier other than the defaults, and the server does not support indi fc geS[cator names or indicator maps for extension devices, the lsupported return value is p gla]False and the values of the other fields in the reply are undefined. If the client which } gFeSissued the unsupported request has also selected to do so, it will also receive an lue g fMXkbExtensionDeviceNotify event which reports the attempt to use an unsuped 6 fse sdeHH 7 6 .f HH|otD fKeMha gmLported feature, in this case one or both of XkbXI_IndicatorMaps and h D gXkbXI_IndicatorNames. *$ h gmOtherwise, lsupported is True and the ldeviceID field reports the input extension ideng7 hndetifier of the keyboard or 0 if the server does not support the input extension. The lindi D hl mbcator return value reports the name for which information was requested and the lfound QD hth^return value is True if an indicator with the specified name was found on the device. f$ istZIf no indicator with the specified name is found on the specified device, and the lcres ilnt]ateMap field is True, XKB assigns the specified name to the lowest-numbered indi i_cator that has no name (i.e. whose name is None) and applies the rest of the fields in  iPthe request to the newly named indicator. If no unnamed indicators remain, this D iap,request reports no error and has no effect. to$ jTIf no matching indicator is found or new indicator assigned this request reports no elD jt Ierror and has no effect. Otherwise, it updates the indicator as follows: f, kothIf lsetMap is True, XKB changes the map for the indicator (see section 9.2.1) to foD kn -reflect the values specified in lmap. $ laliIf lsetState is True, XKB attempts to explicitly change the state of the indicator to the f l tcstate specified in lon. The effects of an attempt to explicitly change the state of an indifie  l, Wcator depend on the values in the map for that indicator and are not guaranteed to suchatD l wceed. is/$ m aZIf this request affects both indicator map and state, it updates the indicator map before < mmeUattempting to change its state, so the success of the explicit change depends on the fID m/indicator map values specified in the request. w i^$ nthWIf this request changes the indicator map, it applies the new map immediately to detertesk nfoUmine the appropriate state for the indicator given the new indicator map and the currxD ne rent state of the keyboard. d 8 i i t lHH 9 8 X aHHchdicator u N stl)l)Querying and Changing Symbolic Names c#UT UTdat XkbGetNames ie3URUT$, deviceSpec: KB_DEVICESPEC @UPUTDatwhich: KB_NAMEDETAILMASK aMUNUT$ r ZULUT r. deviceID: CARD8 mgUJUT reswhich: KB_NAMESMASK ortUHUT r u minKeyCode, maxKeyCode: KEYCODE UFUT ratnTypes: CARD8 UDUT rhenKTLevels: CARD16 UBUT rgroupNames: KB_GROUPMASK U@UT rluvirtualMods: KB_VMODMASK .U>UT r nfirstKey: KEYCODE U<UT rca nKeys: CARD8 lU:UT rmeindicators: KB_INDICATORMASK U8UT r a!nRadioGroups, nKeyAliases: CARD8 gU6UT ratpresent: KB_NAMEDETAILMASK U4UTD rtevalueList: LISTofITEMs U2UTd s $Errors: Keyboard, Value U0UTd t 1$ uSThis request returns the symbolic names for various components of the keyboard map> udping for the device specified by ldeviceSpec. The lwhich field specifies the keyboard UTK uce^components for which names are to be returned. If ldeviceSpec does not specify a valid X udebkeyboard device, a Keyboard error results. If any undefined bits in lwhich are non-eD uUF%zero, a Value error results. Tz$ vev_The ldeviceID return value contains the X Input Extension device identifier of the spec_VM vfified device or 0 if the server does not support the input extension. The lpresent and  vlUTZvalueList return values specify the components for which names are being reported. If  vaa component is specified in lpresent, the corresponding element is present in the lval0 vl cueList, otherwise that component has length 0. The components of the lvalueList mapBL v u2appear in the following order, when present:. d : eey ucecoHH ; : .f HHUs $$ Ooa $R$ wr XIf type names are reported, the lnTypes return value reports the number of types Va_ wltedefined for the keyboard, and the list of key type names in lvalueList has lnTypes eleilD wVMments. $ xvi`If key type level names are reported, the list of key type level names in the lvalueList  xeLehas two parts: The lcount array has lnTypes elements, each of which reports the number  xpe_of level names reported for the corresponding key type. The lnames array has lnKTLevl  xlrwbels atoms and reports the names of each type sequentially. The lnKTLevels return value D xe Nis always equal to the sum of all of the elements of the lcount array. $ y`If indicator names are reported, the lindicators mask specifies the indicators for which  ybnames are defined; any indicators not specified in lindicators have the name None.  yrt^The list of indicator names in lvalueList contains the names of the listed indicators,  yeLQbeginning with the lowest-numbered indicator for which a name is defined and proiD yl ceeding to the highest. st$ z n_If virtual modifier names are reported, the lvirtualMods mask specifies the virtual modl  zts_ifiers for which names are defined; any virtual modifiers not specified in lvirtualMods ond- zahave the name None. The list of virtual modifier names in lvalueList contains the c: zy.Rnames of the listed virtual modifiers, beginning with the lowest-numbered virtual GD zmeDmodifier for which a name is defined and proceeding to the highest. es\$ { XIf group names are reported, the lgroupNames mask specifies the groups for which e i {atbnames are defined; any groups not specified in lgroupNames have the name None. The v {in\list of group names in lvalueList contains the names of the listed groups, beginning g  {mbQwith the lowest-numbered group for which a name is defined and proceeding to the oD { highest. z$ |odhIf key names are reported, the lfirstKey and lnKeys return values specify a range of keys if |esWwhich includes all keys for which names are defined; any key that does not fall in the  z |e hrange specified by lfirstKey and lnKeys has the name NullKeyName. The list of key na |vignames in the lvalueList has lnKeys entries and specifies the names of the keys beginning me D |ceat kfirstKey. s$ } `If key aliases are reported, the lnKeyAliases return value specifies the total number of  }s `key aliases defined for the keyboard. The list of key aliases in lvalueList has lnKey }l o]Aliases entries, each of which reports an alias and the real name of the key to which it D } t corresponds. r*$ ~ a[If radio group names are reported, the lnRadioGroups return value specifies the numhIf7 ~orSber of radio groups on the keyboard for which names are defined. The list of radio D ~wh^group names in lvalueList reports the names of each group and has lnRadioGroups QD ~e entries. yd !<  me vli oHH != < vHHKe--fies thePke- UT UTd  XkbSetNames kURUTd deviceSpec: KB_DEVICESPEC (UPUT$  twhich: KB_NAMEDETAILMASK r5UNUT thvirtualMods: KB_VMODMASK BULUT alfirstType, nTypes: CARD8 aOUJUT y firstKTLevel, nKTLevels: CARD8 l\UHUT totalKTLevelNames: CARD16 iUFUT epindicators: KB_INDICATORMASK vUDUT h groupNames: KB_GROUPMASK oUBUT nRadioGroups: CARD8 gU@UT orfirstKey: KEYCODE U>UT alnKeys, nKeyAliases: CARD8 U<UTD ofvalueList: LISTofITEMs oarU:UTd arPErrors: Keyboard, Atom, Value, Match, Alloc U8UTd es $  PThis request changes the symbolic names for the requested components of the key bboard specified by ldeviceSpec. The lwhich field specifies the components for which  ]one or more names are to be updated. If ldeviceSpec does not specify a valid keyboard e  ESadevice, a Keyboard error results. If any undefined bits in lwhich are non-zero, a  alcValue error results. If any error (other than Alloc or Implementation) occurs, &D s:2this request returns without modifying any names. ;$ fThe lwhich and lvalueList fields specify the components to be changed; the type of each H lU>cvalueList entry, the order in which components appear in the lvalueList when specified, UTU rsdand the correspondence between components in lwhich and the entries in the lvalueList bD Th6are as specified for the XkbGetNames request. w$ keSIf keycodes, geometry, symbols, physical symbols, types or compatibility map names eld poZare to be changed, the corresponding entries in the ~valueList must have the value D ifENone or specify a valid ATOM, else an Atom error occurs. r$  uhIf key type names are to be changed, the lfirstType and lnTypes fields specify a range of r  lo\types for which new names are supplied, and the list of key type names in lvalueList m chas lnTypes elements. Names for types that fall outside of the range specified by lfirstnge lh eType and lnTypes are not affected. If this request specifies names for types that are not  UTgpresent on the keyboard, a Match error results. All of the type names in the lvalueList lD [must be valid ATOMs or have the value None, or an Atom error results.x SIf$ xy,VThe names of the first four keyboard types are specified by the XKB extension and   hejcannot be changed; including xany of the xcanonical types in this request xcauses an  se]Access errorx, as does trying to assign the name reserved for a canonical type to one #D xndof the other key types. a8$ fIf key type level names are to be changed, the lfirstKTLevel and lnKTLevels fields specE  Uify a range of key types for which new level names are supplied, and the list of key fR gektype level names in the lvalueList has two parts: The lcount array has lnKTLevels ele th_ Tments, each of which specifies the number of levels for which names are supplied on nal ueUthe corresponding key type; any levels for which no names are specified are assigned ry rrjthe name None. The lnames array has ltotalKTLevels atoms and specifies the names of  d `each type sequentially. The ltotalKTLevels field must always equal the sum of all of the hid #> se w ds HH #? > nicHHY**er key tQ* yp^elements of the lcount array. Level names for types that fall outside of the specified  Urange are not affected. If this request specifies level names for types that are not " tyXpresent on the keyboard, or if it specifies more names for a type than the type has levLe/ cels, a Match error results. All specified type level names must be None or a valid na<D ue'ATOM or an Atom error results. forQ$ e _If indicator names are to be changed, the lindicators mask specifies the indicators for l^  a\which new names are specified; the names for indicators not specified in lindicators evk  a^are not affected. The list of indicator names in lvalueList contains the new names for x s Uthe listed indicators, beginning with the lowest-numbered indicator for which a name  Xis defined and proceeding to the highest. All specified indicator names must be a valid fD  o8ATOM or None, or an Atom error results. t $ re`If virtual modifier names are to be changed, the lvirtualMods mask specifies the virtual o moQmodifiers for which new names are specified; names for any virtual modifiers not  Aldspecified in lvirtualMods are not affected. The list of virtual modifier names in lvalueLto ls.[ist contains the new names for the specified virtual modifiers, beginning with the lowpec rsPest-numbered virtual modifier for which a name is defined and proceeding to the or  bhighest. All virtual modifier names must be valid ATOMs or None, or an Atom error D th results.  $  WIf group names are to be changed, the lgroupNames mask specifies the groups for e  \which new names are specified; the name of any group not specified in lgroupNames is $ ATYnot changed. The list of group names in lvalueList contains the new names for the d1  bTlisted groups, beginning with the lowest-numbered group for which a name is defined mo> neQand proceeding to the highest. All specified group names must be a valid ATOM or pKD tu,None, or an Atom error results. al`$  fIf key names are to be changed, the lfirstKey and lnKeys fields specify a range of keys m owUfor which new names are defined; the name of any key that does not fall in the range z orospecified by lfirstKey and lnKeys is not changed. The list of key names in the lvalueList erD  ^has lnKeys entries and specifies the names of the keys beginning at kfirstKey. $ grcIf key aliases are to be changed, the lnKeyAliases field specifies the length of a new list in   iUof key aliases for the keyboard. The list of key aliases can only be replaced in its t  ffentirety; it cannot be replaced. The list of key aliases in lvalueList has lnKeyAliases  Wentries, each of which reports an alias and the real name of the key to which it correOM D  sponds. $ VXKB does not check key names or aliases for consistency and validity, so applications D ys:should take care not to assign duplicate names or aliases $ ar_If radio group names are to be changed, the lnRadioGroups field specifies the length of y  d Va new list of radio group names for the keyboard. There is no way to edit the list of ! Zradio group names; it can only be replaced in its entirety. The list of radio group names . Ifgin lvalueList reports the names of each group and has lnRadioGroups entries. If the list ; eySof radio group names specifies names for more radio groups than XKB allows (32), a H reUMatch error results. All specified radio group names must be valid ATOMs or have aUD :the value None, or an Atom error results. d '@  xHH 'A @ oalHHan""ons Rys"d )as(Querying and Changing Keyboard Geometry #UT UTd  gXkbGetGeometry be3URUT$ nRdeviceSpec: KB_DEVICESPEC @UPUTD   name: ATOM  MUNUT$ f  iZULUT thdeviceID: CARD8 isgUJUT e name: ATOM tUHUT o found: BOOL t UFUT edwidthMM, heightMM: CARD16 UDUT s #baseColorNdx, labelColorNdx: CARD8 tUBUT esproperties: LISTofKB_PROPERTY U@UT s.colors: LISTofSTRING8 U>UT adshapes: LISTofKB_SHAPE namU<UT sections: LISTofKB_SECTION U:UT redoodads: LISTofKB_DOODAD AU8UTD  gkeyAliases: LISTofKB_KEYALIAS U6UTd Errors: Keyboard U4UTd  m$ . ]This request returns a description of the physical layout of a keyboard. If the lname $ ^field has the value None, or if name is identical to the name of the geometry for the 1 Qu\keyboard specified by ldeviceSpec, this request returns the geometry of the keyboard > KBmspecified by ldeviceSpecx; otherwise, if lname is a valid atom other than None, the sK e Wserver returns the keyboard geometry description with that name in the server database MM:X eof keyboard components (see section 13.0) if one exists. If ldeviceSpec does not spec@e cofify a valid keyboard device, a Keyboard error results. If lname has a value other than rD U:9None or a valid ATOM, an Atom error results. $ LIaOn successful return, the ldeviceID field reports the X Input extension identifier of the   r`keyboard device specified in the request, or 0 if the server does not support the input D lu extension. , $ tinThe lfound return value reports whether the requested xgeometry was available. If lfound  eoais False, no matching xgeometry was found and the remaining fields in the request l idfreply are undefined; if lfound is True, the remaining fields of the reply describe the  inQrequested keyboard geometry. The interpretation of the components that make up a oL  eAkeyboard geometry is described in detail in section 11.0 fd *B er yasHH *C B oHH ++s. SLI+ UT UTd e XkbSetGeometry fieURUT$ npdeviceSpec: KB_DEVICESPEC &UPUT  name: ATOM d d3UNUT  twidthMM, heightMM, CARD16 @ULUT t #baseColorNdx, labelColorNdx: CARD8 luMUJUT shapes: LISTofKB_SHAPE foZUHUT uesections: LISTofKB_SECTION d gUFUT s properties: LISTofKB_PROPERTY tUDUT iscolors: LISTofSTRING8 UBUT doodads: LISTofKB_DOODAD gU@UTD uekeyAliases: LISTofKB_KEYALIAS U>UTd 2Errors: Keyboard, Atom, Value U<UTd e  $ inUThis request changes the reported description of the geometry for the keyboard speci ke^fied by ldeviceSpec. If deviceSpec does not specify a valid keyboard device, a KeyD board error results. s$ [The lname field specifies the name of the new keyboard geometry and must be a valid S UT`ATOMx or an Atom error results. The new geometry is not added to the server data  UNVbase of keyboard components, but it can be retrieved using the XkbGetGeometry  UJSrequest for as long as it is bound to the keyboard. The keyboard geometry symbolic SEC, Wname is also updated from the name field, and an XkbNamesNotify event is generUT9D adated, if necessary. U@N$ kehThe list of lcolors must include at least two definitions, or a Value error results. All UT[ Xcolor definitions in the geometry must specify a legal color (i.e. must specify a valid ybh kindex for one of the entries of the lcolors list) or a Match error results. The lbaseColuD lbo\orNdx and the llabelColorNdx must be different or a Match error results. n$ ryiThe list of lshapes must include at least one shape definition, or a Value error results. r thYIf any two shapes have the same name, a Match error result. All doodads and keys u tG]which specify shape must specify a valid index for one of the elements of the lshapes aD ic(list, or a Match error results. at$ ieZAll section, shape and doodad names must be valid ATOMs or an Atom error results; D  Hthe constant None is not permitted for any of these components. ad orRAll doodads must be of a known type; XKB does not support private doodad types. $ e.XIf, after rotation, any keys or doodads fall outside of the bounding box for a section, rs  Uthe bounding box is automatically adjusted to the minimum size which encloses all of D muits components. a,$ orUIf, after adjustment and rotation, the bounding box of any section or doodad extends s9 r Xbelow zero on either the X or Y axes, the entire geometry is translated so that the min, FD ro'imum extent along either axis is zero. [$ ecZIf, after rotation and translation, any keyboard components fall outside of the rectangle h , ]specified by lwidthMM and lheightMM, the keyboard dimensions are automatically uu orRresized to the minimum bounding box that surrounds all components. Otherwise, the D ny8width and height of the keyboard are left as specified. mud -8D  ri zHH -9E D oadHHbo%%, rs zT%$ maaThe lunder field of any overlay key definitions must specify a key that is in the section a or]that contains the overlay key, or a Match error results. This request does not check " w bthe value of the lover field of an overlay key definition, so applications must be careful /D al%to avoid conflicts with actual keys. D$ r XThis request does not verify that key names or aliases are unique. It also does not verQ d Wify that all key names specified in the geometry are bound to some keycode or that all ^ zeSkeys that are named in the keyboard definition are also available in the geometry. k d VApplications should make sure that keyboard geometry has no internal conflicts and is x Rconsistent with the other components of the keyboard definition, but XKB does not D check for or guarantee it. Tl )+Querying and Changing Per-Client Flags oveUT UTd XkbPerClientFlags URUT$ tideviceSpec: KB_DEVICESPEC UPUT erchange: KB_PCFMASK chUNUT  Tvalue: KB_PCFMASK ULUT ctrlsToChange: KB_BOOLCTRLMASK erUJUT erautoCtrls: KB_BOOLCTRLMASK ati UHUTD l (autoCtrlValues: KB_BOOLCTRLMASK itUFUT$  $UDUT  rdeviceID: CARD8 ri1UBUT orsupported: KB_PCFMASK >U@UT value: KB_PCFMASK KU>UT  nautoCtrls: KB_BOOLCTRLMASK y aXU<UT ey(autoCtrlValues: KB_BOOLCTRLMASK keeU:UTD inwhere: KB_PCFMASK: ion~U8UTd e BErrors: Keyboard, Value, Match, Alloc U6UTd ge t$  c^Changes the client specific flags for the keyboard specified by ldeviceSpec. Reports a D s SKeyboard error if ldeviceSpec does not specify a valid keyboard device. ryi$ r-eAny flags specified in lchange are set to the corresponding values in lvalue, provided BL erPthat the server supports the requested control. Legal per-client-flags are: I$ B_gIf PCF_AutoResetControls is set in both lchange and lvalue, the clients mask of aV ASucontrols to be changed is updated from lctrlsToChange, lautoCtrls, and lautoCtrl/Vlalues. Tc e:]Any controls specified in lctrlsToChange are modified in the auto-reset controls mask p OOafor the client; the corresponding bits from the lautoCtrls field are copied into the auto-}  greset controls mask and the corresponding bits from lautoCtrl/Vlalues are copied into the or  fijauto-reset controls state values. If any controls are specified in lautoCtrl/Vlalues but not d A=F  {ieinHH A>G F alHHupr))erPthUsu) olsin lautoCtrls, a Match error results. If any controls are specified in lautoCtrls but not in D l, 2ctrlsToChange, a Match error results. *$ s iIf PCF_AutoResetControls is set in lchange but not in lvalue, the clients mask of 7  s\controls to be changed is reset to all zeroes (i.e. the client does not change any controls DD ntwhen it exits). g Y$ au`This request reports a Match error if a bit is set in any of the value masks but not in esf _the control mask that governs it or a Value error if any undefined bits are set in any te sD trof the masks. $ /aOn successful return, the ldeviceID field reports the X Input extension identifier of the eD Nkeyboard, or 0 if the server does not support the X Input Extension. $ UaThe lsupported return value reports the set of per-client flags that are supported by the o n Qserver; in this version of XKB, only the XkbPCF_DetectableAutorepeat per-hD . Gclient flag is optional; all other per-client flags must be supported. ge$ vbThe lvalue return value reports the current settings of all per-client flags for the speci oebfied keyboard. The lautoCtrls return value reports the current set of controls to be reset  athwhen the client exits, while the lautoCtrl/Vlalues return value reports the state to which tD a they should be set. al )ar7Using the Servers Database of Keyboard Components 4UT UTd ucXkbListComponents DURUT$ iedeviceSpec: KB_DEVICESPEC QUPUT  tmaxNames: CARD16 ^UNUT  keymapsSpec: STRING8 kULUT InkeycodesSpec: STRING8 xUJUT sutypesSpec: STRING8 repUHUT r-compatMapSpec: STRING8 ed UFUT symbolsSpec: STRING8 eUDUTD  tgeometrySpec: STRING8 UBUT$  U@UT ladeviceID: CARD8 oU>UT agextra: CARD16 U<UT >keymaps,keycodes,types,compatMaps: LISTofKB_COMPONENTNAME U:UTD li4symbols, geometries: LISTofKB_COMPONENTNAME boU8UTd tr Where: vaU6UTd rr5KB_COMPONENTNAME{hints: CARD8, name: STRING8 } hU4UTd s,(Errors: Keyboard, Alloc re(U2UTd  t s=$ VThis request returns one or more lists of keyboard components that are available from J Co]the X server database of keyboard components for the device specified by ldeviceSpec. SW  VThe X server is allowed, but not required or expected, to maintain separate databases d : dfor each keyboard device. A Keyboard error results if ldeviceSpec does not specify a TRqD valid keyboard device. Sd BNH   | HH BOI H oU>HHa:,,>keV,t,$ KQThe lmaxNames field specifies the maximum number of component names to be MD %reported, in total, by this request. *$ NAqThe lkeymapsSpec, lkeycodesSpec, ltypesSpec, lcompatMapSpec, lsymbolsSpec and 7 lYgeometrySpec request fields specify a pattern to be matched against the names of all bDD Tcomponents of the corresponding type in the server database of keyboard components. dY$ \Each pattern uses the ISO Latin-1 encoding and should contain only parentheses, the daf Vwildcard characters ? and * or characters that are permitted in a component class s y _or member name (see section 13.1). Illegal characters in a pattern are simply ignored; D ?no error results if a pattern contains illegal characters. H$ ,kComparison is case-sensitive and, in a pattern, the ? wildcard character matches any s t of^single character except parentheses while the * character matches any number of  keVcharacters except parentheses. xIf an implementation accepts characters other than  xUthose required by XKB, whether or not those characters match either wildcard is also sD x bSimplementation dependent. An empty pattern does not match any component names. key$ d]On successful return, the ldeviceID return value reports the X Input Extension device y dabidentifier of the specified device, or 0 if the server does not support the X input exten Ysion. The lextra return value reports the number of matching component names that mD Wcould not be returned due to the setting of the lmaxNames field in the request. $ oThe lkeymaps, lkeycodes, ltypes, lcompatMaps, lsymbols and lgeometries return the hints ' pa[(see section 13.3) and names of any components from the server database that match ers4D s.the corresponding pattern. chIl n \Section 13.0 describes the X server database of keyboard components in more detail. cacUT UTd XkbGet0KbdByName onsURUT$  edeviceSpec: KB_DEVICESPEC UPUT s.need, want: KB_GBNDETAILMASK cUNUT e load: BOOL ULUT keymapsSpec: STRING8 iUJUT  -keycodesSpec, typesSpec: STRING8 UHUT er$compatMapSpec, symbolsSpec: STRING8 UFUTD sigeometrySpec: STRING8 UDUT$ be fUBUT t deviceID: CARD8 U@UT d minKeyCode, maxKeyCode: KEYCODE oU>UT loaded, newKeyboard: BOOL U<UT Th"found, reported: KB_GBNDETAILMASK U:UT l&map: optional XkbGetMap reply U8UT ur/compat: optional XkbGetCompatMap reply cti)U6UT am6indicators: optional XkbGetIndicatorMap reply 6U4UT  *names: optional XkbGetNames reply CU2UTD 0geometry: optional XkbGetGeometry reply o\U0UTd nt4Errors: Keyboard, Access, Alloc dBiU.UTd UT ~$ ecSAssembles and returns a keymap from the current mapping and specified elements e  UL[from the server database of keymap components for the keyboard specified by ldevice:d BbJ tpS }UFHH BcK J  HHy fviceID: "WUT lmaXSpec, and optionally replaces the current keyboard mapping with the newly generated Th  Kddescription. If ldeviceSpec does not specify a valid keyboard device, a Keyboard at"D Geerror results. ply7$  qThe lkeymapsSpec, lkeycodesSpec, ltypesSpec, lcompatMapSpec, lsymbolsSpec and D legeometrySpec component expressions (see section 13.2) specify the database compoQD , ?nents to be used to assemble the keyboard description. es f$ ap~The lwant field lists the pieces of the keyboard description that the client wants to have s pekreported for the newly constructed keymap. The lneed field lists all of the pieces that H  cmust be reported. If any of the pieces in lneed cannot be loaded from the specified D Sp3names, no description of the keyboard is returned. map$ y uThe lwant and lneed fields can include any combinations of these XkbGetMapBL %ByName (GBN) components: $ ThYIf either field contains a GBN component that depends on xsome database component s x Sfor which the request does not supply an expression, XKB automatically substitutes 2 xe Zthe special pattern % xwhich copies the corresponding component from the current L xDkeyboard description, as described in section 13.2x. he$ xdeeThe lload flag asks the server to replace the current keyboard description for ldeviceu ll{Spec with the newly constructed keyboard description. If lload is True, the request n  t Vmust include component expressions for all of the database componentsx; if any are D xapFmissing, XKB substitutes x%x as described above. $ SIf all necessary components are both specified and found, the new keyboard descrip) c  Ttion is loaded. If the new keyboard description has a different geometry or keycode e , neUrange than the previous keyboard description, XKB sends XkbNewKeyboardNom9 esktify events to all interested clients. See section 14.0 for more information about the urrFD  Beffects of replacing the xkeyboard description on the fly. [$ SIf the range of keycodes changes, clients that have requested XkbNewKeyboardNoesch vi[tify events are not sent any other change notification events by this request. Clients fu  Rthat do not request XkbNewKeyboardNotify events are sent other XKB change d C:L ; ~ apHH C;M L  aHH0 %% all necXnt% ou^notification events (e.g. XkbMapNotify, XkbNamesNotify) as necessary to alert D en9them to as many of the keyboard changes as possible. e*$  d]If no error occurs, the request reply reports the xGBN components that were found and 7 d Tsends a description of any of the resulting keyboard that includes and of the compo DD cinents that were requested. on Y$ ]The ldeviceID return value reports the X Input extension device identifier of the keyofD  Yboard that was used, or 0 if the server does not support the X input extension. i{$ _The lminKeyCode and lmaxKeyCode return values report the legal range of keycodes   Ufor the keyboard description that was created. If the resulting keyboard description  Udoes not include at least one of the key names, client symbols or server symbols comD  eGponents, lminKeyCode and lmaxKeyCode are both 0. al$  \The kloaded return value reports whether or not the existing keyboard definition was ro esmreplaced with the newly created one. If lloaded is True, the lnewKeyboard return value y keQreports whether or not the new map changed the geometry or range of keycodes and sD Qcaused XkbNewKeyboardNotify events for clients that have requested them. e$  kZThe lfound return value reports the GBN components that were present in the keymap  onbthat was constructed by this request. The lreported return value lists the subset of those   es\components for which descriptions follow. xif any of the components specified in the oa lcneed field of the request were not found, lreported is empty, otherwise it contains the m'  ekintersection of the lfound return value with the union of the lneed and lwant request ded4D re fields. orI$ ke\If any of GBN_Types, GBN_ClientSymbols or GBN_ServerSymbols are set edV kin lreported, the lmap return value has the same format as the reply to an XkbGetMap geoc keOrequest and reports the corresponding pieces of the newly constructed keyboard clipD uedescription. $ iIf GBN_CompatMap is set in lreported, the lcompat return value has the same format h  bZas the reply to an XkbGetCompatMap request and reports the symbol interpretations D orPand group compatibility map for the newly constructed keyboard description. $ neiIf GBN_IndicatorMap is set in lreported, the lindicators return value has the same  rsVformat as the reply to an XkbGetIndicatorMap request and reports the physical D Rindicators and indicator maps for the newly constructed keyboard description. $ lshIf GBN_KeyNames or GBN_OtherNames are set in lreported, the lnames return ur me[value has the same format as the reply to an XkbGetNames reply and reports the cor coD  oUresponding set of symbolic names for the newly constructed keyboard description. $ BNjIf GBN_Geometry is set in lreported, the lgeometry return value has the same format  epWas the reply to an XkbGetGeometryMap request and reports the keyboard geometry ,D p 4for the newly constructed keyboard description. esd DN BN n lHH DO N luHH--the replYbG-d ) a.Querying and Changing Input Extension Devices #UT UTd atXkbGetDeviceInfo l3URUT$ oadeviceSpec: KB_DEVICESPEC @UPUT wanted: KB_XIDEVFEATUREMASK thMUNUT t ledClass: KB_LEDCLASSSPEC ZULUT urledID: KB_IDSPEC agUJUT orallButtons: BOOL tUHUTD firstButton, nButtons: CARD8 oUFUT$  o eUDUT  deviceID: CARD8 nUBUT ey!present: KB_XIDEVFEATUREMASK U@UT BN supported: KB_XIFEATUREMASK edU>UT et"unsupported: KB_XIFEATUREMASK U<UT  firstBtnWanted: CARD8 U:UT yMnBtnsWanted: CARD8 porU8UT omfirstBtnRtrn: CARD8 U6UT y nBtnsRtrn: CARD8 dU4UT estotalBtns: CARD8 U2UT hasOwnState: BOOL U0UT l dfltKbdFB, dfltLedFB: KB_IDSPEC U.UT devType: ATOM *U,UT  name: STRING 7U*UT - btnActions: LISTofKB_ACTION CDU(UTD nsleds: LISTofKB_DEVICELEDINFO t]U&UTd  lAErrors: Device, Match, Access, Alloc jU$UTd FE R$ UReports a subset of the XKB-supplied information about the input device specified by T lutTdeviceSpec. Unlike most XKB requests, the device specified for XkbGetDevice e  YInfo need not be a keyboard device. Nonetheless, a Keyboard error results if D lPdeviceSpec does not specify a valid core or input extension devicex. UT$ tB]The lwanted field specifies the types of information to be returned, and controls the D ,interpretation of the other request fields. es$  VIf the server does not support assignment of XKB actions to extension device buttons, D Uthe lallButtons, lfirstButton and lnButtons fields are ignored. t$ IOeOtherwise, if the XkbXI_ButtonActions flag is set in lwanted, the lallButtons,   lcfirstButton and lnButtons fields specify the device buttons for which actions should be pli utlreturned. Setting lallButtons to True requests actions for all device buttons; if lallButci& ltDqtons is False, lfirstButton and lnButtons specify a range of buttons for which actions 3  kare requested. If the device has no buttons or if lfirstButton and lnButtons specify illegal ]Th@ iebuttons, a Match error results.x If lallButtonsx is Truex, ~firstButtonx and ~nButtonsx are fiMD x ignored. fb$ xotWIf the server does not support XKB access to any aspect of the indicators on extension o xjdevices, or if the ~wantedx field does not include any of the indicator flags, the ~ledClassx | x mand lledIDx fields are ignored. Otherwise, lledClassx and lledIDx specify one or more feed xthhback(s) for which indicator information is requested. If lledClassx or lledIDx have illegal td FP i b HH FQ P irHHBu--e of butZ a- x _values, a Valuex error results. If they have legal values but do not specify a keyboard ifyD xWor indicator class feedback for the device in question, a Matchx error results. ue*$ xonXThe ~ledClassx field can specify either KbdFeedbackClassx, LedFeedbackhe7 up]Classx, XkbDfltXIClassx, or XkbAllXIClassesx. If at least one keyboard feedoD xdRback is defined for the specified device, XkbDfltXIClassx is equivalent to Q QKbdFeedbackClassx, otherwise it is equivalent to LedFeedbackClassx. If f^ UXkbAllXIClassesx is specified, this request returns information about both indicalk xIDTtor and keyboard class feedbacks which match the requested identifier, as described xD xbelow. $ x\The ~ledIDx field can specify any valid input extension feedback identifier, XkbD esVfltXIIdx, or XkbAllXIIdsx. The default keyboard feedback is the one that is  x Saffected by core protocol requests; the default led feedback is implementation-speesu x]cific. If XkbAllXIIdsx is specified, this request returns indicator information about cD x >all feedbacks of the class(es) specified by ~ledClassx. $ xneaIf no error results, the /deviceIDx return value reports the input extension device identi xo [fier of the device for which values are being returned. The /supportedx return value s xUreports the set of optional XKB extension device features that are supported by this  x_implementation (see section 15.0) for the specified device, and the unsupported return x D xbe0value reports any lunsupportedx features. el$ xvadIf lhasOwnStatex is Truex, the device is also a keyboard, and any indicator maps bound Id, x kYto the device use the current state and control settings for this device to control autos9 xfecmatic changes. If lhasOwnStatex is Falsex, the state and control settings of the core s rFD xic5keyboard device control automatic indicator changes. a[$ xs)dThe lnamex field reports the X Input Extension name for the device. The ldevTypex field vh xnpUreports the X Input Extension device type. Both fields are provided merely for converuD xTh'nience and are not interpreted by XKB. $ xrt]The /presentx return value reports the kinds of device information being returned, and  xon_controls the interpretation of the remaining fields. The /presentx field consists of the D D /s Ywantedx field from the original request minus the flags for any unsupported features. e$ xs iIf 2XkbXI_ButtonActionsx is set in /presentx, the /totalBtnsx return value reports the n x fctotal number of buttons present on the device, lfirstBtnWantedx and lnBtnsWantedx speclse xd \ify the range of buttons for which actions were requested, and the /firstBtnRtrnx and to l^nB/tnlsRtrn xvalues specify the range of buttons for which actions are reported. The  l vcactionsRtrnx list has lnButtonsRtrnx entries which contain the actions bound to the specicon x Qfied buttons on the device. Any buttons for which actions were requested but not nD x r-returned have the action NoAction()x. t$ xVIf any indicator information is reported, the leds list contains one element for each ) xheerequested feedback. For example, if ~ledClassx is XkbAllXIClassesx and ~ledIDx is d6 `XkbAllXIIdsx, lledsx describes all of the indicators on the device and has one element rnC x nVfor each keyboard or led class feedback defined for the device. If any information at P xanYall is reported about a feedback, the set of physical indicators is also reported in the s]D lirGphysIndicatorsx field of the corresponding element of lledsx. ecir$ xtt`If the server supports assignment of indicator maps to extension device indicators, xand sR xicnif the XkbXI_IndicatorMaps flag is set in lwanted,x each member of lledsx reports  xeqPany indicators on the corresponding feedback to which names have been assigned. td GR rti iscoHH GS R heHHIFo&&G [& x OAny indicators for which no map is reported have the default map, which allows catD xan=explicit changes and does not request any automatic changes. l*$ xde]If the server supports assignment of xindicator names to extension device indicators, a7 xsihand the XkbXI_IndicatorNames flag is set in lwanted,x each member of lledsx g D xsNreports any indicators on the corresponding feedback to which names have been QD xicSassigned. Any indicators for which no name is reported have the name Nonex. f$ xlWIf the server supports XKB access to the state of extension device indicators, and the on s fePXkbXI_IndicatorStatex flag is set in wanted, each member of leds reports the D x7state of the indicators on the corresponding feedback. $ VIf any unsupported features are requested, and the requesting client has selected for  orRthem, the server sends the client an XkbExtensionDeviceNotify event which   aYindicates that an unsupported feature was requested. This event is only generated if the s iZclient which issued the unsupported request has selected for it and, if generated, is not D  fsent to any other clients. xUT UTd lXkbSetDeviceInfo URUT$ rtdeviceSpec: KB_DEVICESPEC UPUT  tchange: KB_XIDEVFEATUREMASK  UNUT gnfirstBtn, nBtns: CARD8 ichULUT edbtnActions:LISTofKB_ACTION f'UJUTD Ifleds: LISTofKB_DEVICELEDINFO @UHUTd teAErrors: Device, Match, Access, Alloc iMUFUTd g  sb$  mUChanges a subset of the XKB-supplied information about the input device specified by po lTdeviceSpec. Unlike most XKB requests, the device specified for XkbGetDeviceie| r YInfo need not be a keyboard device. Nonetheless, a Keyboard error results if D lGdeviceSpec does not specify a valid core or input extension device ven$ d `The lchange field specifies the features for which new values are supplied, and controls iD t 0the interpretation of the other request fields. x$ lVIf the server does not support assignment of XKB actions to extension device buttons, D FEAthe lfirstButton and lnButtons fields are ignored. T$ ctjOtherwise, if the XkbXI_ButtonActions flag is set in lchange, the lfirstB/tn and  linB/tns fields specify a range of buttons for which actions are xspecified in this request. h or{If the device has no buttons or if lfirstB/tn and lnB/tnls specify illegal buttons, a Match ied D icerror results.  $ xd ^Each element of the lledsx list describes the changes for a single keyboard or led feed+ xoeiback. If the lledClassx field of any element of lledsx contains any value other than Kbdi8 fo]FeedbackClassx, LedFeedbackClassx or XkbDfltXIClassx, a Valuex error E xdsaresults. If the lledIdx field of any element of leds contains any value other than a valid id NT itB  fHH NU T trwHHBu,,set in \ t, xd cinput extension feedback identifier or XkbDfltXIIdx, a Valuex error results. If both fieD xZfields are valid, but the device has no matching feedback, a Matchx error results. *d xecGThe fields of each element of lledsx are interpreted as follows: ts.6UTUT$  [If XkbXI_IndicatorMaps is set in Uchange and the server supports XKB assignd fBURUT  Ument of indicator maps to the corresponding feedback, the maps for all indicators on aNUPUT K`the corresponding feedback are taken from Uleds. If the server does not support this fea ZUNUTD  6ture, any maps specified in Uleds are ignored. fULUT$ f ]If XkbXI_IndicatorNames is set in Uchange, and the server supports XKB assignrUJUT Ument of names to indicators for the corresponding feedback, the names for all indica~UHUT t _tors on the corresponding feedback are taken from Uleds. If the server does not support fltUFUT lu^this feature, any names specified in Uleds are ignored. Regardless of whether they are UDUTD  Sused, any names be a valid Atom or None, or an Atom error results. edsUBUT$ edVIf XkbXI_IndicatorState is set in change, and the server supports XKB changes U@UT erYto extension device indicator state, the server attempts to change the indicators on the eU>UT orZcorresponding feedback as specified by Uleds. Any indicator maps bound to the feedU<UTD r Jback are applied, so state changes might be blocked or have side-effects. $  iVIf any unsupported features are requested, and the requesting client has selected for  poRthem, the server sends the client an XkbExtensionDeviceNotify event which  naYindicates that an unsupported feature was requested. This event is only generated if the  heZclient which issued the unsupported request has selected for it and, if generated, is not D d.sent to any other clients. re 'd ) #Debugging the X Keyboard Extension CU: UTd XkbSetDebuggingFlags .SU8UT$  #affectFlags, flags: CARD32 is`U6UT d affectCtrls, ctrls: CARD32 es mU4UTD ermessage: STRING inzU2UT$  s eU0UT ge1currentFlags, supportedFlags: CARD32 sU.UTD s %currentCtrls, supportedCtrls: CARD32 rU,UTd  f $ r _This request sets up various internal XKB debugging xflags and controls. It is intended VIf eaWfor developer use and may be disabled in production servers. If disabled, XkbSetDem, D heDbuggingFlags has no effect xbut returns Successx. $ atlThe /affectFlagsx field specifies the debugging flags to be changed, the lflags field spec i teUifies new values for the changed flags. The interpretation of the debugging flags is n e Timplementation-specificx, but flags are intended to control debugging output and etD xU89should not otherwise affect the operation of the server. 6%$ xaffThe laffectCtrlsx field specifies the debugging controls to be changed, the lctrlsx field 2 xenSspecifies new values for the changed controls. The interpretation of the debugging rte? xU,Vcontrols is implementation-specific, but debugging controls are allowed to affect the LD xd behavior of the server. eda$  [The lmessage field provides a message that the X server can print in any logging or m, n heWdebugging files before changing the flags. The server must accept this field but it is at{D ag.not required to actually display it anywhere. d PV i w luHH PW V nf HHi n))plementa]x)$ xtoUThe X Test Suite makes some assumptions about the implementation of locking modip vePfier keys that do not apply when XKB is present. The XkbDF_DisableLocksx nt" x, Wdebugging control provides a simple workaround to these test suite problems by simls./ n Vply disabling all locking keys. If 2XkbDF_DisableLocksx is enabled, the < alTSA_LockMods and SA_LockGroup actions behave like SA_SetMods and I gSA_LockMods, respectively. If xit is disabled, 2SA_LockMods and SA_LockGroup ng VD inactions behave normally.x k$ x iTImplementations are free to ignore the XkbDF_DisableLocksx debugging control xD xor to define others. $ w ^The lcurrentFlags return value reports the current setting for the debugging flags, if  `applicable.x The lcurrentCtrlsx return value reports the setting for the debugging conen xmohtrols, if applicable. The lsupportedFlagsx and lsupportedCtrlsx fields report the flags and nt x, Scontrols that are recognized by the implementation. Attempts to change unsupported simD x )fields or controls are silently ignored. 2$ LoRIf the XkbSetDebuggingFlags request contains more data than expected, the  avWserver ignores the extra data, but no error results. If the request has less data than xD 2*expected, a Length error results. $  WIf the XkbSetDebuggingFlags reply contains more data than expected, the client ore ab[just ignores any uninterpreted data without reporting an error. If the reply has less data w D la/than expected, a Length error results. or 8l )s, Events N$ le\All XKB events report the time at which they occurred in a field named ltime and the [ s,[device on which they occurred in a field named ldeviceID. XKB uses a single X event anhD  Kcode for all events and uses a common field to distinguish XKB event type. unsd])Tracking Keyboard Replacement UT UTd reXkbNewKeyboardNotify oURUT$ tDtime: TIMESTAMP reUPUT e deviceID: CARD8 , UNUT  changed: KB_NKNDETAILMASK ULUT ro minKeyCode, maxKeyCode: KEYCODE dUJUT oldDeviceID: CARD8 d, UHUT rr&oldMinKeyCode, oldMaxKeyCode: KEYCODE UFUTD ng"requestMajor, requestMinor: CARD8 UDUTd cl t$  PAn XkbNewKeyboardNotify event reports that a new core keyboard has been h)D 8installed. New keyboard notify events can be generated: su6UBUTd 9When the X server detects that the keyboard was changed. sBU@UT$ t UWhen a client installs a new extension device as the core keyboard using the X Input eNU>UTD ur0Extension ChangeKeyboardDevice request. siZU<UT$ SWhen a client issues an XkbGetMapByName request which changes the keycodes t tfU:UTD range or geometry. ybod QX wyb tDHH QY X eceHHNDETAILMMT^$ ey^The lchanged field of the event reports the aspects of the keyboard that have changed, BL YCIand can contain any combination of the event details for this event: p$ XThe server sends an XkbNewKeyboardNotify event to a client only if at least one h} aof the bits that is set in the lchanged field of the event is also set in the appropriate D ey#event details mask for the client. t $ XThe lminKeyCode and lmaxKeyCode fields report the minimum and maximum keyEx Ke\codes that can be returned by the new keyboard. The koldMinKeyCode and loldMaxKey lanTCode fields report the minimum and maximum values that could be returned before Q wVthe change. This event always reports all four values, but the old and new values are D @the same unless NKN_Keycodes is set in lchanged. $ chOOnce a client receives a new keyboard notify event which reports a new keycode d,  YCbrange, the X server reports events from all keys in the new range to that client. Clients  Sthat do not request or receive new keyboard notify events receive events only from   ifkeys that fall in the last range for legal keys reported to that client. See section 14.0  for D ora more detailed explanation. 1$  ^If NKN_Keycodes is set in lchanged, the XkbNewKeyboardNotify event sub> e Vsumes all other change notification events (e.g. XkbMapNotify, XkbNamesNoK  fWtify) that would otherwise result from the keyboard change. Clients who receive an  X ThOXkbNewKeyboardNotify event should assume that all other aspects of the keye  uPboard mapping have changed and regenerate the entire local copy of the keyboard arD  ndescription. e$  a_The ldeviceID field reports the X Input Extension device identifier of the new keyboard ne t _device; loldDeviceID reports the device identifier before the change. This event always ece omcincludes both values, but they are the same unless NKN_DeviceID is set in lchanged. e D  \If the server does not support the X Input Extension, both fields have the value 0. de$ lbThe lrequestMajor and lrequestMinor fields report the major and minor opcode of the  tsRrequest that caused the keyboard change. If the keyboard change was not caused by D t ;some client request, both fields have the value 0. d RbZ od  ctofHH Rc[ Z pg HHer++y of the_+da)io"Tracking Keyboard Mapping Changes #UT UTd ld XkbMapNotify I3URUT$ ictime: TIMESTAMP e @UPUT deviceID: CARD8 deMUNUT eIptrBtnActions: CARD8 eZULUT  tchanged: KB_MAPPARTMASK ysgUJUT   minKeyCode, maxKeyCode: KEYCODE eytUHUT ssfirstType, nTypes: CARD8 tUFUT .%firstKeySym, firstKeyAction: KEYCODE UDUT henKeySyms, nKeyActions: CARD8 UBUT 0,firstKeyBehavior, firstKeyExplicit: KEYCODE ajU@UT ue#nKeyBehaviors, nKeyExplicit: CARD8 nd U>UT e virtualMods: KB_VMODMASK sU<UT ke)firstModMapKey, firstVModMapKey: KEYCODE oU:UTD !nModMapKeys, nVModMapKeys: CARD8 bU8UTd e  u$ UAn XkbMapNotify event reports that some aspect of XKB map for a keyboard has  Qchanged. Map notify events can be generated whenever some aspect of the keyboard _ D 4map is changed by an XKB or core protocol request. UT $ !apYThe ldeviceID field reports the keyboard for which some map component has changed N- !pt]and the lchanged field reports the components with new values, and can contain any of y: !KEpthe values that are legal for the lfull and lpartial fields of the XkbGetMap request. The G !he`server sends an XkbMapNotify event to a client only if at least one of the bits that is ajT !uedset in the lchanged field of the event is also set in the appropriate event details mask for aD !ey the client. Kev$ "UTaThe lminKeyCode and lmaxKeyCode fields report the range of keycodes that are legal D "ev8on the keyboard for which the change is being reported. $ #oIf XkbKeyTypesMask is set in lchanged, the lfirstType and lnTypes fields report a chaD #coZrange of key types that includes all changed types. Otherwise, both fields are 0. $ $appIf XkbKeySymsMask is set in lchanged, the lfirstKeySym and lnKeySyms fields report ,  $y Ta range of keycodes that includes all keys with new symbols. Otherwise, both fields alD $ are 0. req$ %kIf XkbKeyActionsMask is set in lchanged, the lfirstKeyAction and lnKeyActions aj %ueVfields report a range of keycodes that includes all keys with new actions. Otherwise, D %both fields are 0. Ke$ &UTfIf XkbKeyBehaviorsMask is set in lchanged, the lfirstKeyBehavior and lnKeyBe% &lon\haviors fields report a range of keycodes that includes all keys with new key behavior. es2D & &Otherwise, both fields are 0. G$ 'iegIf XkbVirtualModsMask is set in lchanged, lvirtualMods contains all virtual modi fiTD '. bfiers to which a new set of real modifiers is bound. Otherwise, lvirtualMods is 0. i$ ( aIf XkbExplicitComponentsMask is set in lchanged, the lfirstKeyExplicit and Ov (lldWnKeyExplicit fields report a range of keycodes that includes all keys with changed kD ( ;explicit components. Otherwise, both fields are 0. ajd R\  k ke wHH R] \ %HH0UTfIfU~`av$ )ngdIf XkbModifierMapMask is set in lchanged, the lfirstModMapKey and lnModMapra )latXKeys fields report a range of keycodes that includes all keys with changed modifier re"D )0bindings. Otherwise, both fields are 0. i7$ * eIf XkbVirtualModMapMask is set in lchanged, the lfirstVModMapKey and lnVModmD *l OZMapKeys fields report a range of keycodes that includes all keys with changed virtual QD *in9modifier mappings. Otherwise, both fields are 0. jdb)Ex Tracking Keyboard State Changes f UT UTd +udXkbStateNotify chaURUT$ ,time: TIMESTAMP cUPUT ,sedeviceID: CARD8 UNUT ,1mods, baseMods, latchedMods, lockedMods: KEYMASK ULUT , wgroup, lockedGroup: CARD8 UJUT ,baseGroup, latchedGroup: INT16 UHUT ,IfcompatState: KEYMASK UFUT , )"grabMods, compatGrabMods: KEYMASK UDUT ,ge&lookupMods, compatLookupMods: KEYMASK UBUT ,ptrBtnState: BUTMASK f U@UT ,gechanged: KB_STATEPARTMASK U>UT ,edkeycode: KEYCODE $U<UT ,ineventType: CARD8 1U:UTD ,"requestMajor, requestMinor: CARD8 >U8UTd - sS$ .dRAn XkbStateNotify event reports that some component of the XKB state (see ` .e [ section 2.0 ) has changed. State notify events are usually caused by key or pointer gs.m .iePactivity, but they can also result from explicit state changes requested by the UTzD .ta6XkbLatchLockState request or by other extensions. $ /de[The ldeviceID field reports the keyboard on which some state component changed. The UT /lp,_changed field reports the XKB state components (see  section 2.0 ) that have changed coBL / $and contain any combination of: Grd U^ pds K UBHH U_ ^ @UTHH K'' ,a K'U<0$ 0evYThe server sends an XkbStateNotify event to a client only if at least one of the = 0 .`bits that is set in the lchanged field of the event is also set in the appropriate event JD 0iodetails mask for the client. o_$ 1uaVA state notify event reports current values for all state components, even those with lD 1teunchanged values. $ 2_The lkeycode field reports the key or button which caused the change in state while the ice 2ltsdeventType field reports the exact type of event (e.g. KeyPress). If the change in state poD 2coPwas not caused by key or button activity, both fields have the value 0. co$ 3iocThe lrequestMajor and lrequestMinor fields report the major and minor opcodes of the  3arequest that caused the change in state and have the value 0 if it was resulted from key <D 3evor button activity. dc)"Tracking Keyboard Control Changes UR UTd 4XkbControlsNotify UPUT$ 5time: TIMESTAMP d UNUT 5sodeviceID: CARD8 ri)ULUT 5numGroups: CARD8 l6UJUT 5en changedControls: KB_CONTROLMASK noCUHUT 5 c7enabledControls,enabledControlChanges: KB_BOOLCTRLMASK lPUFUT 5unkeycode: KEYCODE ]UDUT 5TheventType: CARD8 ijUBUT 5 (requestMajor: CARD8 twU@UTD 5 wrequestMinor: CARD8 U>UTd 6e $ 7exUAn XkbControlsNotify event reports a change in one or more of the global keyo 7y aboard controls (see section 4.0) or in the internal modifiers or ignore locks masks (see s 7r`section 2.3.1). Controls notify events are usually caused by and XkbSetControls th 7geWrequest, but they can also be caused by keyboard activity or certain core protocol and orD 7input extension requests. $ 8l \The ldeviceID field reports the keyboard for which some control has changed, and the UTD 8lce>changed field reports the controls that have new values. $ 9onaThe lchanged field can contain any of the values that are permitted for the lchangeConK 9l 5[trols field of the XkbSetControls request. The server sends an XkbControlsMaj 9UTgNotify event to a client only if at least one of the bits that is set in the lchanged field y+D 9 cOof the event is also set in the appropriate event details mask for the client. @$ : oYThe lnumGroups field reports the total number of groups defined for the keyboard, .MD : n1whether or not the number of groups has changed. nb$ ;]The lenabledControls field reports the current status of all of the boolean controls, lo ;Xwhether or not any boolean controls changed state. If EnabledControls is set in ts| ;lwh\changed, the lenabledControlChanges field reports the boolean controls that were ntd W` 9on d n HH Wa ` dorHH** fielbkb* ;he`enabled or disabled; if a control is specified in lenabledControlChanges, the value that leD ;s Vis reported for that control in lenabledControls represents a change in state. *$ <at_The lkeycode field reports the key or button which caused the change in state while the th7 <lgrdeventType field reports the exact type of event (e.g. KeyPress). If the change in state nDD <Pwas not caused by key or button activity, both fields have the value 0. anY$ =cThe lrequestMajor and lrequestMinor fields report the major and minor opcodes of the tsf =wharequest that caused the change in state and have the value 0 if it was resulted from key sD =Wor button activity. ondd)*Tracking Keyboard Indicator State Changes UT UTd >XkbIndicatorStateNotify URUT$ ? time: TIMESTAMP kbUPUT ?deviceID: CARD8 orUNUTD ? &stateChanged, state: KB_INDICATORMASK ULUTd @ue a$ A ;RAn XkbIndicatorStateNotify event indicates that one or more of the indicaD AWtors on a keyboard have changed state. Indicator state notify events can be caused by: sta UJUT$ BJAutomatic update to reflect changes in keyboard state (keyboard activity, UHUTD B I!XkbLatchLockState requests). %UFUT$ CcaVAutomatic update to reflect changes in keyboard controls (XkbSetControls, key1UDUTD CesEboard activity, certain core protocol and input extension requests). p=UBUT$ DYExplicit attempts to change indicator state (core protocol and input extension requests, tIU@UTD D k$XkbSetNamedIndicator requests). tiUU>UT$ EPChanges to indicator maps (XkbSetIndicatorMap and XkbSetNamedIndicaataU<UTD EURtor requests). e: u$ FUT^The ldeviceID field reports the keyboard for which some indicator has changed, and the  Fl abstate field reports the new state for all indicators on the specified keyboard. The lstate Fl AeChanged field specifies which of the values in lstate represent a new state for the correT FmaSsponding indicator. The server sends an XkbIndicatorStateNotify event to a I Fefclient only if at least one of the bits that is set in the lstateChanged field of the event is D Fy?also set in the appropriate event details mask for the client. npude)ts(Tracking Keyboard Indicator Map Changes s U: UTd Gr XkbIndicatorMapNotify U8UT$ Heqtime: TIMESTAMP U6UT HmedeviceID: CARD8 ueU4UT Hstate: KB_INDICATORMASK at"U2UTD HtImapChanged: KB_INDICATORMASK a/U0UTd IUT D$ JreSAn XkbIndicatorMapNotify event indicates that the maps for one or more key whQ J hQboard indicators have been changed. Indicator map notify events can be caused by ^D JthBXkbSetIndicatorMap and XkbSetNamedIndicator requests. s$ KwhZThe ldeviceID field reports the keyboard for which some indicator map has changed,  Kor\and the lmapChanged field reports the indicators with changed maps. The server sends ntd Xb ein fid HH Xc b s iHHvt ))ent. npuce) KdiYan XkbIndicatorMapNotify event to a client only if at least one of the bits that  KUTais set in the lmapChanged field of the event is also set in the appropriate event details I"D KNDmask for the client. 7d L_The lstate field reports the current state of all indicators on the specified keyboard. whPdf) hTracking Keyboard Name Changes gedkUT UTd MtiXkbNamesNotify cau{URUT$ Ntime: TIMESTAMP diUPUT NdeviceID: CARD8 toUNUT Nchanged: KB_NAMEDETAILMASK iceULUT NtsfirstType, nTypes: CARD8 eUJUT N c#firstLevelName, nLevelNames: CARD8 UHUT NiefirstKey: KEYCODE UFUT N m(nKeys, nKeyAliases, nRadioGroups: CARD8 UDUT N changedGroupNames: KB_GROUPMASK fiUBUT N changedVirtualMods: KB_VMODMASK U@UTD Nt $changedIndicators: KB_INDICATORMASK U>UTd O $ PVAn XkbNamesNotify event reports a change to one or more of the symbolic names D PisUTd h d n$ it YAn XkbBellNotify event indicates that some client has requested a keyboard bell. e i lhBell notify events are usually caused by Bell, DeviceBell, or XkbBell requests, en i tZbut they can also be generated by the server (e.g. if the AccessXFeedback control D i is active). $ jUThe server sends an XkbBellNotify event to a client if the appropriate event hD jli9details field for the client has the value True. ($ ksyZThe ldeviceID field specifies the device for which a bell was requested, while the 5 kls,ebellClass and lbellID fields specify the input extension class and identifier of the feedHB kpiTback for which the bell was requested. If the reporting server does not support the OOOD k g4input extension, all three fields have the value 0. OWd$ l hnThe lpercent, lpitch and lduration fields report the volume, tone and duration requested q l\for the bell as specified by the XkbBell request. Bell notify events caused by core bB~ lenWprotocol or input extension requests use the pitch and duration specified in the corresXFD ll ,sponding bell or keyboard feedback control. $ maIf the bell was caused by an XkbBell request or by the X server, lname reports an e me \optional symbolic name for the bell and the lwindow field optionally reports the win tD mh Zdow for which the bell was generated. Otherwise, both fields have the value None. $ nt gIf the leventOnly field is True, the server did not generate a sound in response to the If  nerVrequest, otherwise the server issues the beep before sending the event. The eventOnly  ncfield can be True if the AudibleBell control is disabled or if a client explicitly andD nd Frequests leventOnly when it issues an XkbBell request. H2?v BH2-ocut teUU$Q tiAccessDOS provides access to the DOS operating system for people with physical impairments and was develnUUQloped by the Trace R&D Center at the University of Wisconsin. For more information on AccessDOS, contact the UUQopoTrace R&D Center, Waisman Center and Department of Industrial Engineering, University of Wisconsin-Madison Zdo*UUDQllMWI 53705-2280. Phone: 608-262-6966. e-mail: info@trace.wisc.edu. ~my zD ~midE1rata UTUT` .toXkbPCF_SendEventUsesXKBState eVmz yD foVmThE1ly  UTUTl fi 3Section12.5 on page452 A~{ ,|cen~2d re UTUT` lyXI_IndicatorState | {?2 UTUT t @If set, clients can change the state of device indicators using raURUT@ op/the XkbSetExtensionDeviceInfo request. ~]H} L~ th~]si 3re fo ` OSName c]J~ }F t, ]ar 3Indtr ` niValue ~ KQll~-2 )e: 8- UTUT` inKB_KEYVMODMAP   id )rata UTUT` to [key: KEYCODE, vmods: CARD16 ] ~ o~ .UT UTUT`  KB_KEYMODMAP o 6| . UTUT` UT [key: KEYCODE, mods: KEYMASK ] e~g ~g0*2 `  high-order byte nt+*  in+*op0*Xket ` ovalue 9 90* 3 ` meaning NaкKE tкKE0*3nd `  low-order byte ~g  ~g )0+ UTUT UTUTh EY.XkbErr_BadDevice +*  +* at0+UT UTUT` EY0xff m9  9 0+ UTUT` UTdevice not found BкKE  6кKE 0+ UTUT` UT device id ~g  ~g 0, UTUTh /XkbErr_BadClass +*  +* 0, UTUT` 00xfe k9  99 0, UTUT` 0-device found, but is the wrong class кKE  tкKE 00,nd UTUT` lo class id e~g ~g 0-+UT UTUTh  1XkbErr_BadId d+* +* 0-0+ UTUT` 0xfd Y9 90-0+ UTUT ,device found, class ok, but device does not URUT@ *have a feedback with the indicated id кKE  кKE 0- UTUT`  feedback id ~VO  ~VO  / UTUT` KB_INDICATORMAP VO  L 9VOO / UTUT 0[flags: CARD8, UTURUT cemods: KB_MODDEF, t%UPUT   whichMods: 2UNUT groups: KB_GROUPMASK, ?ULUT ,whichGroups: LUJUT@ s ctrls: KB_BOOLCTRLMASK ] ~w @ ~wUT 0  UTUT` KB_OVERLAY w A wUT 00x UTUT [sectionUnder: CARD8, URUT@ rows: LISTofKB_OVERLAYROW ] UT~Ot K ece~O >*ha a UTUT`  tKB_DEVICELEDINFO Ov  OO- > UTUT UTUT ba)[ledClass: KB_LEDCLASSSPEC, URUT ledID: KB_IDSPEC, %UPUT UTphysIndicators: CARD32, MA2UNUT state: CARD32, ?ULUT names: LISTofATOM, /LUJUT@ maps: LISTofKB_INDICATORMAP ]  od   tLeftd  UNRightde  %, UTd !~ Reference@d ! "SKTOCd " ! #IXd # " $UTLOF0 d $ #KBLOTYdf %  &&Adg & %Ld ' (UT d ( ' )8,URd ) ( *STVEd * ) +td + * ,d , + - aUTd - , .EL d . - / d / . 0-d 0 / 1bad 1 0 2EDASd 2 1 3D:d 3 2 4 phd 4 3 5UNd 5 4 6UTd 6 5 7fA/d 7 6 8: KBd 8 7 9d 9 8 :d : 9 ;ghd ; : <d < ; = ncd = < >d > = ? !d ? > @ "UTd @ ? Ad A @ Bf d B A Cg %d C B Dd D C E 'd E D F (d F E G )d G F H *d! H G I +d" I H J ,d# J I K -d$ K J L .d% L K M /d& M L N 0d' N M O 1d( O N P 2d) P O Q 3d* Q P R 4d+ R Q S 5d, S R T 6d- T S U 7d. U T V 8d/ V U W 9d0 W V X :d1 X W Y ;d2 Y X Z <d3 Z Y [ =d4 [ Z \ >d5 \ [ ] ?d6 ] \ ^  @d7 ^ ] _  Ad8 _ ^ ` Bd9 ` _ a Cd: a ` b Dd; b a c Ed< c b d Fd= d c e! Gd> e d f" Hd? f e g# Id@ g f h$ JdA h g i % KdB i h j"& LdC j i k$' MdD k j l&( NdE l k m() OdF m l n** PdG n m o,+ QdH o n p., RdI p o q0- SdJ q p r2. TdK r q s4/ UdL s r t60 VdM t s u81 WdN u t v:2 XdO v u w<3 YdP w v x>4 ZdQ x w y@5 [dR y x zB6 \dS z y {D7 ]dT { z |F8 ^dU | { }H9 _dV } | ~J: `dW ~ } L; adX  ~ N< bdY  P= cdZ R> dd[ T? ed\ V@ fd] XA gd^ ZB hd_ \C id` ^D jda `E kdb bF ldc dG mdd fH } ,f   I6  V MCellBody. f T I  TableTitleT:Table 2. .f   I W L ;CellBody. ~f  I CellHeading@.f  IRequestCellHeading. f   If   CellBody. 66f   IfH Body. f  I CellHeading. f T I TableTitleT:TABLE . . f " J KECellHeadingCntr. f  I CellBodyCntr. f ! IKECellBodyCntr. f F  IBo   CellBody. @  IBody. f  ITA > CellBodyList. ff  I CellHeading. f # I   CellBody. f  I  CellBody. 66 f  IH Body. 66f   IH Body. f   I   CellBody. f T  I f  CellBody.  f   I  CellBullet\t. f Z J KECellHeadingCntr. f  ICellHeadingCntr. f # I  CellBody. f  I f CellBody. 66 f  IH Body. f   I.  CellBody. f  I   fCellBody. f T I   CellBody. @e I  left footer. @e I  header right. @ I  right footer. $  I$ . 1HeadingTOC. H$  IH . 2HeadingTOC. lH@  Il . 3HeadingTOC.  @ # ILevel2IX. $@# ILevel1IX. @# ISpecIX. @# I SortSpecIX. @g I  GroupTitlesIX. @# IIndexIX. @ I Paragraph. H IH . FigureLOF. H IecH . TableTitleLOT. f IFootnote. 66fL IH FirstBodyBody. C6fB  IC U BulletB:\t. ~6f I~   Definition. Z6f+M IZ NoteNoteTextNote\tBody. HH6f$c IZ l ~      e     2 D V h z      Extract . 66f IH Intro. C6f SE IC 1Step S:.\tStep. C6f!S IC Step S:.\t. CCf"r% IC U  BulletCont Bullet Symbol. C6f#B  I C U BulletB:\t. 66f$ c IH Body. 66f%\ I H 4Heading FirstBody. 6 f'}Qc I 6 H ProtoName BigSymbol\t ProtoArgs. HHf(pc IH ProtoArgs ProtoReply. H6f)cuc IH ProtoReplySymbol\t ProtoError. Hf*}q IH ProtoEnd BigSymbol\tBody. 6f+}Q I 6 H ProtoName BigSymbolg\t ProtoArgsB. HH f,p IH ProtoErrorProtoEnd. 6 f-}Q I 6 H ProtoName BigSymbolg\t ProtoArgst. H6f.cuc IH  r ProtoReplySymbol\tr ProtoError. HHf/pc IH r ProtoArgs ProtoReply. HHf0pc I H uN ProtoArgsS ProtoReply. . Hf1}q IH ProtoEnd BigSymbolt\tBody. HHf2cqc I r NProtoReplyTypeSymbolProtoReplyType. f4 I  5r CellBodyList.rf8% IKECellBodyCntr. f9& J KECellHeadingCntr. 6 f;)HQ I }6 3HeadingH:..\t FirstBody. 6 f<)HQ I q6 2Heading H:.\t FirstBody. 6 f=)HQc I 6 2Heading H:.\t FirstBody. 6f>HQ I %6 1HeadingH:.\t FirstBody. f@  I   CellBody.dinfAP I TitleAuthor. fBP I SubTitleAuthor. 6$fCec IZ D EncodingReplySymbol EncodingArgs. HHfD@ IZ ~     %2 Vi z n> d    .f Code ExampleBody. fEp IEquationBody. fFF IFigure Table RuleF:FIGURE . . 66fG@ IH Z ~     2 V z  i e   .g s Function DeclBody. fH IKECellBodyCntr. fI J  KECellHeading. fJ J KECellHeadingCntr. @K I>.   right footer. 66fL@ I H Z ~     2i eV z g si D  y . Structure DeclBody.  fM I TableFootnote. fNT I TableTitleT:TABLE . . fOP IAuthor1Heading. ~6fP I~  Definition. 6 fQHQ I  6 3HeadingH:..\t FirstBody. ZZ6fR$c IExtractContinuation. 66fS4 IH ExtractQualifier. 6 fTHQ I 6 2Heading H:.\t FirstBody. fU I CellHeading. 6fVHQ I 6 1HeadingH:.\t FirstBody. 66fWL IH FirstBodyBody. C6fXB  IC U BulletB:\t. fY  I   CellBullet\t. fZ IFootnote. Z6f[M IZ NoteNoteTextNote\tBody. H6f\uc IH ProtoReplySymbol\t ProtoError. f] I  CellBodyList. 6 f^Q I 6 H ProtoName BigSymbol\t ProtoArgs. 66f_AQ I 6 1AppendixA:Appendix . Body. CCf`% IC U BulletCont Bullet Symbole. teHH6fa$c IZ l ~R y b rr        2 D V h z   ei   Extract. 66fb  IeH  SBody. sC6fcSE IC 1StepA S:.\tStep. A+C6fdS IC Step S:.\t. 66fe IH Intro. ff IH Legalese. 66fg\ I H 4Heading FirstBody. fh I CellBodyCntr. fi  I   CellBody. HHfjpc IHf ProtoArgs ProtoReply. Hfkq IH ProtoEnd BigSymbol\tBody. HHflqc I  ProtoReplyTypeSymbolProtoReplyType. HH fmp IH ProtoErrorProtoEnd. fn IRequestCellHeading. Z6fo@ IcZ  D  EncodingArgs EncodingArgs. s66fpP I 6 H EncodingName EncodingArgs. lfq ICellHeadingCntr. a ڝ I ڝ I) I [ I  ڝ I ) I  ) I  ڝ I tu  I tu  I ڝ! I )" J  ڝ# I ,f/% I [& J  [) I  [* I  [+ I NoteText i_mF. I ProtoLiteral tu / IField ReferenceC)0 I  i_mF2 ILiteral ڝF I )K I  Figure Label wM ISymbol ڝO! I tu S IArgument tu T I tu U IField Reference tu V INew Term uo&W I  New Term uo&X I  Argument )Z J  tu \ IEmphasis ڝ` IHeader wc ISymbol[ڝe I )g I  tu j INew Term tu k IEmphasis tu l IField Reference ڝn IVariable Reference tu q INew Term ڝr I Bullet Symbol tu s I Placeholder tu t IProgram ڝu! I ڝx Iw} I BigSymbol tu ~ IArgument ڝ I ) I  vk Q   ImpliedKeycap vk J  InvisibleKeycap vk I  Keycap vk I   Keycap Small i_mF ILiteral i_mF ILiteral yc> I SansLabel i_mF I ProtoLiteral i_mF I yc> I KeycapInText3w I BigSymbol 3ڝ IBitLabel 3ڝ I Bullet Symbol 3ڝ ICallout 3\S I  Dingbat# IEmphasis EquationVariables# I Field Reference w3 IFunction 3ڝ IHeaderk 3vk Q   ImpliedKeycapI 3vk J  InvisibleKeycap 3vk I  Keycap 3vk I   Keycap Small 3[ I  Keycap Table 3[ I  Keycap Text 3) I  Node Labelyc w3 IPath w3 I Placeholder w3 IProgram 3i_mF ILiteral 3) I Run-In Heading 3yc> I SansLabel w3 I Subscriptqua w3 I Superscript#w ISymbol 3[ I Tree Cap 3ڝ I Type Name  w3 IVariable Reference 3[ I NoteText 3) I  Figure Label 3i_mF I ProtoLiteral #tu  IArgument #tu  INew Term 3yc> I KeycapInText     Ic  Q  J  I  J  Q  I I  I  Q  I@  I@  I  Ib  I@  I IIThin I Medium IIDouble IrenThick@ I Very Thintexh(8otitx pxrmP>8 ycxPx IPxP Q Ih QF=]= 6> I I Il   Request TypesƧ? I I Id b3 9n 6 D Sequence Examples6@ I I I6 hI I eI CenteredExample6A I I I I I I I Example Keys 6B I I Il 2 Protocol Types 6C I I Il 2 Protocol Types= 6D I I IH H Protocol TypesTy 6E I I Il 2 3Protocol Types  6F I I Il 2 Protocol Types 6H I I IH H Request Types 6I I I IH H lProtocol Types 6J I I I I TI I I Protocol Types 6L I I IH H  Request Types 6N I I Il 2 Protocol Types6P I I Iq , I I I Example Keys6Q I I I I I I I e Example Keys $R I I I 4  4 lProtocol Types6S I I I I TI I I CenteredExample 6T I I Il 2 Protocol Types1 De  E~l 2 F 6 I H  ~  IQ~  jIql 2 JC1 l ,J)G j IG >  L  Z h N")l Z <gPw*2 eH lH H H Qx3> Z H H 3S?C$ H ? Q H Q )FVd  IKkp l 2 Tqv l 2 JTw|l 2 C}  Cl 6 ,C l 6 C H C2  C2  ,C l 2 C ~ l 7&C" l 2 'C#(  d4(R0*-g+*p9KE)T3>veE'~e e e~Bf f !f~gs "g, #g~h $h %h~ij &i 'i~jik (j )jC~V(k(j *k +k~lm ,l -l~~Omln .m /ml~Bnmo( 0n 1n~/(onp 2o 3o9~X(poq> 4pv 5p~qpr 6q 7q~Brqs 8r 9r~(srg :s ;s,~V\t(u  <t =t~ut j >u ?u~(vw k @v Av~(wvx ( Bw Cw~/xwy m Dx Ex~K5yxz n Fy Gy~Bzy{ o Hz( Iz~B{z) p J{ K{~|/} q L|> M|v~\}| r N} O}~~s P~ Q~ ~/~g R S ~/(u T U ~ / Vj W ~<:w Xk Y ~i#x Z [ \~w#m ] ^ _5~# ` aB b~# cB d e~# f g h|~# i j} k}~# l~ m~ n~# o p q~# r s t~9 u v w~!9 x y z~09 { | }~?9 ~  ~N9   ~]9   ~l9   ~{9   ~9   ~9   ~9   ~9   ~Z(;   ~h;   ~wP;   ~Q  ~_  ~xP  ~q  ~;[  ~V|(  ~  ~eE  ~P  (~V(  ~|  ~|P  ~V(  ~K$  ~p  ~:  ~3EP  ~Vf((  ~  ~P  ~V(P  ~P(  ~  ~EP  ~4$(  ~#E  ~1E  ~@E  ~OEP  ~^1E(  ~0,    ~?,    ( P~L,  P (  ~Y,     ~f,     ~s,     1~,   @  E~,   E   ~, 1   ~~,    ~~,    ~ ~, P      ~ ~V,(   ~~p,    ~},    ~~, P   ~~\ef " # ~Qf  ! ~mh$%~ Bg()~N*+~~kl,-~]5.,/~01~Pt23~hi45~%5. 67 ~[  : ;~~( f8 9 ~P/ <= ~j h>?~B} @A~a BC~p(P lDE~k)3 FG,~) HI~)> PtJK~uv iNO~ PQ~v  .  /  0 ~~  f1 2 3~ 4 56~ 7B89~ :;<~ P=>?~ @AB~ CDE~ FGH~ IJK~ LMN~ OPQ~v" #'"""~# "$'###~$ #%'$$$~% $&'%%%~& %''&&&~' &(''''~( ')'(((~) (')))*<*+*****#*< +*,O+++v++'0*< ,+-,,,',,=*< -,.-'----~J*< .-/...~..%'W*< /.0/~//&(//d*< 0/10')0000q*< 10211111~*< 212222 2ə*343v33'3 ə*43544'44ə*5465'555ə*657/6666~ə-*7687.077~7ə<*87988/188')əK*98:999029əZ*:9;::::1əi*;:<;;;ə;əx*<;=<<<ə<ə*=<>== =ə =ə*>= > > >ə>2?@???ə??68?N @?A@ə@@79@@@/1[ A@BA8:AAAA02 Ah BAC!B"B#B$B1%B&Bu CB'Cə(C)C*C+C,C<~VWuVvV~WVXwWəxW~XWYyXzX~YXZ{Y@|Y~ZY[}Z~Z~[Z\A[[~$\[]\\[~B]\^]]~Q$^]_^^B~v_^`_B_B~`_a``~a`baa~bacWbb~Vc(bdXccə~ddPcYdd~IklZkk@~Wlkm[ll~f:mln\mm~Vyn(mo]nn~$onp^oo~$pPo_pp~qr`qqB~ rqsarr~$srtbss~>$tsuctWt~c$utv(duXu~$vuPvYv~wxlwZw~xwymx[x~yxzny\y~zy{(oz]z~{z|p{^{~|{P|_|~}~r}`}~~}s~a~~~tb~V(ucW~ovdX~Y~xlZ~$ym[~$Pzn\~{o]~-p^~<_~V~p$~(~~W~e~/~V:(~$~/P~K  ~K   ~-K~GK~a$K~K~K~K~K !"~~#$~%&~'(~)*~2+,~ -.~ /0~ 12~ 34~ 56~ 78~. 9:~J ;<~Y =>~h0 ?@~50 AB~V(( 2CD~~( EF~( GH~ IJ~PP KL~iYMN~wYOP~YQR~YST~]UVW~ ]XYZ5~][\(](~)]^(_`~8]abc~G]def~V]ghi~e]jkl~t]mno~]pqr~]stu~]vwx~]yz{~]|}~~Vx_~& VW~ &!X Y ~!& "Z![!~"&!\"]"~I#'$^#_#~W$'#%`$a$~p%'$&b%c%~&'%'d&e&~''&(f'g'~(''h(i(~){. ))~*(+****~ +(*,+++&+~ ,(+-,&,,!,!~-(,-"-"--#~.) ..$~VO/(| //%~w0 00&~m1Ey1z1'~2{2|2(~]3) }3~3)~O>) >>* K Comment!1"! KYt~ Y, 3Z '#[ '*\ Gz] G~^ G_- G` .a .b .c .d .e .f .g /hijk"l%m(no cp qr$s_ &w "x "y 3$z   n{ y H | z #}  $&~  3Z  3k#$| H %& 3*+ 3-. 3/0 %i12 %m34 %p56 %w78 %P:; %<= K >?1 @A BC dDEYt hFG tHI %MN  OP !RS &~"TU &d#VW- &$XY 4h%Z[ ' &\] '^_ &(bc &)de *fg 'e+ij 5,kl '9-op .rs !/yz 570|} F1~ '2 '3 (4 )5 |B6 F7 L 8 -t9 0: 0;  < 2F=z 8> 9? L@ N{A$ B& C+ D. @E0 NF2 RG4 gH6 wI8 J; K= K L?1 MA NC 6OEY YPG QI AfRN BSP BTS CeUU FVW FIWY zX[ zY] GZ_ z[c {P\e]g {^j Sy` l T~a  p U(b  s Vcz V"d} Yee Yhf [6gj32 I Y R )d  I6BlackT! JL WhiteddA KReddd L Greendd  MBlue8d N?Cyand ON{Magentad PYellow QGrey25 CourierI Times-Bold Times-Italic Times-RomanHelvetica-NarrowHelvetica-Bold HelveticaSymbolSymbolTimes-BoldItalicHelvetica-Narrow-Bold ZapfDingbats ZapfDingbatsCourierUTimes HelveticaSymbol ZapfDingbats NarrowRegularRegularZ BoldRegularItalici2Rݖ[6b[9r]6fjd4xEv|~/E D g5wv D1>7َNG.9kvϖuߕ%G;P@2;#{oΞ.> `JBt(#epY|^+^W jUi5 0 ^gC//b1`G嘧@a"%..c~2;OR%lIe #0z=op12^}aW}hUfr䋴6emX^VAˊO1+иscKEhI`m)S>*-5NKV8A!vm9T1Xgv#Q5ن 1ȸHxتI +!,~oowZ[IށJ!n.Vʄ|Z:5E =?r1r`,PAh֏- rR|cũ 3ƝT/N* טgTѱjlZ),^D>Eĉ{ [gsDog6UB'A ~0%2=& k U#PExw|ٓiyzي@7IL LA8"!GCMY:usB=lBDc\x`Kp.B6Lj$lq qcw96}}>\y"xLdv|)?M%+:UL}{Z(dqU]֯@1+}HK"F,,tX/_t=s,^'`EA^hcca4܇ZuҴw TrV^ .a/:CDT#f b8;jKN6UO <X]ma#)$w@Я̰% m*Sj,E^Ua)2T<,8JX)Kޮ.v*,'*J)a3@Eo.}<2&/ !cn:<)t2'BDz׆sgz(agkjNyV,QP_]Ư3.c@7LWӓ7uh>x#!&x$F D4-kGæu;R v[Zϰ%7lDqf3+MbCdz#sgĖϡ..۞賠Yfjˮ*3Z2)ZWJ,i>%Շyt?dRЛo) leg/rGK>oHmU B[\Q2J\#,g")vq~avt*gJmMhkِ!j ߽&_)CaO}Cl/ iK%=gyމt(@&"!3m}G_h eOMuQi#9Dm+ \c=(w$gkuo3ŗ3iX)1-ɿѩ3p*(#+