常见类型

LISTofFoo

LISTofFOO形式的类型名表示类型为FOO的元素的列表。length字段的大小可能不同(它不一定与FOO的大小相同),并且在某些情况下,它可能是隐式的。在附录b中有详细说明,除非特别注明,否则零长度列表是合法的。

BITMASK LISTofVALUE

BITMASK 和 LISTofVALUE 类型有些特殊。各种请求包含如下形式的参数:

value-mask: BITMASK
value-list: LISTofVALUE

这些参数用于允许客户端指定可选参数的异构集合的子集。

value-mask指定要提供哪些参数;每个这样的参数被分配一个唯一的bit位置。 BITMASK的表示通常会包含比定义的参数更多的位。掩码中未使用的位必须为零(否则服务器会产生一个Value错误)。从掩码中最低位到最高位,每个被设置为1的位都包含一个值。每个值都用四个字节表示,但实际值只占用所需的最低有效字节。未使用字节的值无关紧要。

OR

一种形式 “T1 or … or Tn” 表示所指示类型的并集。单元素类型作为不带大括号的元素给出。

WINDOW

32-bit 值,确保高 3 位为0

WINDOW

32-bit 值,确保高 3 位为0

PIXMAP

32-bit 值,确保高 3 位为0

CURSOR

32-bit 值,确保高 3 位为0

FONT

32-bit 值,确保高 3 位为0

GCONTEXT

32-bit 值,确保高 3 位为0

COLORMAP

32-bit 值,确保高 3 位为0

DRAWABLE

WINDOW 或 PIXMAP

FONTABLE

FONT 或 GCONTEXT

ATOM

32-bit 值,确保高 3 位为0

VISUALID

32-bit 值,确保高 3 位为0

VALUE

32位数量(仅在LISTofVALUE中使用)

BYTE

8 bit 值

INT8

8-bit 有符号整数

INT16

16-bit 有符号整数

INT32

32-bit 有符号整数

CARD8

8-bit 无符号整数

CARD16

16-bit 无符号整数

CARD32

32-bit 无符号整数

TIMESTAMP

CARD32

BITGRAVITY

{
    Forget,
    Static,
    NorthWest,
    North,
    NorthEast,
    West,
    Center,
    East,
    SouthWest,
    South,
    SouthEast
}

WINGRAVITY

{ 
    Unmap,
    Static,
    NorthWest,
    North,
    NorthEast,
    West,
    Center,
    East,
    SouthWest,
    South,
    SouthEast
}

BOOL

{
    True,
    False
}

EVENT

{
    KeyPress,
    KeyRelease,
    OwnerGrabButton,
    ButtonPress,
    ButtonRelease,
    EnterWindow, 
    LeaveWindow,
    PointerMotion,
    PointerMotionHint,
    Button1Motion,
    Button2Motion,
    Button3Motion, 
    Button4Motion, 
    Button5Motion, 
    ButtonMotion, 
    Exposure, 
    VisibilityChange,
    StructureNotify,
    ResizeRedirect,
    SubstructureNotify,
    SubstructureRedirect,
    FocusChange,
    PropertyChange, 
    ColormapChange,
    KeymapState
}

POINTEREVENT

{
    ButtonPress,
    ButtonRelease,
    EnterWindow,
    LeaveWindow,
    PointerMotion,
    PointerMotionHint,
    Button1Motion,
    Button2Motion,
    Button3Motion,
    Button4Motion,
    Button5Motion,
    ButtonMotion,
    KeymapState
}

DEVICEEVENT

{
    KeyPress,
    KeyRelease,
    ButtonPress, 
    ButtonRelease,
    PointerMotion,
    Button1Motion,
    Button2Motion,
    Button3Motion, 
    Button4Motion, 
    Button5Motion,
    ButtonMotion 
}

KEYSYM

32-bit 高三位为0

KEYCODE

CARD8

BUTTON

CARD8

KEYMASK

{
    Shift, 
    Lock,
    Control, 
    Mod1, 
    Mod2, 
    Mod3,
    Mod4, 
    Mod5
}

BUTMASK

{
    Button1,
    Button2, 
    Button3,
    Button4,
    Button5 
}

KEYBUTMASK

KEYMASK or BUTMASK

STRING8

LISTofCARD8

STRING16

LISTofCHAR2B

CHAR2B

[ byte1, byte2: CARD8 ]

POINT

[ x, y: INT16]

RECTANGLE

[x, y: INT16, width, height: CARD16]

ARC

[x, y: INT16, width, height: CARD16, angle1, angle2: INT16]

HOST

[
    family: { 
        Internet,
        InternetV6,
        ServerInterpreted,
        DECnet,
        Chaos
    }
    address: LISTofBYTE
]

RECTANGLE 的[x,y]坐标指定了其左上角。
对STRING16中大字符的主要解释是,它们由两个字节组成,用于索引二维矩阵,因此使用CHAR2B而不是CARD16。这对应于JIS/ISO索引2字节字符的方法。预计大多数大字体将使用2字节矩阵索引来定义。对于使用线性索引构造的大型字体,可以通过将byte1视为最高有效字节来将CHAR2B解释为16位数字。这意味着客户机应该总是先传输最重要字节的16位字符值,因为服务器永远不会对CHAR2B数量进行字节交换。
主机地址的长度、格式和解释是特定于family的(参见ChangeHosts请求)。