xkb: Add XKM file format description.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Acked-by: Dan Nicholson <dbn.lists@gmail.com> Reviewed-by: Daniel Stone <daniel@fooishbar.org>
This commit is contained in:
		
							parent
							
								
									08b22c7faf
								
							
						
					
					
						commit
						0ea2b0bd02
					
				| 
						 | 
					@ -0,0 +1,684 @@
 | 
				
			||||||
 | 
					                        XKM File Format Description
 | 
				
			||||||
 | 
					                                Version 15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Introduction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The XKM file format is the exchange format for XKB keyboard descriptions
 | 
				
			||||||
 | 
					between the server and xkbcomp. Usually, the server forks off xkbcomp,
 | 
				
			||||||
 | 
					xkbcomp compiles the XKM format from the given parameters.
 | 
				
			||||||
 | 
					The resulting XKM file is put into a directory readable by the server and
 | 
				
			||||||
 | 
					then parsed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The XKM format is little more than a binary dump of various XKB-specific
 | 
				
			||||||
 | 
					structures and hence tied to the ABI of the server.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              ❧❧❧❧❧❧❧❧❧❧❧
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1.1 About this file format description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This description was produced by analyzing the XKM parsing code. Parts of
 | 
				
			||||||
 | 
					the file description present in the original format specification may be
 | 
				
			||||||
 | 
					missing. This description thus cannot be a reference document for XKM
 | 
				
			||||||
 | 
					implementations.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					No description of the meaning of the various fields is given here. Refer to
 | 
				
			||||||
 | 
					the XKB protocol specification for more details.
 | 
				
			||||||
 | 
					                              ❧❧❧❧❧❧❧❧❧❧❧
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2. Notations used in this document
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Notation for structures:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  Name of struct
 | 
				
			||||||
 | 
						name of field:		type or fixed value of field
 | 
				
			||||||
 | 
						name of field:		type or fixed value of field
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Data types are identical to those used in the X Protocol specification
 | 
				
			||||||
 | 
					except where noted otherwise. Structs specific to XKM are prefixed with XKM,
 | 
				
			||||||
 | 
					defines specific to the XKB protocol specification are prefixed with Xkb and
 | 
				
			||||||
 | 
					their value is equivalent to that in the protocol specification.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Multiple instances of a given type are denoted in the following form:
 | 
				
			||||||
 | 
						name of field:		LISTofFIELDTYPE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Length specifiers for such fields are usually prefixed with num_. For
 | 
				
			||||||
 | 
					example, a struct containing a num_foo of 8 and a 'foo' field contains 8
 | 
				
			||||||
 | 
					structures of type 'foo'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Variable length padding is specified as pad(x), where x is the length of the
 | 
				
			||||||
 | 
					data to be padded out to a multiple of 4 bytes. For example, given an x of
 | 
				
			||||||
 | 
					10, pad(x) would be the remaining 2 bytes to pad the whole struct to 12
 | 
				
			||||||
 | 
					bytes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A special notation is a variable content struct. In this case, the contents
 | 
				
			||||||
 | 
					of the struct depend on the value of one or more specific fields.
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  Name of struct
 | 
				
			||||||
 | 
						field:			type or fixed value of field
 | 
				
			||||||
 | 
						field:			type or fixed value of field
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
						field ⇒ value 1
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							specific field:		type
 | 
				
			||||||
 | 
							specific field:		type
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        field ⇒ value 2
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							specific field:		type
 | 
				
			||||||
 | 
							specific field:		type
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					This notation denotes that if field is of value 1, this struct contains the
 | 
				
			||||||
 | 
					specific fields listed underneath value 1.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              ❧❧❧❧❧❧❧❧❧❧❧
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3. XKM Format
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The XKM format is a binary format with structs usually being padded to a
 | 
				
			||||||
 | 
					multiple of 4 bytes. No provisions for endianess are provided, the parser is
 | 
				
			||||||
 | 
					left to guess the endianess of the XKM file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              ❧❧❧❧❧❧❧❧❧❧❧
 | 
				
			||||||
 | 
					3.1 Common data types
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMCountedString
 | 
				
			||||||
 | 
						count:			CARD16
 | 
				
			||||||
 | 
						string:			count * CHAR
 | 
				
			||||||
 | 
						pad:			pad(count + 2)
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XKMCountedString is used for user-readable identifiers. Prime example are
 | 
				
			||||||
 | 
					the level names and the section names ("complete", "evdev(inet)", etc.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMGroupBits:		CARD8
 | 
				
			||||||
 | 
						group1			0x1
 | 
				
			||||||
 | 
						group2			0x2
 | 
				
			||||||
 | 
						group3			0x4
 | 
				
			||||||
 | 
						group4			0x8
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              ❧❧❧❧❧❧❧❧❧❧❧
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3.2 Header and Table of Contents
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMHeader
 | 
				
			||||||
 | 
						version:		CARD8
 | 
				
			||||||
 | 
						identifier1:		'm'
 | 
				
			||||||
 | 
						identifier2:		'k'
 | 
				
			||||||
 | 
						idenfifier3:		'x'
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The XKM file format has a 4 byte header identifying the file and the XKM
 | 
				
			||||||
 | 
					version. The header is followed by the table of contents indicating the
 | 
				
			||||||
 | 
					sections present in this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMFileInfo
 | 
				
			||||||
 | 
						type:			CARD8
 | 
				
			||||||
 | 
						min_keycode:		CARD8
 | 
				
			||||||
 | 
						max_keycode:		CARD8
 | 
				
			||||||
 | 
						num_sectioninfo:	CARD8
 | 
				
			||||||
 | 
						present:		CARD16
 | 
				
			||||||
 | 
						pad:			CARD16
 | 
				
			||||||
 | 
						sectioninfo:		LISTofXKMSectionInfo
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					min_keycode and max_keycode specify the keycode range for this keyboard
 | 
				
			||||||
 | 
					descriptions. The core protocol requires min_keycode always be equal to or
 | 
				
			||||||
 | 
					greater than 8.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMSectionInfo
 | 
				
			||||||
 | 
						type:			CARD16
 | 
				
			||||||
 | 
							XkmTypesIndex		0
 | 
				
			||||||
 | 
							XkmCompatMapIndex	1
 | 
				
			||||||
 | 
							XkmSymbolsIndex		2
 | 
				
			||||||
 | 
							XkmIndicatorsIndex	3
 | 
				
			||||||
 | 
							XkmKeyNamesIndex	4
 | 
				
			||||||
 | 
							XkmGeometryIndex	5
 | 
				
			||||||
 | 
							XkmVirtualModsIndex	6
 | 
				
			||||||
 | 
						format:			CARD16
 | 
				
			||||||
 | 
						size:			CARD16
 | 
				
			||||||
 | 
						offset:			CARD16
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Describes the section found in a chunk of a file. This struct is found
 | 
				
			||||||
 | 
					_twice_ in the file per section, once as part of the XKMFileInfo, once at
 | 
				
			||||||
 | 
					the beginning of the actual section (see offset).
 | 
				
			||||||
 | 
					The type specifies the type of the section, the section is to be parsed
 | 
				
			||||||
 | 
					according to this type.
 | 
				
			||||||
 | 
					Size and offset specify the size in bytes and the offset into the file in
 | 
				
			||||||
 | 
					bytes, respectively.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3.3 Sections
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Each section resides at the offset specified in the XKMFileInfo sectioninfo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              ❧❧❧❧❧❧❧❧❧❧❧
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3.3.1 XKMTypes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					An XKMTypes section describes the key types defined in a layout. Roughly
 | 
				
			||||||
 | 
					speaking, a key type defines how many levels a given key has and which
 | 
				
			||||||
 | 
					modifiers change to a particular level.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMTypesSection
 | 
				
			||||||
 | 
						section_info:		XKMSectionInfo
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						num_types:		CARD16
 | 
				
			||||||
 | 
						pad:			CARD16
 | 
				
			||||||
 | 
						types:			LISTofXKMKeyType
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMKeyType
 | 
				
			||||||
 | 
						real_mods:		CARD8
 | 
				
			||||||
 | 
						num_levels:		CARD8
 | 
				
			||||||
 | 
						virt_mods:		CARD16
 | 
				
			||||||
 | 
						num_map_entries: 	CARD8
 | 
				
			||||||
 | 
						num_level_names: 	CARD8
 | 
				
			||||||
 | 
						perserve:	 	CARD8
 | 
				
			||||||
 | 
						pad:			CARD8
 | 
				
			||||||
 | 
						map_entries:		LISTofXKMKTMapEntry
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						mods:			LISTofXKMModsDesc
 | 
				
			||||||
 | 
						level_names:		LISXTofXKMCountedString
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The num_map_entries specifies the number of structs in both map_entries and mods. mods is only present if preserve is TRUE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMKTMapEntry
 | 
				
			||||||
 | 
						level:			CARD8
 | 
				
			||||||
 | 
						real_mods:		CARD8
 | 
				
			||||||
 | 
						virt_mods:		CARD16
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMModsDesc
 | 
				
			||||||
 | 
						real_mods:		CARD8
 | 
				
			||||||
 | 
						pad:			CARD8
 | 
				
			||||||
 | 
						virt_mods:		CARD16
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              ❧❧❧❧❧❧❧❧❧❧❧
 | 
				
			||||||
 | 
					3.3.2 XKMCompatMap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					An XKMCompatMap section describes the actions a keyboard may trigger. This
 | 
				
			||||||
 | 
					ranges from the TerminateServer action to simple modifier bits.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMCompatMap
 | 
				
			||||||
 | 
						section_info:		XKMSectionInfo
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						num_si:			CARD16
 | 
				
			||||||
 | 
						group_mask:		XKMGroupBits
 | 
				
			||||||
 | 
						pad:			CARD8
 | 
				
			||||||
 | 
						si:			LISTofXKMSymInterpreterDesc
 | 
				
			||||||
 | 
						groups:			LISTofXKMModsDesc
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					One XKMModsDesc is present for each bit set in group_mask.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMSymInterpretDesc
 | 
				
			||||||
 | 
						sym:			CARD32
 | 
				
			||||||
 | 
						mods:			CARD8
 | 
				
			||||||
 | 
						match:			CARD8
 | 
				
			||||||
 | 
						virtual_mod:		CARD8
 | 
				
			||||||
 | 
						flags:			CARD8
 | 
				
			||||||
 | 
						action_type:		CARD8
 | 
				
			||||||
 | 
						action_data:		XKMActionData
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Where the action is 7 bytes of CARD8 whose content is determined by
 | 
				
			||||||
 | 
					action_type.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMActionData:
 | 
				
			||||||
 | 
						pad0:			CARD8
 | 
				
			||||||
 | 
						pad1:			CARD16
 | 
				
			||||||
 | 
						pad2:			CARD32
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_SetMods ||
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_LatchMods ||
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_LockMods
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							flags:			CARD8
 | 
				
			||||||
 | 
							mask:			CARD8
 | 
				
			||||||
 | 
							real_mods:		CARD8
 | 
				
			||||||
 | 
							vmods1:			CARD8
 | 
				
			||||||
 | 
							vmods2:			CARD8
 | 
				
			||||||
 | 
							pad:			CARD16
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_SetGroup ||
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_LatchGroup ||
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_LockGroup
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							flags:			CARD8
 | 
				
			||||||
 | 
							group_XXX:		CARD8
 | 
				
			||||||
 | 
							pad0:			CARD8
 | 
				
			||||||
 | 
							pad1:			CARD32
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_MovePtr
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							flags:			CARD8
 | 
				
			||||||
 | 
							high_XXX:		CARD8
 | 
				
			||||||
 | 
							low_XXX:		CARD8
 | 
				
			||||||
 | 
							high_YYY:		CARD8
 | 
				
			||||||
 | 
							low_YYY:		CARD8
 | 
				
			||||||
 | 
							pad:			CARD16
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_PtrBtn ||
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_LockPtrBtn
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							flags:			CARD8
 | 
				
			||||||
 | 
							count:			CARD8
 | 
				
			||||||
 | 
							button:			CARD8
 | 
				
			||||||
 | 
							pad:			CARD32
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_DeviceBtn ||
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_LockLockPtrBtn
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							flags:			CARD8
 | 
				
			||||||
 | 
							count:			CARD8
 | 
				
			||||||
 | 
							button:			CARD8
 | 
				
			||||||
 | 
							device:			CARD8
 | 
				
			||||||
 | 
							pad0:			CARD8
 | 
				
			||||||
 | 
							pad1:			CARD16
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_SetPtrDflt
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							flags:			CARD8
 | 
				
			||||||
 | 
							affect:			CARD8
 | 
				
			||||||
 | 
							valueXXX:		CARD8
 | 
				
			||||||
 | 
							pad0:			CARD32
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_ISOLock
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							flags:			CARD8
 | 
				
			||||||
 | 
							mask:			CARD8
 | 
				
			||||||
 | 
							real_mods:		CARD8
 | 
				
			||||||
 | 
							group_XXX:		CARD8
 | 
				
			||||||
 | 
							affect:			CARD8
 | 
				
			||||||
 | 
							vmods1:			CARD8
 | 
				
			||||||
 | 
							vmods1:			CARD8
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_SwitchScreen
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							flags:			CARD8
 | 
				
			||||||
 | 
							screenXXX:		CARD8
 | 
				
			||||||
 | 
							pad0:			CARD8
 | 
				
			||||||
 | 
							pad1:			CARD32
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_SetControls ||
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_LockControls
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							flags:			CARD8
 | 
				
			||||||
 | 
							ctrls3:			CARD8
 | 
				
			||||||
 | 
							ctrls2:			CARD8
 | 
				
			||||||
 | 
							ctrls1:			CARD8
 | 
				
			||||||
 | 
							ctrls0:			CARD8
 | 
				
			||||||
 | 
							pad:			CARD16
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_RedirectKey
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							new_key:		CARD8
 | 
				
			||||||
 | 
							mods_mask:		CARD8
 | 
				
			||||||
 | 
							mods:			CARD8
 | 
				
			||||||
 | 
							vmods_mask0:		CARD8
 | 
				
			||||||
 | 
							vmods_mask1:		CARD8
 | 
				
			||||||
 | 
							vmods0:			CARD8
 | 
				
			||||||
 | 
							vmods1:			CARD8
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_DeviceValuator
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							device:		CARD8
 | 
				
			||||||
 | 
							v1_what:		CARD8
 | 
				
			||||||
 | 
							v1_idx:			CARD8
 | 
				
			||||||
 | 
							v1_value:		CARD8
 | 
				
			||||||
 | 
							v2_what:		CARD8
 | 
				
			||||||
 | 
							v2_idx:			CARD8
 | 
				
			||||||
 | 
							v2_value:		CARD8
 | 
				
			||||||
 | 
							pad:			CARD8
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_XFree86Private ||
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_Terminate
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							pad0:			CARD8
 | 
				
			||||||
 | 
							pad1:			CARD16
 | 
				
			||||||
 | 
							pad2:			CARD32
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        action_type ⇒ XkbSA_ActionMessage
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							press_msg:		BOOL
 | 
				
			||||||
 | 
							release_msg:		BOOL
 | 
				
			||||||
 | 
							gen_event:		BOOL
 | 
				
			||||||
 | 
							message:		4 * CHAR
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note: XkbSA_ActionMessage is currently unsupported and the contents are
 | 
				
			||||||
 | 
					ignored.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              ❧❧❧❧❧❧❧❧❧❧❧
 | 
				
			||||||
 | 
					3.3.3 XkmSymbols
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The symbols in a keymap define the actual keysyms each key may produce.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMSymbols
 | 
				
			||||||
 | 
						section_info:		XKMSectionInfo
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						min_keycode:		CARD8
 | 
				
			||||||
 | 
						max_keycode:		CARD8
 | 
				
			||||||
 | 
						group_names_mask:	XKMGroupBits
 | 
				
			||||||
 | 
						num_vmod_maps:		CARD8
 | 
				
			||||||
 | 
						group_names:		LISTofXKMCountedString
 | 
				
			||||||
 | 
						keysyms:		XKMKeysymMapDesc
 | 
				
			||||||
 | 
						vmod_maps:		XKMVModMapDesc
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					One group_name is present for each bit set in group_names_mask.
 | 
				
			||||||
 | 
					The number of keysyms present is max_keycode - min_keycode + 1.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMKeysymMapDesc
 | 
				
			||||||
 | 
						width:			CARD8
 | 
				
			||||||
 | 
						num_groups:		CARD8
 | 
				
			||||||
 | 
						modifier_map:		CARD8
 | 
				
			||||||
 | 
						flags:			CARD8
 | 
				
			||||||
 | 
						names:			LISTofXKMCountedString
 | 
				
			||||||
 | 
						syms:			LISTofCARD32
 | 
				
			||||||
 | 
						behavior:		XKMBehaviorDesc
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Presence of names is conditional on the XkmKeyHasTypes flag. The number of
 | 
				
			||||||
 | 
					strings is equal to the number of group bits in group_names_mask in the
 | 
				
			||||||
 | 
					preceeding XKMSymbols section.
 | 
				
			||||||
 | 
					The number of elements in syms is equal to width * num_groups.
 | 
				
			||||||
 | 
					Presence of behavior is conditional on the XkmKeyHasBehavior flag.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMKeyBehaviorDesc
 | 
				
			||||||
 | 
						type:			CARD8
 | 
				
			||||||
 | 
						data:			CARD8
 | 
				
			||||||
 | 
						pad:			CARD16
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMVModMapDesc
 | 
				
			||||||
 | 
						key:			CARD8
 | 
				
			||||||
 | 
						pad:			CARD8
 | 
				
			||||||
 | 
						vmods:			CARD16
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              ❧❧❧❧❧❧❧❧❧❧❧
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3.3.4 XKMIndicators
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMIndicators
 | 
				
			||||||
 | 
						section_info:		XKMSectionInfo
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						num_indicators:		CARD8
 | 
				
			||||||
 | 
						pad0:			CARD8
 | 
				
			||||||
 | 
						pad1:			CARD16
 | 
				
			||||||
 | 
						indicators:		LISTofXKMIndicatorMapDesc
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMIndicatorMapDesc
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						indicator:		CARD8
 | 
				
			||||||
 | 
						flags:			CARD8
 | 
				
			||||||
 | 
						which_mods:		CARD8
 | 
				
			||||||
 | 
						real_mods:		CARD8
 | 
				
			||||||
 | 
						vmods:			CARD16
 | 
				
			||||||
 | 
						which_groups:		CARD8
 | 
				
			||||||
 | 
						groups:			CARD8
 | 
				
			||||||
 | 
						ctrls:			CARD32
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					                              ❧❧❧❧❧❧❧❧❧❧❧
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3.3.5 XKMKeyNames
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMKeyNames
 | 
				
			||||||
 | 
						section_info:		XKMSectionInfo
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						min_keycode:		CARD8
 | 
				
			||||||
 | 
						max_keycode:		CARD8
 | 
				
			||||||
 | 
						num_aliases:		CARD8
 | 
				
			||||||
 | 
						pad:			CARD8
 | 
				
			||||||
 | 
						keynames:		LISTofXKMKeyname
 | 
				
			||||||
 | 
						aliases:		LISTofXKMKeyAlias
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					keynames contains max_keycode - min_keycode + 1 entries.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XkmKeyname
 | 
				
			||||||
 | 
						name:			4 * CHAR8
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XkmKeyAlias
 | 
				
			||||||
 | 
						real:			XkmKeyname
 | 
				
			||||||
 | 
						alias:			XkmKeyname
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              ❧❧❧❧❧❧❧❧❧❧❧
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3.3.5 XKMGeometry
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMGeometry
 | 
				
			||||||
 | 
						section_info:		XKMSectionInfo
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						width_mm:		CARD16
 | 
				
			||||||
 | 
						height_mm:		CARD16
 | 
				
			||||||
 | 
						base_color_ndx:		CARD8
 | 
				
			||||||
 | 
						label_color_ndx:	CARD8
 | 
				
			||||||
 | 
						num_properties:		CARD16
 | 
				
			||||||
 | 
						num_colors:		CARD16
 | 
				
			||||||
 | 
						num_shapes:		CARD16
 | 
				
			||||||
 | 
						num_sections:		CARD16
 | 
				
			||||||
 | 
						num_doodads:		CARD16
 | 
				
			||||||
 | 
						num_key_aliases:	CARD16
 | 
				
			||||||
 | 
						pad:			CARD16
 | 
				
			||||||
 | 
						label_font:		XKMCountedString
 | 
				
			||||||
 | 
						properties:		LISTofXKMGeomProperty
 | 
				
			||||||
 | 
						colors:			LISTofXKMCountedString
 | 
				
			||||||
 | 
						shapes:			LISTofXKMGeomShape
 | 
				
			||||||
 | 
						sections:		LISTofXKMGeomSection
 | 
				
			||||||
 | 
						doodads:		LISTofXKMGeomDoodad
 | 
				
			||||||
 | 
						key_aliases:		LISTofXKMKeyAlias
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMGeomProperty
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						value:			XKMCountedString
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMGeomShape
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						num_outlines:		CARD8
 | 
				
			||||||
 | 
						primary_idx:		CARD8
 | 
				
			||||||
 | 
						approx_idx:		CARD8
 | 
				
			||||||
 | 
						pad:			CARD8
 | 
				
			||||||
 | 
						outlines:		LISTofXKMOutlineDesc
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMOutlineDesc
 | 
				
			||||||
 | 
						num_points:		CARD8
 | 
				
			||||||
 | 
						corner_radius:		CARD8
 | 
				
			||||||
 | 
						pad:			CARD16
 | 
				
			||||||
 | 
						points:			LISTofXKMPointDesc
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMPointDesc
 | 
				
			||||||
 | 
						x:			INT16
 | 
				
			||||||
 | 
						y:			INT16
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMGeomSection
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						top:			INT16
 | 
				
			||||||
 | 
						left:			INT16
 | 
				
			||||||
 | 
						width:			CARD16
 | 
				
			||||||
 | 
						height:			CARD16
 | 
				
			||||||
 | 
						angle:			INT16
 | 
				
			||||||
 | 
						priority:		CARD8
 | 
				
			||||||
 | 
						num_rows:		CARD8
 | 
				
			||||||
 | 
						num_doodads:		CARD8
 | 
				
			||||||
 | 
						num_overlays:		CARD8
 | 
				
			||||||
 | 
						pad:			CARD16
 | 
				
			||||||
 | 
						rows:			LISTofXKMRowDesc
 | 
				
			||||||
 | 
						doodads:		LISTofXKMGeomDoodad
 | 
				
			||||||
 | 
						overlays:		LISTofXKMGeomOverlay
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMRowDesc
 | 
				
			||||||
 | 
						top:			INT16
 | 
				
			||||||
 | 
						left:			INT16
 | 
				
			||||||
 | 
						num_keys:		CARD8
 | 
				
			||||||
 | 
						vertical:		BOOL
 | 
				
			||||||
 | 
						pad:			CARD16
 | 
				
			||||||
 | 
						keys:			XKMKeyDesc
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMKeyDesc
 | 
				
			||||||
 | 
						name:			XKMKeyname
 | 
				
			||||||
 | 
						gap:			INT16
 | 
				
			||||||
 | 
						shape_idx:		CARD8
 | 
				
			||||||
 | 
						color_idx:		CARD8
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMGeomDoodad
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						type:			CARD8
 | 
				
			||||||
 | 
						priority:		CARD8
 | 
				
			||||||
 | 
						top:			INT16
 | 
				
			||||||
 | 
						left:			INT16
 | 
				
			||||||
 | 
						pad1:			CARD16
 | 
				
			||||||
 | 
						pad2:			CARD32
 | 
				
			||||||
 | 
						pad3:			CARD32
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        type ⇒ XkbOutlineDoodad ||
 | 
				
			||||||
 | 
					        type ⇒ XkbSolideDoodad
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							type:			CARD8
 | 
				
			||||||
 | 
							priority:		CARD8
 | 
				
			||||||
 | 
							top:			INT16
 | 
				
			||||||
 | 
							left:			INT16
 | 
				
			||||||
 | 
							angle:			INT16
 | 
				
			||||||
 | 
							color_idx:		CARD8
 | 
				
			||||||
 | 
							shape_idx:		CARD8
 | 
				
			||||||
 | 
							pad0:			CARD16
 | 
				
			||||||
 | 
							pad1:			CARD32
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        type ⇒ XkbTextDoodad
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							type:			CARD8
 | 
				
			||||||
 | 
							priority:		CARD8
 | 
				
			||||||
 | 
							top:			INT16
 | 
				
			||||||
 | 
							left:			INT16
 | 
				
			||||||
 | 
							angle:			INT16
 | 
				
			||||||
 | 
							width:			CARD16
 | 
				
			||||||
 | 
							height:			CARD16
 | 
				
			||||||
 | 
							color_idx:		CARD8
 | 
				
			||||||
 | 
							pad0:			CARD8
 | 
				
			||||||
 | 
							pad1:			CARD16
 | 
				
			||||||
 | 
							text:			XKMCountedString
 | 
				
			||||||
 | 
							font:			XKMCountedString
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        type ⇒ XkbIndicatorDoodad
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							type:			CARD8
 | 
				
			||||||
 | 
							priority:		CARD8
 | 
				
			||||||
 | 
							top:			INT16
 | 
				
			||||||
 | 
							left:			INT16
 | 
				
			||||||
 | 
							shape_idx:		CARD8
 | 
				
			||||||
 | 
							on_color_idx:		CARD8
 | 
				
			||||||
 | 
							off_color_idx:		CARD8
 | 
				
			||||||
 | 
							pad0:			CARD8
 | 
				
			||||||
 | 
							pad1:			CARD16
 | 
				
			||||||
 | 
							pad2:			CARD32
 | 
				
			||||||
 | 
						───
 | 
				
			||||||
 | 
					        type ⇒ XkbLogoDoodad
 | 
				
			||||||
 | 
						⇒
 | 
				
			||||||
 | 
							type:			CARD8
 | 
				
			||||||
 | 
							priority:		CARD8
 | 
				
			||||||
 | 
							top:			INT16
 | 
				
			||||||
 | 
							left:			INT16
 | 
				
			||||||
 | 
							angle:			INT16
 | 
				
			||||||
 | 
							color_idx:		CARD8
 | 
				
			||||||
 | 
							shape_idx:		CARD8
 | 
				
			||||||
 | 
							pad0:			CARD16
 | 
				
			||||||
 | 
							pad1:			CARD32
 | 
				
			||||||
 | 
							logo_name:		XKMCountedString
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WARNING: XKMGeomDoodad has variable length depending on the type.
 | 
				
			||||||
 | 
					NOTE: The current server implementation does not use all fields of all
 | 
				
			||||||
 | 
					structures.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMOverlayDesc
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						num_rows:		CARD8
 | 
				
			||||||
 | 
						pad0:			CARD8
 | 
				
			||||||
 | 
						pad1:			CARD16
 | 
				
			||||||
 | 
						rows:			LISTofXKMOverlayRowDesc
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMOverlayRowDesc
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						row_under:		CARD8
 | 
				
			||||||
 | 
						num_keys:		CARD8
 | 
				
			||||||
 | 
						pad:			CARD16
 | 
				
			||||||
 | 
						keys:			LISTofXKMOverlayKeyDesc
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMOverlayKeyDesc
 | 
				
			||||||
 | 
						over:			XKMKeyname
 | 
				
			||||||
 | 
						under:			XKMKeyname
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              ❧❧❧❧❧❧❧❧❧❧❧
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3.3.6 XKMVirtualMods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					┌───
 | 
				
			||||||
 | 
					  XKMOverlayRowDesc
 | 
				
			||||||
 | 
						section_info:		XKMSectionInfo
 | 
				
			||||||
 | 
						name:			XKMCountedString
 | 
				
			||||||
 | 
						bound_mask:		SETofVMODBITS
 | 
				
			||||||
 | 
						named_mask:		SETofVMODBITS
 | 
				
			||||||
 | 
						vmods:			LISTofCARD8
 | 
				
			||||||
 | 
						pad:			pad(vmods)
 | 
				
			||||||
 | 
						names:			LISTofXKMCountedString
 | 
				
			||||||
 | 
					└───
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						VMODBITS:		CARD16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Number of elements in vmods is equal to the number of bits set in
 | 
				
			||||||
 | 
					bound_mask. The padding completes vmods to a multiple of 4 byte units.
 | 
				
			||||||
 | 
					Number of elements in names is equal to the number of bits set in
 | 
				
			||||||
 | 
					named_mask.
 | 
				
			||||||
		Loading…
	
		Reference in New Issue