入り口に戻る

原文はこちら。
翻訳にあたって、オープンソースグループ・ジャパンの MIT ライセンスの訳、X Japanese Documentation Project のXlib - C Language X Interfaceの日本語訳、及び「X プロトコル リファレンス・マニュアル」(Adrian Nye著、石川和也訳、ソフトバンク発行、1993年5月20日第3刷)を参考にした。

# X Window System Protocol(日本語訳)

## X Consortium Standard

### Robert W. Scheifler

X Consortium, Inc.

X Version 11, Release 7.7

Version 1.0

Copyright © 1986, 1987, 1988, 1994, 2004 The Open Group

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name of the Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the Open Group.

X Window System is a trademark of The Open Group.

(訳)

(本ソフトウェアおよび関連する文書のファイル（以下「ソフトウェア」）の複製を取得した全ての人物に対し、以下の条件に従うことを前提に、ソフトウェアを無制限に扱うことを無償で許可する。これには、ソフトウェアの複製を使用、複製、改変、結合、公開、頒布、再許諾、および/または販売する権利、およびソフトウェアを提供する人物に同様の行為を許可する権利が含まれるが、これらに限定されない。)

(上記の著作権表示および本許諾表示を、ソフトウェアの全ての複製または実質的な部分に記載するものとする。)

(ソフトウェアは「現状有姿」で提供され、明示的であるか黙示的であるかを問わず、いかなる種類の保証も行われない。ここでいう保証には、商品性、特定目的への適合性、および権利の非侵害性に関する保証も含まれるが、これらに限定されるものではない。THE OPEN GROUP は、契約、不法行為、またはその他の行為であるかを問わず、ソフトウェアまたはソフトウェアの使用もしくはその他に取り扱いに起因または関連して生じるいかなる請求、損害賠償、その他の責任について、一切の責任を負わない。)

(Open Group の名称は、この表示に記載されている場合を除き、Open Group の事前の書面による承認を得ずに、宣伝であろうとその他の形であろうと、ソフトウェアの販売を促進するもの、またはソフトウェアの使用その他の扱いを奨励するものに使用してはならない。)

(X Window System は The Open Group の商標である。)

## 謝辞

X11 プロトコルの主要な貢献者は、

- Dave Carver (Digital HPW)

- Branko Gerovac (Digital HPW)

- Jim Gettys (MIT/Project Athena, Digital)

- Phil Karlton (Digital WSL)

- Scott McGregor (Digital SSG)

- Ram Rao (Digital UEG)

- David Rosenthal (Sun)

- Dave Winchell (Digital UEG)

初期のサーバの実装者(有益な情報入力を齎してくれた)は、

- Susan Angebranndt (Digital)

- Raymond Drewry (Digital)

- Todd Newman (Digital)

査読を引き受けてくれた方々(有益な情報入力を齎してくれた)は、

- Andrew Cherenson (Berkeley)

- Burns Fisher (Digital)

- Dan Garfinkel (HP)

- Leo Hourvitz (Next)

- Brock Krizan (HP)

- David Laidlaw (Stellar)

- Dave Mellinger (Interleaf)

- Ron Newman (MIT)

- John Ousterhout (Berkeley)

- Andrew Palay (ITC CMU)

- Ralph Swick (MIT)

- Craig Taylor (Sun)

- Jeffery Vroom (Stellar)

Digital 社の UEG Documentation Group の Al Mento は、本文書の書式を整えてくれた。

この文書は、プロトコルを完全に理解するために必要な原理(rationale：設計理由)や実用法を提供するものではないし、完全なシステムの中でプロトコルを大局的に捉えようとしたものでもない。

このプロトコルには多くの管理機構が含まれているが、それらは通常のアプリケーションには不要なものである。特定のユーザ・インターフェイス１つを構築するために全ての機構が必要になるわけではない。本プロトコルは機構(mechanism)を提供するものであって方針(policy)を提供するものではない、という点は重要である。

Robert W. Scheifler

X Consortium, Inc.

## 第１章　プロトコルの書式

## リクエストの書式

全てのリクエストには、８ビットの major opcode (主たる命令コード)と１６ビットの length フィールドが入っており、length フィールドの数値の単位は４バイトである。全てのリクエストは４バイトのヘッダ(主命令コード、length フィールド、及びデータ・バイト１つが入る)を持っており、このヘッダの後に０個以上のデータ・バイトが続く。length フィールドは、そのリクエスト全体(ヘッダを含む)の長さを表す。リクエストの length フィールドは、同リクエストを収容するのに要する最小の長さと等しくなければならない。length フィールドで指定された長さが必要な長さよりも長かったり短かったりすると、エラーが発生する。リクエスト中の「未使用」(unused)バイトは、0 でなくてもかまわない。主命令コード(major opcode)の 128 から 255 は、extensions (拡張機能)のために予約されている。１つの拡張が複数のリクエストを持つことを想定しているので、拡張のリクエストは通常(typically)、リクエストのヘッダの第２バイトに minor opcode (従たる命令コード)を追加で持つ。但し、この従命令コードは元より、拡張リクエストにおける他の全てのフィールドの並び順と解釈は、コア・プロトコル(本体のプロトコル)では定めない(訳註：通常(typically)、従命令コードがある場合、その位置はヘッダの２番目のバイトである)。ある接続におけるリクエストには全て、暗黙の中に 1 から順に sequence number (通し番号)が振られており、この通し番号はリプライ、エラー、イベントで使用される。

## リプライの書式

全てのリプライ(返答)には、３２ビットの length フィールド(訳註：リプライの長さを表す)が入っており、length フィールドの数値の単位は４バイトである。全てのリプライは、３２バイト(の基本部分)と、その後に続く０個以上のデータ・バイトから成る(個数は length フィールドで指定)。リプライ中の「未使用」バイトは、0 であるとは限らない。全てのリプライには、対応するリクエストの通し番号の下位１６ビットも入っている。

## エラーの書式

エラー報告(いわゆるエラー)のデータ長は３２バイトである。全てのエラーには、エラーの種類を表す８ビットのコードが入っている。エラー・コードの 128 から 255 は、拡張機能のために予約されている。全てのエラーには、蹉跌したリクエストの主命令コード(major opcode)と従命令コード(minor opcode)、及び同リクエストの通し番号(sequence number)の下位１６ビットも入っている。次に挙げるエラー(第４章を参照)では、エラーの原因となったリソースの ID も返る。リソース ID を返すのは、Colormap、Cursor、Drawable、Font、GContext、IDChoice、Pixmap、及び Window のエラーである。Atom エラーでは、エラーの原因となったアトムが返る。Value エラーでは、エラーの原因となった値が返る。コア・プロトコルの他のエラーは、このような追加データは返さない。エラー中の「未使用」のバイトは、0 であるとは限らない。

## イベントの書式

イベントのデータ長は３２バイトである。イベント中の「未使用」のバイトは、0 であるとは限らない。全てのイベントには、イベントの型を表す８ビットのコードが入っている。あるイベントが SendEvent リクエストによって生じたものである場合、このコードの最上位ビットが設定される。64 から 127 のイベント・コードは拡張機能のために予約されているが、コア・プロトコルでは、そのようなコードを持つイベントを選択する(関心があることを表明する)ための機構は規定していない。コア・プロトコルのイベント(KeymapNotify を除く)には全て、クライアントが発行してサーバが処理した(あるいは現在処理している)リクエストの中の最後のものの通し番号の下位１６ビットも入っている。

## 第２章　構文規約

本文書では、これ以降、下記の構文規約を使用する。

- {...} という構文は、選択肢の集合(１つ)を表す。

- [...] という構文は、構造体の構成要素の集合(１つ)を表す。

- 原則として、型(TYPE)は大文字で表し、各選択肢(AlternativeValues)は語頭だけ大文字にして表す。

- 第９章においては、リクエストは次の書式で記述する。

      RequestName
           arg1: type1
           ...
           argN: typeN
         ▶
           result1: type1
           ...
           resultM: typeM

           Errors: kind1, ..., kindK

           説明。

  上記の書式に従った記述の中に「▶」が存在しない場合、そのリクエストは「リプライ」(返答)(これは非同期である)を持たない。但し、その場合もエラーが返る可能性は依然としてある。「▶+」が使われている場合、１つのリクエストに対して１つ以上のリプライが発生する可能性がある。(訳註：「▶+」は本プロトコルでは使われていない。X Font Service Protocol に使用例あり。)

- 第１１章においては、イベントは次の書式で記述する。

      EventName
           value1: type1
           ...
           valueN: typeN

           説明。

## 第３章　共通の型

型名 | 値
--- | ---
LISTofFOO | LISTofFOO という形式の型名は、FOO 型の要素の可算リスト(counted list)を表している。length フィールド(長さを表す)の大きさは様々であり(FOO と同じ大きさとは限らない)、場合によっては、明示されないこともある。この点については、附録 B で全て規定してある。特別な注意書きが無い限り、長さが 0 のリストも認められる。
BITMASK LISTofVALUE | BITMASK、LISTofVALUE という２つの型は少し特殊である。多くのリクエストに次のような形式の引数が存在する。 value-mask: BITMASK value-list: LISTofVALUE この２つの引数を使うことによって、クライアントはオプション引数(選択的引数)のさまざまな組み合わせ(の部分集合)を指定することができるようになる。value-mask は、どの引数が(クライアントによって)与えられているのかを指定する。この引数には、それぞれのビット位置が一意に割り当てられている。BITMASK の実装のビット数は、通常、定義されている引数の数より多くなる。value-mask 内の未使用ビットは 0 でなければならない(さもなければサーバが Value エラーを発する)。value-list には、マスク(BITMASK)で 1 を設定したビットに対応する値が１つづつ入っており、それらはマスク(BITMASK)内の最下位ビットから最上位ビットへ向かう順番で並んでいる。value-list の各値は４バイトで表されるが、実際の値は下位バイトの必要な分を占めるだけである。value-list の未使用バイトの値は何であっても問題とならない。
OR (もしくは) | "T1 or ... or Tn" という形式の型は、T1 〜 Tn として挙げられた複数の型の共用型を表している。要素が１つしかない型は、その要素をカッコなしで示してある。
WINDOW | ３２ビットの値(上位３ビットは必ず 0)
PIXMAP | ３２ビットの値(上位３ビットは必ず 0)
CURSOR | ３２ビットの値(上位３ビットは必ず 0)
FONT | ３２ビットの値(上位３ビットは必ず 0)
GCONTEXT | ３２ビットの値(上位３ビットは必ず 0)
COLORMAP | ３２ビットの値(上位３ビットは必ず 0)
DRAWABLE | WINDOW もしくは PIXMAP
FONTABLE | FONT もしくは GCONTEXT
ATOM | ３２ビットの値(上位３ビットは必ず 0)
VISUALID | ３２ビットの値(上位３ビットは必ず 0)
VALUE | ３２ビットの量であり、LISTofVALUE のみで使用
BYTE | ８ビットの値
INT8 | ８ビットの符号あり整数
INT16 | １６ビットの符号あり整数
INT32 | ３２ビットの符号あり整数
CARD8 | ８ビットの符号なし整数
CARD16 | １６ビットの符号なし整数
CARD32 | ３２ビットの符号なし整数
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 | ３２ビットの値(上位３ビットは必ず 0)
KEYCODE | CARD8
BUTTON< | CARD8
KEYMASK | { Shift, Lock, Control, Mod1, Mod2, Mod3, Mod4, Mod5 }
BUTMASK | { Button1, Button2, Button3, Button4, Button5 }
KEYBUTMASK | KEYMASK もしくは 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 } アドレス： LISTofBYTE]

RECTANGLE の座標 [x,y] は、左上隅の座標である。

STRING16 の大きな文字(２バイトの文字)は、２次元の表(matrix)の索引として機能する２つのバイトから成っているものと解釈する。CARD16 ではなく CHAR2B を使っているのは、そのためである。これは、JIS/ISO の２バイト文字の索引方式(method of indexing)に対応している。この方式は、文字数の多いフォントのほとんどが２バイトの索引表で定義できることを想定している。文字数の多いフォントを線型索引で構成する場合、CHAR2B は、byte1 を最上位バイトとして扱うことにより、１６ビットの数値として解釈することができる。この場合、サーバは CHAR2B (の中身)のバイト交換(byte-swap)を行わないので、クライアントは、そのような１６ビット文字を送信する際は、常に最上位バイトを先に転送すべきことになる。

HOST アドレスの長さ、形式、解釈は、アドレスの種類(family)ごとに異なる(ChangeHosts リクエストの項を参照)。

## 第４章　エラー

原則として、リクエストがエラーで終わった場合、同リクエストは副作用を齎さない(つまり、一部だけ実行されるということはない)。この原則の例外は、次のリクエストである。即ち、ChangeWindowAttributes、ChangeGC、PolyText8、PolyText16、FreeColors、StoreColors 及び ChangeKeyboardControl である。

各種リクエストの結果として、以下に挙げるエラー・コードが以下に挙げる理由によって発生する。

エラー | 説明
--- | ---
Access | 他のクライアントが既に占有しているキー／ボタンの組み合わせを占有しようとした。クライアント自身が割り当てたのではないカラーマップ・エントリを解放しようとした。全てのエントリが書き込み可能なものとして作成されたカラーマップについて、そのエントリ(１つ)を解放しようとした。読み込み専用のカラーマップ・エントリや割り当てられていないカラーマップ・エントリに書き込みを行おうとした。ローカル・ホスト以外から(あるいは認証済みのクライアント以外から)アクセス制御リストを変更しようとした。一度に１つのクライアントしか選択できないイベント型について、他のクライアントがすでに同イベント型を選択している状況で、同イベント型を選択しようとした。
Alloc | サーバが要求されたリソースを確保するのに失敗した。各種リクエストの中の Alloc エラーの明示的列挙は、きわめて大まかなものであり、サーバがサービス中に割当て領域不足に陥る場合の全てを網羅しているわけではない。サーバが割当て領域不足に陥った場合の効果(semantics)は定められていないが、サーバはそのような状況を生み出したリクエストに対しては Alloc エラーを発することができる。そして、クライアントは、そのようなエラーを受け取ることができるように、さらには同エラーを処理したり破棄したりできるように備えておくべきである。
Atom | ATOM 型引数の値が定義済みの ATOM を指していない。
Colormap | COLORMAP 型引数の値が定義済みの COLORMAP を指していない。
Cursor | CURSOR 型引数の値が定義済みの CURSOR を指していない。
Drawable | DRAWABLE 型引数の値が定義済みの WINDOW あるいは定義済みの PIXMAP を指していない。
Font | FONT 型引数の値が定義済みの FONT を指していない。FONTABLE 型引数の値が定義済みの FONT あるいは定義済みの GCONTEXT を指していない。
GContext | GCONTEXT 型引数の値が定義済みの GCONTEXT を指していない。
IDChoice | リソース識別子として選択された値が、クライアントに割り当てられた範囲に収まっていないか、もしくはすでに使用されている。(訳註：値を選択するのはサーバであり、通常このエラーは起きない。)
Implementation | サーバがリクエストの一部を実装していない。コア・プロトコルで規定されているリクエストに対してこのエラーを生成するサーバは缺陥品である。そのため、このエラーはどのリクエストでも(想定エラーとして)挙げられていない。けれども、クライアントは、このようなエラーを受け取ることができるように、そして同エラーを処理したり破棄したりできるように備えておくべきである。
Length | リクエストの長さが、引数を格納するのに要する最小の長さよりも、短いか長い。リクエストの長さが、サーバが受け付けられる最大の長さを超えている。
Match | InputOnly ウィンドウを DRAWABLE として使っている。グラフィクス・リクエストにおいて、GCONTEXT 型引数のルート及び深さ(depth)が、DRAWABLE 型引数「destination」のルート及び深さと同じでない。引数(あるいは引数の対)の型と範囲は正しいが、他の何らかの点でそのリクエストの要求を満たしていない。
Name | 指定された名前のフォントまたは色が存在しない。
Pixmap | PIXMAP 型引数の値が定義済みの PIXMAP を指していない。
Request | 主命令コード(major opcode)あるいは従命令コード(minor opcode)の値が有効なリクエストのものでない。
Value | リクエストが受け付けている値の範囲に収まっていない数値が存在する。引数に対して特定の範囲が指定されていない限りは、引数の型の定義域の全体を受け付ける。選択肢の集合で定義されている引数は、このエラー(符号に起因する)を生成する可能性がある引数の典型である。
Window | WINDOW 型引数の値が定義済みの WINDOW を指していない。

### 註

引数の型を決まった数の選択肢の集合で拡張してある場合(例えば <WINDOW もしくは PointerRoot もしくは None> のように)、Atom、Colormap、Cursor、Drawable、Font、GContext、Pixmap 及び Window の各エラーも使用する。

## 第５章　キーボード

KEYCODE は、物理的(あるいは論理的)なキーを表す。キーコードは、[8, 255] の範囲(境界を含む)の値をとる。キーコードの値には、システム内部(intrinsic)の情報は何ら含まれていない。けれども、サーバの実装者は、幾何的情報(例えば、対応表(matrix)など：訳註：キーとキーコードとの対応？要確認)を符号化し、同情報がサーバ独自のやり方で解釈されるようにしてもよい。キーとキーコードとの対応を本プロトコル(のリクエスト等)で変更することはできない。

KEYSYM は、(物理的なキーボードの)キーの表面(cap)に描いてある記号を符号化したものである。定義済みの KEYSYM の集合には、Latin-1、Latin-2、Latin-3、Latin-4、Kana、Arabic、Cyrillic、Greek、Tech、Special、Publish、APL、Hebrew、Thai、及び Korean といった文字集合の他、各種キーボードに共通の記号(Return、Help、Tab など)の集合がある。最上位ビット(２９番目のビット)が設定されている KEYSYM は、企業専用のものとして予約されている。

各 KEYCODE には、KEYSYM のリスト(配列)１つが結び付けられている。このリストは、 (KEYCODE に)対応するキーの上に描かれている記号の集合を保持するものである。 このリストが(後ろに続く NoSymbol (訳註で後述)のエントリは無視して)「K」という１つの KEYSYM から成る場合、同リストはあたかも「K NoSymbol K NoSymbol」というリストであるかのように扱われる。同リストが(後ろに続く NoSymbol のエントリは無視して)「K1 K2」という KEYSYM の対１つから成る場合、同リストはあたかも「K1 K2 K1 K2」というリストであるかのように扱われる。同リストが(後ろに続く NoSymbol のエントリは無視して)「K1 K2 K3」という３つの KEYSYM の組から成る場合、同リストはあたかも「K1 K2 K3 NoSymbol」というリストであるかのように扱われる。このリストに本物の「void」要素(空の要素)を入れたい場合、VoidSymbol という値を使用することができる。

(訳註：Xlib - C Language X Interface によると、「NoSymbol」という KEYSYM の特別な値は、個々のキーコードの中の使用されない要素を埋めるために使用する、とのこと。)

このリストの最初の４つの要素は、２つの KEYSYM グループに分割される(訳註：後の記述等を見ると、各 KEYCODE の KEYSYM リストには５つ以上の要素を入れることができるようだ)。第１グループには１番目と２番目の KEYSYM が入り、第２グループには３番目と４番目の KEYSYM が入る。各グループの中の２番目の要素が NoSymbol である場合、そのグループは、あたかも２番目の要素が１番目の要素と同じであるかのように扱われる。但し、１番目の要素がアルファベットの KEYSYM 「K」であって、同アルファベットに対して大文字と小文字の両方が定義されている場合は、その限りでない。この場合、そのグループは、あたかも１番目の要素が小文字の「K」であり、２番目の要素が大文字の「K」であるかのように扱われる。

KeyPress イベントから KEYSYM を取り出すにあたっての標準規則では、第１グループと第２グループの KEYSYM しか使わないことになっている。そのため、リスト中の他の KEYSYM の解釈は、本文書では定義しない。修飾キー(modifier)の状態によって、どちらのグループを使うのかを決定する。グループ間の切り替えは、MODE SWITCH という名前の KEYSYM を使って行う。具体的には、この KEYSYM をある KEYCODE に結び付け、同 KEYCODE を Mod1 から Mod5 までの修飾キーのいづれかに結びつけるという方法によって行う。この修飾キーのことを「グループ修飾キー」(group modifier)と呼ぶ。いづれの KEYCODE の場合でも、グループ修飾キーが off の時は第１グループを使用し、グループ修飾キーが on の時は第２グループを使用する。

修飾キー Lock が CapsLock と解釈されるのは、CAPS LOCK (半角スペース有り)という名前の KEYSYM がいづれかの KEYCODE に結び付けられており、且つその KEYCODE が修飾キー Lock に結び付けられている場合である。修飾キー Lock が ShiftLock と解釈されるのは、SHIFT LOCK (半角スペース有り)という名前の KEYSYM がいづれかの KEYCODE に結び付けられており、且つその KEYCODE が修飾キー Lock に結び付けられている場合である。修飾キー Lock が CapsLock とも ShiftLock とも解釈できる場合、CapsLock であるとする解釈が採用される。

キーパッド(keypad)のキーの制御は NUM LOCK という名前の KEYSYM を用いて行う。具体的には、この KEYSYM をある KEYCODE に結びつけ、同 KEYCODE を Mod1 から Mod5 までの修飾キーのいづれかに結びつけるという方法によって行う。この修飾キーのことを「numlock 修飾キー」(numlock modifier)と呼ぶ。標準の KEYSYM の中、名前の頭に KEYPAD が付くものは、キーパッド KEYSYM (keypad KEYSYM)と呼ばれる。この KEYSYM は、#xFF80 から #xFFBD までの範囲(両端を含む)の１６進数の数値を持つ。また、１６進数 #x11000000 から #x1100FFFF までの範囲にある企業専用の KEYSYM もキーパッド KEYSYM である。

各グループの中のどの KEYSYM を使うべきかについては、以下に挙げる規則の中、最初に当てはまったものによって決定する。

- まず、numlock 修飾キーが on であり、且つ２番目の KEYSYM がキーパッド KEYSYM である場合について。この場合、もし修飾キー Shift が on であるか、または修飾キー Lock が on であって且つ同修飾キーが ShiftLock と解釈されるのであれば、１番目の KEYSYM が使用される。さもなければ、２番目の KEYSYM が使用される。

- 次に、修飾キー Shift と Lock の両方が off の場合について。この場合、１番目の KEYSYM が使用される。

- その次に、修飾キー Shift が off であり、且つ修飾キー Lock が on であってしかも同修飾キーが CapsLock と解釈される場合について。この場合、原則として１番目の KEYSYM が使用されるが、この KEYSYM がアルファベットの小文字である場合はそれに対応する大文字の KEYSYM が代わりに使用される。

- さらにその次に、修飾キー Shift が on であり、且つ修飾キー Lock が on であってしかも同修飾キーが CapsLock と解釈される場合について。この場合、原則として２番目の KEYSYM が使用されるが、この KEYSYM がアルファベットの小文字である場合はそれに対応する大文字の KEYSYM が代わりに使用される。

- 最後に、修飾キー Shift が on であるか、または修飾キー Lock が on であり且つ同修飾キーが ShiftLock と解釈されるか、あるいはその両方である場合について。この場合、２番目の KEYSYM が使用される。

KEYCODE と KEYSYM との対応関係をサーバが直接利用することはない。クライアントが読み込んだり書き込んだりできるように記録しているだけである。

## 第６章　ポインタ(マウスなど)

各ボタンには番号が振られており、番号は常に 1 から始まる。

## 第７章　既定のアトム

既定のアトム(predefined atom)は、絶対に必要なものではなく、あらゆる環境で役に立つわけでもない。けれども、これを使えば大半のアプリケーションのにおいて InternAtom リクエストの使用頻度を大きく減らすことができる。 既定のアトムに関して予め定義されているのは数値だけであり、どのような意味・役割(semantics)を担うのかは定義されていない。コア・プロトコルでは既定のアトムの名前に何ら意味を持たせていないが、他の X Window System 規格では意味・役割を規定していることがある。例えば、Inter-Client Communication Conventions Manual(クライアント間通信規約)、X Logical Font Description Conventions(X 論理フォント記述規約)など。

以下の名称には既定のアトム値が存在する。大文字・小文字の区別があるので注意。

ARC | ITALIC_ANGLE | STRING
ATOM | MAX_SPACE | SUBSCRIPT_X
BITMAP | MIN_SPACE | SUBSCRIPT_Y
CAP_HEIGHT | NORM_SPACE | SUPERSCRIPT_X
CARDINAL | NOTICE | SUPERSCRIPT_Y
COLORMAP | PIXMAP | UNDERLINE_POSITION
COPYRIGHT | POINT | UNDERLINE_THICKNESS
CURSOR | POINT_SIZE | VISUALID
CUT_BUFFER0 | PRIMARY | WEIGHT
CUT_BUFFER1 | QUAD_WIDTH | WINDOW
CUT_BUFFER2 | RECTANGLE | WM_CLASS
CUT_BUFFER3 | RESOLUTION | WM_CLIENT_MACHINE
CUT_BUFFER4 | RESOURCE_MANAGER | WM_COMMAND
CUT_BUFFER5 | RGB_BEST_MAP | WM_HINTS
CUT_BUFFER6 | RGB_BLUE_MAP | WM_ICON_NAME
CUT_BUFFER7 | RGB_COLOR_MAP | WM_ICON_SIZE
DRAWABLE | RGB_DEFAULT_MAP | WM_NAME
END_SPACE | RGB_GRAY_MAP | WM_NORMAL_HINTS
FAMILY_NAME | RGB_GREEN_MAP | WM_SIZE_HINTS
FONT | RGB_RED_MAP | WM_TRANSIENT_FOR
FONT_NAME | SECONDARY | WM_ZOOM_HINTS
FULL_NAME | STRIKEOUT_ASCENT | X_HEIGHT
INTEGER | STRIKEOUT_DESCENT |

今後作られる名前(プロトコルの次元で、あるいはより高次のユーザ・インターフェイス・モデルの次元で意味・役割を持つもの)と衝突しないように、特定の企業や組織のための私的なアトムには、アンダースコア(_)から始まる名前を使用するものとする。企業や組織の間で名前の衝突が起きないように、接頭辞を追加する必要がある。しかしながら、本プロトコルではそのような接頭辞の選定方法は定めていない。１つのアプリケーションや１人のエンド・ユーザのための私的な名前でありながら大域的に(全体からglobally)アクセスできる場所に保存されるものは、他の名前と衝突しないよう、先頭に２つのアンダースコアを使用するとよい。

## 第８章　接続の設定

遠隔のクライアント(remote client)と通信するにあたって、X プロトコルは、信頼できるバイト・ストリームであればどのようなものでもプロトコルの基盤として使用することができる。

## 接続の開始

クライアントは、使用するバイト順(byte order)を指定するデータ・バイトを最初に送らなければならない。同データ・バイトの値は、８進数の 102 もしくは 154 でなければならない。８進数値 102 (ASCII 大文字 B)は最上位バイトから順に値を転送することを表し、８進数値 154 (ASCII 小文字 l)は最下位バイトから順に値を転送することを表す。このプロトコルで明示的に規定されている場合を除き、クライアントが送信する１６ビットと３２ビットのデータは全てこのバイト順で転送されなければならず、また、サーバが返す１６ビットと３２ビットのデータも全てこのバイト順で転送されることになる。

接続設定において、クライアントは、バイト順を示すバイトに続けて下記の情報を送信する。

> protocol-major-version: CARD16

> protocol-minor-version: CARD16

> authorization-protocol-name: STRING8

> authorization-protocol-data: STRING8

版番号(version number)は、クライアントがサーバに実装されていてほしいと考える、本プロトコルの版の番号である。

認証名(authorization name)は、クライアントがサーバに使用してほしいと考える、認証プロトコル(の名前)であり、認証データ(authorization-protocol-data)は、その認証プロトコル固有のものである。有効な認証機構の仕様については、コア X プロトコル(本プロトコル)では規定していない。サーバは、クライアントが望む認証プロトコルを実装していない場合、あるいはホスト名に基く認証機構(host-based mechanism)しか実装していない場合、この情報を単純に無視することができる。認証名の文字列も認証データの文字列も空である場合、「具体的な認証機構の指定は無い」(no explicit authorization)と解釈する。

## サーバの応答

接続設定において、クライアントは次の情報を受信する。

- success: { Failed, Success, Authenticate}

返ってきた success の値が Failed であった場合、クライアントは下記の追加データを受信し、接続の確立は失敗に終わる。

> protocol-major-version: CARD16

> protocol-minor-version: CARD16

> reason: STRING8

返ってきた success の値が Authenticate であった場合、クライアントは下記の追加データを受信し、続いて認証の交渉が必要になる。

> reason: STRING8

文字列 reason の内容は、使っている認証プロトコル特有のものである。この認証交渉の方法(semantics)には、次の点を除き、制約は無い。その制約とは即ち、認証交渉は最終的に success (Failed または Success の値をとる)を含む、サーバからのリプライによって終了しなければならないというものである。

返ってきた success の値が Success であった場合、クライアントは下記の追加データを受信し、接続の確立は成功する。

> protocol-major-version: CARD16

> protocol-minor-version: CARD16

> vendor: STRING8

> release-number: CARD32

> resource-id-base, resource-id-mask: CARD32

> image-byte-order: { LSBFirst, MSBFirst }

> bitmap-scanline-unit: {8, 16, 32}

> bitmap-scanline-pad: {8, 16, 32}

> bitmap-bit-order: { LeastSignificant, MostSignificant }

> pixmap-formats: LISTofFORMAT

> roots: LISTofSCREEN

> motion-buffer-size: CARD32

> maximum-request-length: CARD16

> min-keycode, max-keycode: KEYCODE

> 但し：

> > FORMAT: | [depth: CARD8,
> > | bits-per-pixel: {1, 4, 8, 16, 24, 32}
> > | scanline-pad: {8, 16, 32}]
> > SCREEN: | [root: WINDOW
> > | width-in-pixels, height-in-pixels: CARD16
> > | width-in-millimeters, height-in-millimeters: CARD16
> > | allowed-depths: LISTofDEPTH
> > | root-depth: CARD8
> > | root-visual: VISUALID
> > | default-colormap: COLORMAP
> > | white-pixel, black-pixel: CARD32
> > | min-installed-maps, max-installed-maps: CARD16
> > | backing-stores: {Never, WhenMapped, Always}
> > | save-unders: BOOL
> > | current-input-masks: SETofEVENT]
> > DEPTH: | [depth: CARD8
> > | visuals: LISTofVISUALTYPE]
> > VISUALTYPE: | [visual-id: VISUALID
> > | class: {StaticGray, StaticColor, TrueColor, GrayScale, PseudoColor, DirectColor}
> > | red-mask, green-mask, blue-mask: CARD32
> > | bits-per-rgb-value: CARD8
> > | colormap-entries: CARD16]

## サーバの情報

サーバの大域的な情報として、以下のものがある。(訳註：サーバの global な情報の後に、スクリーン毎の情報、visual-type 毎の情報が続く。)

プロトコルの版番号(protocol-major-version、protocol-minor-version)は、将来、本プロトコルの改訂が必要になった場合の避難口である。基本的に、上位の版番号(major version)は互換性の無い変更によって増加し、下位の版番号(minor version)は上方互換の小さな変更によって増える。変更がなければ、上位の版番号は 11 であり、下位の版番号は 0 となる。返ってきたプロトコルの版番号は、サーバが実際に対応しているプロトコル(の版番号)を表し、クライアントが送信した版とは一致しない可能性がある。サーバは、自身が対応している版とは異なる版を指定したクライアントからの接続を拒否することができる(けれども拒否は必須ではない)。サーバは、同時に複数の版に対応することができる(けれども対応するのは必須ではない)。

文字列 vendor には、サーバの実装者(実装の所有者)を示す何らかの識別情報が入る。vendor によって release-number の意味・解釈(semantics)が定まる。

resource-id-mask には、連続したビット(少なくとも１８ビット)の集合１つが入る。クライアントが WINDOW、PIXMAP、CURSOR、FONT、GCONTEXT、及び COLORMAP の各型に対するリソース ID を確保する(allocate)にあたっては、先のビット集合の部分集合にすぎないビット群を設定した値を選び、それと resource-id-base との論理和を取る、という方法を用いる。この方法で構成された値でなければ、この接続において新たに作成されたリソースの ID として使用することはできない。リソース ID の上位３ビットが設定されることはない。クライアントは、線型に、あるいは連続でリソース ID を確保しなければいけないわけではない。一度解放された ID を再利用することができる。ID は、同じ型の他のリソースだけではなく、他の全てのリソースの ID と異なるものでなければならない。しかしながら、リソース識別子、アトム、ヴィジュアルの ID(visualid)、キーシンボル(keysym)の値空間(value space)は文脈によって区別されるので、それらの値空間は必ずしも共通部分を持ってはいけないわけではない。例えば、ある１つの数値が同時に有効なウィンドウ ID、有効なアトム、有効なキーシンボル(の値空間に含まれる値)であることもあり得る。

通常はクライアントに合わせてデータのバイト順を交換するのはサーバの仕事であるけれども、画像(image)については、常にサーバが指定した形式(バイト順も含む)で送信され、受信される。画像のバイト順は image-byte-order で指定される。このバイト順は、XY フォーマット(ビットマップ・フォーマット)においては各「走査線」(scanline unit)に対して、Z フォーマットにおいては各ピクセル値に対して適用される。

ビットマップの表現形式は「走査線順」(scanline order)である。各「走査線」(scanline)には、bitmap-scanline-pad で与えられたビット数の倍数になるように詰め物が入る。詰め物(pad)として使用する各ビットの値は任意である。走査線の長さは、bitmap-scanline-unit で与えられたビット数の整数倍になる。bitmap-scanline-unit は、必ず bitmap-scanline-pad 以下の値をとる。走査線の最小単位(scanline unit)のそれぞれの内部では、bitmap-bit-order の内容に従って、ビットマップの中の最も左のビットがその最小単位の最下位ビットになったり最上位ビットになったりする。ピクスマップの表現形式が XY フォーマットである場合、各プレーン(plane)は１枚のビットマップで表され、このプレーン群は最上位から最下位へというビット順で並べられ、プレーン間に詰め物は入らない。

pixmap-formats には、depth (深さ)の値それぞれに対して１つづつエントリが入っている。このエントリには、該当する深さ(depth)の画像の表現形式として使用する「Z フォーマット」(Z format)の情報が入っている。ある depth (深さ)に対するエントリが pixmap-formats の中に入れられるのは次の場合である。即ち、その depth に対応するスクリーンが存在し、且つその depth に対応する全てのスクリーンは同 depth に関する限り当該 Z フォーマットだけを使用しなければならない(must support)場合である。Z フォーマットにおいては、ピクセルは走査線順に並んでおり、１つの走査線の内部ではピクセルは左から右へ並んでいる。各ピクセルを保持するのに使うビットの数は bits-per-pixel で与えられる。bits-per-pixel は、depth で与えられた深さ(の画像を表すの)に最低限必要なビット数より大きくてもよい。その場合、最下位ビットを使ってピクスマップ・データを保持し、高位の未使用ビットの値は未定義である。bits-per-pixel の値が 4 である場合、各バイトの中の半バイト(４ビットの塊)の並び順は image-byte-order の並び順と同じになる。bits-per-pixel の値が 1 である場合、表現形式はビットマップ形式と同じである。各走査線には、scanline-pad で与えられたビット数の倍数となるように詰め物が入る。bits-per-pixel の値が 1 である場合、scanline-pad の値は bitmap-scanline-pad の値と同じになる。

ポインティング・デバイスがサーバ間をどのように移動するかは、サーバの実装次第であり、プロトコルはこれを意識しない(transparent to the protocol)。スクリーン同士のジオメトリ(位置と大きさ)の関係は定められていない。

サーバはポインタの動作(motion)の履歴を保持することができ、また、その粒度は MotionNotify イベントで報告されるものよりも細かくすることができる。リクエスト GetMotionEvents を用いてこの履歴を取得することができる。motion-buffer-size は、履歴バッファに入る要素の(おおよその)最大数を表す。

maximum-request-length は、サーバが受け入れられるリクエストの長さの最大値を表し、単位は４バイトである。この長さの値は、各リクエストの中の length フィールド(長さを表す)に指定できる値の最大値と同じものである。この最大値より大きいリクエストは Length エラーを引き起こす。この場合、サーバはリクエスト全体を読み、そして単に破棄する。maximum-request-length の値は常に 4096 以上である(つまり、１６３８４バイト以下の長さのリクエストであれば、全てのサーバが受け入れる)。

min-keycode と max-keycode は、サーバが送り出すキーコードの最小値と最大値を表す。min-keycode は 8 未満の値となることはなく、max-keycode は 255 より大きな値となることはない。この範囲のキーコード全て対して漏れなく対応するキーが存在しなければならないわけではない。

## スクリーンの情報

各スクリーンに関する情報として、以下のものがある。

allowed-depths は、ピクスマップとウィンドウの深さ(depth)の中、いづれのものに対応しているのかを表す。ピクスマップは allowed-depths で挙げられている各深度(each depth)のものを使用することができる。allowed-depths で挙げられている深度を持つウィンドウは、その深さに対してヴィジュアル型(visual type)が(DEPTH の visuals で)１つ以上挙げられていれば、使用することができる。深さが 1 のピクスマップは、常に使用可能であり allowed-depths に含まれるが、深さが 1 のウィンドウは使用できないこともある。深度 0 が allowed-depths に挙げられることはないが、深さが 0 の InputOnly ウィンドウは常に使用可能である。

root-depth と root-visual は、ルート・ウィンドウの深さとヴィジュアル型を表す。width-in-pixels と height-in-pixels は、ルート・ウィンドウのサイズ(これは変更不能である)を表す。ルート・ウィンドウのクラス(class)は、常に InputOutput である。width-in-millimeters と height-in-millimeters は、物理的なサイズと縦横比を判断するのに使用することができる。

default-colormap は、ルート・ウィンドウに初めから附属しているカラーマップである。ルート・ウィンドウと同じ深さのウィンドウを作成するために最低限必要とされる色しか使用しないクライアントは、自分でカラーマップを確保することなく、このカラーマップを使用することができる。

white-pixel と black-pixel は、白黒のアプリケーションを実装するのに使用することができる。この２つのピクセル値は、デフォルト・カラーマップ(default-colormap)の中に恒久的に確保されているエントリを指している。一部のスクリーンでは RGB の実値を設定することができ、その場合、実際には白と黒ではない色になる可能性がある。この２つの名前は、色の相対的な強度(期待されるもの)を伝えるためのものである。

ルート・ウィンドウのボーダ(枠)は、初期状態では black-pixel で塗りつぶされたピクスマップ(１枚)である。ルート・ウィンドウの背景(background)は、初期状態では black-pixel と white-pixel を用いた２色のパターン(柄)で塗りつぶされたピクスマップ(１枚)であるが、この２色のパターンの模様は定められていない。

min-installed-maps は、InstallColormap によって同時に組み込むことができる(組み込むことを保証され得る)カラーマップの数を表す。各カラーマップの中に確保されているエントリの数とは関係ない。max-installed-maps は、同時に組み込むことができる可能性があるカラーマップの最大数を表す。実際に組み込める数は、カラーマップの割り当て(allocation領域確保)次第である。同一の内容を持つ複数の読み込み専用カラーマップ(static-visual colormaps)は、この最大数・最小数の観点からは、リソース ID が異なっていても１つのカラーマップと見做す。ハードウェア・カラーマップが１つしかない場合、通常、どちらの値も 1 になる。

backing-stores は、サーバがこのスクリーンのバッキング・ストアを使用するのはどのような場合なのかを表す。但し、バッキング・ストアは、サーバが一度に対応できる数のウィンドウ全てを賄うには足りないものである可能性がある。save-unders が True である場合、サーバはリクエスト CreateWindow 及び ChangeWindowAttributes において save-under モードに対応することができる。但し、この場合も容量が足りない可能性がある。

current-input-masks は、リクエスト GetWindowAttributes でルート・ウィンドウを指定した場合に all-event-masks に返るイベント・マスクである。

## ヴィジュアルの情報

各 visual-type (ウィジュアル型)に関する情報として、以下のものがある。

１つのヴィジュアル型が複数の DEPTH あるいは複数の SCREEN の中のリストで挙げられることがあり得る。

PseudoColor では、ピクセル値はカラーマップの(内部の)索引として機能し、RGB 値(R と G と B は互いに独立)を取り出すのに使われる。この RGB 値は動的に変更できる。GrayScale は、R、G、B の中、どの値がスクリーンの明るさを決めるのか未定義であるという点を除き、PseudoColor と同じように扱われる。この未定義の部分ゆえに、クライアントは常に、カラーマップ内の赤、緑、青に同一の値を格納しなければならない。DirectColor では、ピクセル値は別々の R・G・B のサブフィールドに分解されており、各サブフィールドは別々にカラーマップの索引として機能し、それぞれ対応する値を取得するのに使われる。この RGB 値も動的に変更できる。TrueColor は、カラーマップの RGB 値が既定で読み込み専用の値であるという点を除き、DirectColor と同じように扱われる。TrueColor のカラーマップの RGB 値はサーバ依存であるが、各基準値は線型もしくは線型に近い傾斜で増減する。StaticColor は、カラーマップの RGB 値が既定で読み込み専用の値(値はサーバ依存)であるという点を除き、PseudoColor と同じように扱われる。StaticGray は、どのピクセル値でも赤・緑・青の値が等しくて灰色の色調が生み出されるという点を除き、StaticColor と同じように扱われる。２つしかエントリがないカラーマップから成る StaticGray は、白黒(モノクローム)と考えることができる。

red-mask、green-mask、及び blue-mask は、DirectColor と TrueColor の場合に限って意味を持つ(その２つのために定義されている)。 各マスクは、1 に設定された連続ビットの集合１つから成り、互いに重なる部分(共通部分)は無い。大抵は、各マスクの 1 に設定されている部分のビット数は同じである。

bits-per-rgb-value は、赤・緑・青それぞれの色強度の離散値の個数を、2 を底とする対数で表現したものである。この数は、カラーマップのエントリの数と関係の無い数でもよい。実際の RGB 値は常に、プロトコルの中で、１６ビットのスペクトル(spectrum)の範囲内の値で渡される。この値は、0 が最小強度であり、65535 が最大強度である。0 から始まる線型の強度勾配を持つハードウェアにおいては、次の関係が成り立つ。

           hw-intensity = protocol-intensity / (65536 / total-hw-intensities)

カラーマップのエントリの番号(index)は 0 から始まる。colormap-entries は、新たに作成するカラーマップで使用できるカラーマップ・エントリの数を表す。DirectColor と TrueColor においては、この値は通常、red-mask、green-mask、及び blue-mask で 1 に設定されるビットの数(最大数)だけ 2 を累乗した値である。

## 第９章　リクエスト

## CreateWindow

wid, parent: WINDOW
class: { InputOutput, InputOnly, CopyFromParent}
depth: CARD8
visual: VISUALID or CopyFromParent
x, y: INT16
width, height, border-width: CARD16
value-mask: BITMASK
value-list: LISTofVALUE
Errors: Alloc, Colormap, Cursor, IDChoice, Match, Pixmap, Value, Window

このリクエストは、アンマップ状態のウィンドウを作成し、同ウィンドウに対して識別子 wid を割り当てるものである。

class が CopyFromParent である場合、親のクラスが引き継がれる。class が InputOutput もしくは CopyFromParent であって且つ depth (深さ)が 0 である場合、親の深さが引き継がれる。visual が CopyFromParent である場合、親のヴィジュアル型(visual type)が引き継がれる。class が InputOutput である場合、ヴィジュアル型と深さの組み合わせは、スクリーンが対応しているものでなければならない(さもなくば Match を生ずる)。この場合、深さは親と同じである必要はないが、親のクラスは InputOnly であってはならない(さもなければ Match エラーを生ずる)。class が InputOnly である場合、depth の値は 0 でなければならず(さもなければ Match エラーを生ずる)、visual はスクリーンが対応しているものでなければならない(さもなければ Match エラーを生ずる)。但し、この場合には親の深さとクラスは何でもかまわない。

サーバは、グラフィクス・リクエスト、露出処理(exposure processing)、及び VisibilityNotify イベントを扱う際には、基本的には InputOnly ウィンドウが存在していないかのように振る舞う。InputOnly ウィンドウは、ドローアブルとして(グラフィクス・リクエストのソース(source)もしくはデスティネーション(destination)として)使用することができない。その他の点(プロパティ、占有、入力制御など)では、InputOnly ウィンドウと InputOutput ウィンドウとは同じように動作する。

座標系には、水平の X 軸と垂直の Y 軸があり、原点は [0, 0] で左上隅に位置する。各座標は、整数で表され、(この整数の)単位はピクセルであり、ピクセルの中心の位置を指す。各ウィンドウ及び各ピクスマップは、自分自身の座標系を持つ。あるウィンドウの(自分自身の)原点は、同ウィンドウのボーダ(枠)の内側の左上隅である。

引数の x、y 座標は、作成するウィンドウの親ウィンドウの原点を基準としたものであり、作成するウィンドウの外側の左上隅の位置を指定するものである(原点ではない)。引数 width、height は、作成するウィンドウの内側の大きさを指定するものであり(ボーダは含まない)、値が 0 であってはならない(さもなくば Value エラーを生ずる)。InputOnly ウィンドウを作成する場合、border-width の値は 0 でなければならない(さもなくば Match エラーを生ずる)。

作成するウィンドウは、兄弟ウィンドウ同士の重ね順の中では、一番上に(最前面に)置かれる。

引数の value-mask と value-list は、作成するウィンドウの各属性を指定するものであり、初期設定されるべき値を具体的に指定する。指定できる値は次の通り。

属性(Attribute) | 型(Type)
--- | ---
background-pixmap | PIXMAP or None or ParentRelative
background-pixel | CARD32
border-pixmap | PIXMAP or CopyFromParent
border-pixel | CARD32
bit-gravity | BITGRAVITY
win-gravity | WINGRAVITY
backing-store | { NotUseful, WhenMapped, Always }
backing-planes | CARD32
backing-pixel | CARD32
save-under | BOOL
event-mask | SETofEVENT
do-not-propagate-mask | SETofDEVICEEVENT
override-redirect | BOOL
colormap | COLORMAP or CopyFromParent
cursor | CURSOR or None

各属性を明示的に(具体的に)初期設定しない場合のデフォルト値は、次の通り。

Attribute | Default
--- | ---
background-pixmap | None
border-pixmap | CopyFromParent
bit-gravity | Forget
win-gravity | NorthWest
backing-store | NotUseful
backing-planes | all ones
backing-pixel | zero
save-under | False
event-mask | {} (empty set)
do-not-propagate-mask | {} (empty set)
override-redirect | False
colormap | CopyFromParent
cursor | None

InputOnly ウィンドウを作成する場合、次の属性だけを定義する(指定する)。

- win-gravity

- event-mask

- do-not-propagate-mask

- override-redirect

- cursor

InputOnly ウィンドウを作成する際に上記のもの以外の属性の指定を行うと、Match エラーとなる。

background-pixmap を指定した場合、指定されたピクスマップでデフォルトの background-pixmap (背景ピクスマップ)を置き換える。背景ピクスマップと作成するウィンドウは、同じルートと同じ深さを持たなければならない(さもなければ Match エラーを生ずる)。どんなサイズのピクスマップを使ってもよいが、サイズによって処理速度が速かったり遅かったりする。background-pixmap に None を指定した場合、ウィンドウは定義された背景を持たないことになる。background-pixmap に ParentRelative を指定した場合には親の背景を使用することになるが、この場合、作成するウィンドウの深さは親と同じでなければならない(さもなければ Match エラーを生ずる)。また、この場合、親の背景ピクスマップが None であれば、作成するウィンドウの背景ピクスマップも None になる。親の背景ピクスマップの複製は作成されない。作成するウィンドウの背景ピクスマップが必要となる度に親の背景ピクスマップが参照される。background-pixel を指定した場合、指定されたピクセルによってデフォルトの背景ピクスマップ(background-pixmap)及び明示的に指定された background-pixmap が置き換えられ、この background-pixel のピクセルを敷き詰めた不定の大きさのピクスマップが背景として使用されることになる。background-pixel の値に対して範囲の確認は行われず、background-pixel の値は単に適切なビット数に切り詰められる。background-pixmap が ParentRelative である場合、背景タイルの原点は常に親の背景タイルの原点と一致する。ParentRelative でない場合、背景タイルの原点は常に作成するウィンドウの原点となる。

作成するウィンドウの領域として使用できる有効な内容が存在せず、且つ同領域が可視状態であるかあるいはサーバがバッキング・ストアを保持している場合、同ウィンドウの背景(background-pixmap)が None でなければ、サーバは同ウィンドウの背景(background-pixmap)を用いて同領域を自動的にタイルする。背景(background-pixmap)が None である場合、作成するウィンドウと同じ深さを持つ他のウィンドウに由来する、それまでのスクリーンの内容は、その内容が作成するウィンドウの親のものであるかあるいは親の子孫のものであれば、単にそのまま残される。背景(background-pixmap)が None である場合の中、上述の状況に当てはまらない場合については、露出領域の初期内容は定められていない。背景(background-pixmap)が None であっても、この時、露出イベントがその領域に対して発生する。

ボーダのタイルの原点は、常に背景のタイルの原点と同じである。border-pixmap が指定されている場合、それによってデフォルトのボーダ・ピクスマップを置き換える。指定されたボーダ・ピクスマップと作成するウィンドウは、同じルートと同じ深さを持たなければならない(さもなくば Match エラーを生ずる)。どんなサイズのピクスマップを使ってもよいが、サイズによって処理速度が速かったり遅かったりする。border-pixmap に CopyFromParent を指定した場合、親のボーダ・ピクスマップが複製される(親のボーダ属性に対する以後の変更は、子には影響しない)。この場合、作成するウィンドウの深さは親と同じでなければならない(さもなくば Match エラーを生ずる)。また、この場合のピクスマップの複製は、親と子で同一のピクスマップ・オブジェクトを共有することによって行われる場合と、ピクスマップの内容を完全に複製することによって行われる場合とがある。border-pixel を指定した場合、指定されたピクセルによってデフォルトのボーダ・ピクスマップ及び明示的に指定された border-pixmap が置き換えられ、この border-pixel のピクセルを敷き詰めた不定の大きさのピクスマップをボーダ(の描画)に使用することになる。border-pixel の値に対して範囲の確認は行われず、border-pixel の値は単に適切なビット数に切り詰められる。

ウィンドウへの出力は、常にウィンドウの内側だけ残して切り取られる(clipped)ので、ボーダに影響を与えることはない。

bit-gravity は、ウィンドウのサイズを変更するときに同ウィンドウのどの領域を残すべきかを定める(訳註：これは縮小する場合の書き方。拡大する場合にどの領域をどこに残すのかも決まる)。win-gravity は、親ウィンドウのサイズを変更するときにその子ウィンドウをどのように再配置するべきかを定める。ConfigureWindow リクエストの項も参照。

backing-store に WhenMapped を指定すると、ウィンドウがマップされているときは隠れている領域の内容を保持してほしいということを、サーバに対して伝えることができる。backing-store に Always を指定すると、ウィンドウがアンマップされているときであっても内容を保持してほしいということを、サーバに対して伝えることができる。この場合(訳註：Expose イベントの説明によると WhenMapped の場合も含まれるような気がする)、サーバはウィンドウ作成時に露出イベントを生成することがある。NotUseful という値は、内容を保持する必要がないことをサーバに伝えるものである。もっとも、この場合でもサーバは、ウィンドウがマップされている間、内容を保持することにしてもよい。サーバが内容を保持する場合、サーバは、対象ウィンドウがその親より大きいときであっても、親ウィンドウの境界内の領域だけでなく(対象ウィンドウの)内容全体を保持するべきである。サーバが内容を保持している間は通常、露出イベントは発生しない。けれども、サーバはいつでも内容の保持を止めることができる。

save-under に True を指定すると、このウィンドウがマップされているときに同ウィンドウが隠している(他の)ウィンドウ群の内容を保存してほしいということを、サーバに対して伝えることができる。

ウィンドウの領域の中の隠されている部分の内容が保持されている場合、同ウィンドウの子孫でないウィンドウによって隠されている領域は、グラフィクス・リクエストの destination に(同ウィンドウが source であるときは source に)含まれるが、同ウィンドウの子孫であるウィンドウによって隠されている領域は(グラフィクス・リクエストの destination 及び source に)含まれない。

backing-planes は、1 に設定したビットによって、ウィンドウのどのビット・プレーンが保存しなければならない動的データ(backing-store の中に、あるいは save-under の作業の際に保存するもの)を保持しているのかを表す。backing-pixel は、backing-planes で指定されなかったプレーンに使用する値を指定するものである。サーバは(自由に)、指定されたビット・プレーンだけをバッキング・ストアやセーブ・アンダーに保存して、残りのプレーンを指定されたピクセル値で再生成することができる。このピクセル値においては、ウィンドウの指定深度(depth)を超えるビットは単に無視される。

event-mask は、このウィンドウ(イベントの型によっては同ウィンドウの子孫)に関するイベントの中、どのイベントにクライアントが興味を持っているのかを定めるものである。do-not-propagate-mask は、次の場合に祖先ウィンドウへ伝播すべきでないとされるのはどのイベントなのかを定める。即ち、このウィンドウに対してそのイベント型を選択したクライアントが存在しない場合に、祖先ウィンドウへ伝播すべきでないイベントを定める。

override-redirect は、このウィンドウに対するマップ・リクエストと構成リクエスト(configure request)が親に対する SubstructureRedirect に優先するか否かを指定するものである。これは通常、ウィンドウ・マネージャに対して、このウィンドウに干渉しないように知らせるために使用する。

colormap には、ウィンドウの本当の色を最も上手く反映するカラーマップを指定する。複数のハードウェア・カラーマップを使用できるサーバはこの情報を活用することができる。また、ウィンドウ・マネージャも InstallColormap リクエストでこの情報を使用することができる。colormap のカラーマップは、作成するウィンドウと同じヴィジュアル型(visual type)、同じルートを持たなければならない(さもなければ Match エラーを生ずる)。colormap に CopyFromParent が指定された場合、親のカラーマップが複製される(その後、親のカラーマップ属性を変更しても子には影響しない)。但し、(この場合、) 作成するウィンドウは親と同じヴィジュアル型を持たなければならず(さもなければ Match エラーを生ずる)、また、親のカラーマップは None であってはならない(さもなければ Match エラーを生ずる)。「None」については FreeColormap リクエストのところを参照。カラーマップの複製は、カラーマップ・オブジェクトを子と親との間で共有することによって行われるのであって、カラーマップの内容の完全なコピーを作成することによるのではない。

cursor の値を指定した場合、ポインタがウィンドウ内にある時は常にそのカーソルが使用される。cursor の値として None を指定した場合、ポインタがウィンドウ内にある時は親のカーソルが使用され、親のカーソルに変更があったときには表示されているカーソルは即座に変更される。

このリクエストは CreateNotify イベントを発生させる。

背景(背景ピクスマップ)とボーダ・ピクスマップとカーソルは、今後それらを明示的に参照する予定がない場合、直ちに解放することができる。

解放後に背景(背景ピクスマップ)やボーダ・ピクスマップに描画を行った場合にウィンドウの状態に齎す影響は、定められていない。サーバは、これらのピクスマップの複製を作ることもあるし、作らないこともある。

## ChangeWindowAttributes

window: WINDOW
value-mask: BITMASK
value-list: LISTofVALUE
Errors: Access, Colormap, Cursor, Match, Pixmap, Value, Window

value-mask と value-list には、どの属性を変更したいのかを指定する。値と制限は、CreateWindow のものと同じである。

background-pixmap あるいは background-pixel によって新しい背景を設定すると、それまでの背景は置き換えられる。border-pixel あるいは border-pixmap によって新しいボーダを設定すると、それまでのボーダは置き換えられる。

背景の変更によってウィンドウの内容が変更されることはない。ボーダのタイルの原点が変わるようなボーダ設定や背景変更を行うと、ボーダは再描画がされる。ルート・ウィンドウの背景(background-pixmap)を None もしくは ParentRelative に変更すると、デフォルトの背景ピクスマップが設定されている状態に戻る。ルート・ウィンドウのボーダ(border-pixmap)を CopyFromParent に変更すると、デフォルトのボーダ・ピクスマップが設定されている状態に戻る。

win-gravity を変更しても、ウィンドウの現在の位置には影響を与えない。

隠れているウィンドウの backing-store を WhenMapped もしくは Always に変更したり、マップされているウィンドウの backing-planes、backing-pixel、save-under を変更したりしても、その効果が直ちに反映されないことがある。

複数のクライアントが同一のウィンドウに対する入力(イベント)を選択することは可能である。なぜかというと、各クライアントの event-mask は別々のものだからである。イベントが発生すると、同イベントに関心があるクライアント全てに対して同イベントが報告されることになる。但し、SubstructureRedirect を同時に選択できるのは１つのクライアントだけであり、ResizeRedirect を同時に選択できるのは１つのクライアントだけであり、ButtonPress を同時に選択できるのも１つのクライアントだけである。これらの制約に違反しようとすると、Access エラーとなる。

do-not-propagate-mask は１つのウィンドウにつき１つしか存在しない。クライアント毎に１つづつ存在するわけではない。

ウィンドウのカラーマップを変更する(既存のカラーマップの内容を変更するのではなく、新たなカラーマップを定義する)と、ColormapNotify イベントが発生する。可視状態(visible)のウィンドウのカラーマップを変更しても、その結果がすぐにはスクリーン上に反映されないことがある(InstallColormap リクエストの項を参照)。

ルート・ウィンドウの cursor を None に変更すると、デフォルトのカーソルが設定されている状態に戻る。

指定した属性の検証と変更の順序は、サーバ依存である。エラーが発生した場合でも、指定した属性群の一部は変更されてしまっている可能性がある。

## GetWindowAttributes

window: WINDOW
▶
visual: VISUALID
class: { InputOutput, InputOnly}
bit-gravity: BITGRAVITY
win-gravity: WINGRAVITY
backing-store: { NotUseful, WhenMapped, Always}
backing-planes: CARD32
backing-pixel: CARD32
save-under: BOOL
colormap: COLORMAP or None
map-is-installed: BOOL
map-state: { Unmapped, Unviewable, Viewable}
all-event-masks, your-event-mask: SETofEVENT
do-not-propagate-mask: SETofDEVICEEVENT
override-redirect: BOOL
Errors: Window

このリクエストは、window のウィンドウの現在の属性群を返すものである。ウィンドウは、自身がマップされていても祖先のいづれかがアンマップされていれば、Unviewable (map-state：表示不可能)である。all-event-masks は、window のウィンドウに対して選択されているイベント・マスク全て(全クライアントの分)について、非排他的論理和をとったものである。your-event-mask は、このリクエストを発行したクライアントが選択しているイベント・マスクである。

## DestroyWindow

window: WINDOW
Errors: Window

引数 window のウィンドウがマップされている場合、自動的にリクエスト UnmapWindow が実行される。その後、同ウィンドウとその子孫全てを破棄し、破棄されたウィンドウそれぞれに関して DestroyNotify イベントを発生させる。DestroyNotify イベントの発生順序について述べると、各ウィンドウにおいて、先ずそのウィンドウの全ての子孫に関するイベントが発生し、その後に同ウィンドウ自身に関するものが発生する。兄弟間や、下位階層を跨いだ(訳註：従兄弟・再従兄弟のような)ウィンドウの間には、イベントの発生順序に対してこれ以外の制約は無い。

それまで隠れていた(obscured)ウィンドウに対して、通常の露出処理(exposure processing)が行われる。

window で指定されたウィンドウがルート・ウィンドウである場合、このリクエストでは何も起こらない。

## DestroySubwindows

window: WINDOW
Errors: Window

このリクエストは、window で指定されたウィンドウの全ての子供に対して、ウィンドウの重ね順の下から上へという順番で、リクエスト DestroyWindow を実施するものである。

## ChangeSaveSet

window: WINDOW
mode: { Insert, Delete}
Errors: Match, Value, Window

このリクエストは、(このリクエストを発行した)クライアントのセーブ・セットに対して、window で指定したウィンドウを追加あるいは削除するものである。このウィンドウは、リクエストを発行したクライアントとは別のクライアントが作成したものでなければならない(さもなくば Match エラーを生ずる)。セーブ・セットの使い方については、第１０章にも情報がある。

ウィンドウが破棄された場合、サーバは自動的に同ウィンドウをセーブ・セットから削除する。

## ReparentWindow

window, parent: WINDOW
x, y: INT16
Errors: Match, Window

window のウィンドウがマップされている場合、まず UnmapWindow リクエストの処理が自動的に実行される。次いで同ウィンドウは、ウィンドウの階層構造中の現在の位置から除かれ、parent で指定された親の子として(階層構造中に)挿入される。x、y 座標は、親の原点を基準としたものであり、ウィンドウの外側左上隅の新たな位置を指定するものである。window のウィンドウは、兄弟の中では、重ね順の一番上に置かれる。それに続いて、ReparentNotify イベントが発生する。window のウィンドウの override-redirect 属性の値はこのイベントで渡される。override-redirect の値が True であれば、それはウィンドウ・マネージャがこのウィンドウに干渉すべきでないことを示している。最後に、window のウィンドウが元々マップされていた場合、MapWindow リクエストの処理が自動的に実行される。

それまで隠れていたウィンドウ群に対しては、通常の露出処理が行われる。サーバは、最初のアンマップ処理によって露出する領域であって且つ最後のマップ処理によってすぐに隠されてしまう領域に対して、露出イベントを生成しないことがある。

次の場合に Match エラーが発生する。即ち、新たな親と古い親が同一のスクリーン上にない場合、新たな親が window のウィンドウ自身であるか又は同ウィンドウの子孫である場合、新たな親が InputOnly ウィンドウであり window のウィンドウはそうではない場合、及び window のウィンドウの背景(background-pixmap)が ParentRelative であり且つ新たな親と同ウィンドウが同一の深度(depth)を持たない場合である。

## MapWindow

window: WINDOW
Errors: Window

window で指定されたウィンドウが既にマップされている場合、このリクエストは何も行わない。

指定されたウィンドウの override-redirect 属性が False であり且つこのリクエストを発行したクライアントとは別のクライアントが同ウィンドウの親に対して SubstructureRedirect を選択していた場合、MapRequest イベントが発生するものの、指定されたウィンドウは依然としてアンマップされたままである。そうでない場合は、同ウィンドウはマップされ、MapNotify イベントが発生する。

ウィンドウが表示可能になった時にその内容が捨てられてしまっている場合、同ウィンドウは自身の背景によってタイルされ(背景が定義されてない場合はスクリーンの既存の内容は変更されない)、０個以上の露出イベントが発生する。ウィンドウがアンマップされていた間 backing-store が保持されていた場合、露出イベントは発生しない。新たに backing-store を保持するようになったときは、常にウィンドウ全体の露出イベントが発生する。さもなければ、可視領域(のイベント)だけが報告される。新たに表示可能となった子孫にも、同様のタイル処理(tiling)と露出処理が行われる。

## MapSubwindows

window: WINDOW
Errors: Window

このリクエストは、window で指定されたウィンドウのアンマップ状態にある子供全てに対して、重ね順の上から下へ向かう順番で、MapWindow リクエストを実施するものである。

## UnmapWindow

window: WINDOW
Errors: Window

window で指定されたウィンドウが既にアンマップされている場合、このリクエストは何も行わない。そうでない場合、同ウィンドウはアンマップされ、UnmapNotify イベントが発生する。それまで隠れていたウィンドウ群に対しては、通常の露出処理が行われる。

## UnmapSubwindows

window: WINDOW
Errors: Window

このリクエストは、window で指定されたウィンドウのマップ状態にある子供全てに対して、重ね順の下から上へ向かう順番で、UnmapWindow リクエストを実施するものである。

## ConfigureWindow

window: WINDOW
value-mask: BITMASK
value-list: LISTofVALUE
Errors: Match, Value, Window

このリクエストは、window で指定されたウィンドウの構成を変更するものである。value-mask と value-list は、どの値を設定するのかを指定する。設定可能な値は以下のものである。

属性 | 型
--- | ---
x | INT16
y | INT16
width | CARD16
height | CARD16
border-width | CARD16
sibling | WINDOW
stack-mode | { Above, Below, TopIf, BottomIf, Opposite }

x、y 座標は、window で指定されたウィンドウの親の原点を基準としたものであり、指定ウィンドウの外側左上隅(upper-left outer corner)の位置を指定する。width と height は、内側のサイズを指定するものであり、ボーダ(枠)は含まず、0 であってはならない(さもなくば Value エラーを生ずる)。これらの値が指定されなかった場合、window のウィンドウの既存のジオメトリの値を使用する。border-width だけを変更すると、ウィンドウの外側左隅(outer-left corner)の位置は動かないままであるが、ウィンドウの原点の絶対位置は移動する。InputOnly ウィンドウの border-width に 0 でない値を設定しようとすると、Match エラーとなる。

window のウィンドウの override-redirect 属性が False であり、且つこのリクエストを発行したクライアントとは別のクライアント(訳註：通常はウィンドウ・マネージャ)が同ウィンドウの親に対して SubstructureRedirect を選択している場合、ConfigureRequest イベントが発生するだけで、それ以上の処理は行われない。これ以外の場合は、下記の処理が行われる。

このリクエストを発行したクライアントとは別のクライアントが window のウィンドウに対して ResizeRedirect を選択している状況で、同ウィンドウの内側の width や height (幅と高さ)を変更しようとした場合、ResizeRequest イベントが発生するだけで、現在の内側の幅と高さが代わりに(そのまま)使用される。ウィンドウの override-redirect 属性は ResizeRedirect には影響しないこと、及び親に対する SubstructureRedirect はその子に対する ResizeRedirect に優先することに注意。

window のウィンドウのジオメトリは指定された通りに変更され、同ウィンドウは兄弟間で積み重ね直される。そして、同ウィンドウの状態が実際に変わると、ConfigureNotify イベントが発生する。ウィンドウの内側の幅と高さが実際に変更された場合、同ウィンドウの子供は、各自の win-gravity に従って影響を受ける。それまで隠れていたウィンドウ群に対して、露出処理が行われる(window のウィンドウ自身と同ウィンドウの子孫は、これまで自分の領域が隠されていたけれども今では露出しているという場合、ここでいう「ウィンドウ群」に含まれる)。露出処理は、window のウィンドウの新しい領域(幅と高さを増やしたことで生まれた領域)、及びウィンドウ内容が失われた領域に対しても行われる。

ウィンドウの内側の幅と高さが変わらないまま、同ウィンドウが移動したりそのボーダが変更されたりした場合、ウィンドウの内容は失われずにウィンドウとともに移動する。ウィンドウの内側の幅と高さを変更すると、同ウィンドウの bit-gravity に従ってウィンドウ内容が移動したり失われたりする。また、ウィンドウ内側の幅と高さの変更は、同ウィンドウの子供の再構成をも引き起こす。この再構成は、子供の win-gravity に従って行われる。幅が W、高さが H の変更について、[x, y] という対を以下のように定義する。

方向 | 増分(Deltas)
--- | ---
NorthWest | [0, 0]
North | [W/2, 0]
NorthEast | [W, 0]
West | [0, H/2]
Center | [W/2, H/2]
East | [W, H/2]
SouthWest | [0, H]
South | [W/2, H]
SouthEast | [W, H]

これらの中のいづれかの方向を bit-gravity として持つウィンドウのサイズが変更された場合、その方向に対応する [x, y] の対によって、同ウィンドウの中の各ピクセルの位置の変化(変化量)を表すことができる。これらの中のいづれかの方向を win-gravity として持つウィンドウの親ウィンドウのサイズが変更された場合、その方向に対応する [x, y] の対によって、親の内部におけるウィンドウの位置の変化(変化量)を表すことができる。この位置変更によって GravityNotify イベントが発生する。GravityNotify イベントは、ConfigureNotify イベントが発生した後に発生する。

Static というグラヴィティは、内容と原点の移動がルート・ウィンドウの原点を基準としては行われないことを表す。ウィンドウのサイズ変更が [X, Y] を増分とする位置変更を伴っている場合、bit-gravity が Static であれば、各ピクセルの位置の変更(変化量)は [-X, -Y] である。あるウィンドウの親ウィンドウのサイズ変更が [X, Y] を増分とする位置変更を伴っている場合、win-gravity が Static であれば、子の位置の変更(変化量)は [-X, -Y] である。Static グラヴィティの効果が生じるのはウィンドウの幅あるいは高さが変わった場合に限られ、単にウィンドウが移動しただけでは効果は生じない。

Forget というグラヴィティは、backing-store 属性や save-under 属性による要求がある場合でも、サイズ変更の後は常にウィンドウの内容を棄てることを表す。ウィンドウはその背景によってタイルされ(但し、背景が定義されてない場合、スクリーンの既存の内容は変更されない)、０個以上の露出イベントが発生する。

子孫の内容とボーダは、その親の bit-gravity には影響されない。サーバは、指定された bit-gravity を無視して代わりに Forget を使用することができる。

win-gravity の Unmap は NorthWest に似ているけれども、親のサイズが変更されたときに子もアンマップされる点と、UnmapNotify イベントを発生させる点が異なる。UnmapNotify イベントは、ConfigureNotify イベントが発生した後に発生する。

sibling と stack-mode を指定した場合、window で指定されたウィンドウの重ね順は以下のように変更される。

Above | window で指定されたウィンドウは、sibling で指定された兄弟のすぐ上に置かれる。
Below | window のウィンドウは、sibling で指定された兄弟のすぐ下に置かれる。
TopIf | sibling で指定された兄弟が window のウィンドウを覆っている場合、window のウィンドウは重ね順の一番上に置かれる。
BottomIf | window のウィンドウが sibling で指定された兄弟を覆っている場合、window のウィンドウは重ね順の一番下に置かれる。
Opposite | sibling で指定された兄弟が window のウィンドウを覆っている場合、 window のウィンドウは重ね順の一番上に置かれる。この場合に当てはまらず、window のウィンドウが sibling で指定された兄弟を覆っていれば、window のウィンドウは重ね順の一番下に置かれる。

stack-mode が指定されているにもかかわらず sibling が指定されていない場合、window で指定されたウィンドウの重ね順は以下のように変更される。

Above | window のウィンドウは重ね順の一番上に置かれる。
Below | window のウィンドウは重ね順の一番下に置かれる。
TopIf | window のウィンドウを覆っている兄弟がある場合、window のウィンドウは重ね順の一番上に置かれる。
BottomIf | window のウィンドウに覆われている兄弟がある場合、window のウィンドウは重ね順の一番下に置かれる。
Opposite | window のウィンドウを覆っている兄弟がある場合、window のウィンドウは重ね順の一番上に置かれる。この場合に当てはまらず、window のウィンドウに覆われている兄弟があれば、window のウィンドウは重ね順の一番下に置かれる。

stack-mode の指定なしに sibling を指定した場合、あるいは window と sibling が実際には兄弟でない場合、Match エラーとなる。

BottomIf、TopIf、及び Opposite の演算は、window のウィンドウの最終的なジオメトリ(このリクエストの他の引数で変更されたもの)を用いて行われるのであって、同ウィンドウの初期ジオメトリを用いて行われるのではない。

ルート・ウィンドウの構成を変更しようとする試みは、無効である。

## CirculateWindow

window: WINDOW
direction: { RaiseLowest, LowerHighest}
Errors: Value, Window

このリクエストを呼び出すクライアントとは別のクライアント(訳註：通常はウィンドウ・マネージャ)が window のウィンドウに対して SubstructureRedirect を選択していた場合、CirculateRequest イベントが発生するだけで、それ以上の処理は何も行われない。それ以外の場合は、下記の処理が行われ、実際にウィンドウの重ね順が変更されると CirculateNotify イベントが発生する。

RaiseLowest が指定された場合、CirculateWindow は、マップされていて且つ一番下にある子であって、別の子によって覆われている者が存在すれば、その子を重ね順の一番上に持ってくる。LowerHighest が指定された場合、CirculateWindow は、マップされていて且つ一番上にある子であって、別の子を覆っている者が存在すれば、その子を重ね順の一番下に持っていく。それまで隠されていたウィンドウに対して、露出処理(exposure processing)が行われる。

## GetGeometry

drawable: DRAWABLE
▶
root: WINDOW
depth: CARD8
x, y: INT16
width, height, border-width: CARD16
Errors: Drawable

このリクエストは、drawable で指定されたドローアブルのルートと現在のジオメトリを返すものである。depth は、オブジェクトのピクセルあたりのビット数である。drawable がピクスマップである場合、x、y、及び border-width は常に 0 である。ウィンドウである場合、x、y 座標は、同ウィンドウの親の原点を基準としたものであり、同ウィンドウの外側左上隅の表す。また、この場合の width 及び height は、ウィンドウ内側のサイズを表し、ボーダ(枠)は含まない。

InputOnly ウィンドウをこのリクエストの drawable に渡すのは合法である。

## QueryTree

window: WINDOW
▶
root: WINDOW
parent: WINDOW or None
children: LISTofWINDOW
Errors: Window

このリクエストは、window のウィンドウのルート、親、及び子供を返すものである。children のリスト中の子供は、重ね順に関して下から上の順番で並べられている。

## InternAtom

name: STRING8
only-if-exists: BOOL
▶
atom: ATOM or None
Errors: Alloc, Value

このリクエストは、name で指定された名前に対応するアトムを返すものである。only-if-exists に False を指定した場合、そのアトムが存在しなければ新たに作成される。name の文字列には ISO Latin-1 の符号化方式を用いる。大文字・小文字は区別される。

アトムの寿命は、これを定義した(intern)クライアントとは無関係である。サーバがリセットするまで、アトムは定義されたままである(第１０章を見よ)。

## GetAtomName

atom: ATOM
▶
name: STRING8
Errors: Atom

このリクエストは、atom で指定されたアトムの名前(文字列)を返すものである。

## ChangeProperty

window: WINDOW
property, type: ATOM
format: {8, 16, 32}
mode: { Replace, Prepend, Append}
data: LISTofINT8 or LISTofINT16 or LISTofINT32
Errors: Alloc, Atom, Match, Value, Window

このリクエストは、window で指定されたウィンドウの property で指定されたプロパティを変更するものである。サーバは type (型)の解釈は行わない。format (形式)には、data を８ビットのデータのリスト(配列)として見るべきなのか、それとも１６ビットあるいは３２ビットのデータのリストとして見るべきなのかを指定する。この指定によって、サーバは必要に応じて正しくバイト順の交換(byte-swap)を行えるようになる。

mode の値が Replace である場合、以前のプロパティの値は破棄される。mode の値が Prepend あるいは Append である場合、type と format は既存のプロパティ値のものと一致していなければならない(さもなくば Match エラーを生ずる)。property のプロパティが定義されてない場合(プロパティがまだ存在しない場合)、データ長が 0 で適切な type と format を持つプロパティが定義されている(存在している)ものと考える。data のデータは、Prepend では既存のデータの頭の位置に添加され、Append では既存のデータの末尾に添加される。

このリクエストは、window のウィンドウに関する PropertyNotify イベントを発生させる。

プロパティの寿命は、それを設定した(格納した)クライアントとは無関係である。プロパティは、明示的に削除されるまで、あるいは(プロパティの設置されている)ウィンドウが破壊されるまで、あるいはサーバがリセットするまで(第１０章を参照)、存在し続ける。

プロパティの最大サイズは、サーバ次第であり、動的に変更できる。

## DeleteProperty

window: WINDOW
property: ATOM
Errors: Atom, Window

このリクエストは、property で指定されたプロパティが存在する場合に、 同プロパティを window で指定されたウィンドウから削除するものである。同プロパティが存在しなかった場合を除き、window のウィンドウに関する PropertyNotify イベントを発生させる。

## GetProperty

window: WINDOW
property: ATOM
type: ATOM or AnyPropertyType
long-offset, long-length: CARD32
delete: BOOL
▶
type: ATOM or None
format: {0, 8, 16, 32}
bytes-after: CARD32
value: LISTofINT8 or LISTofINT16 or LISTofINT32
Errors: Atom, Value, Window

property で指定されたプロパティが window で指定されたウィンドウに存在しない場合、戻り値 type には None が返り、戻り値の format と bytes-after には 0 が返り、value には空(empty)が返る。この場合、引数 delete は無視される。property で指定されたプロパティが存在するものの、その型が引数 type で指定された型と一致しない場合、戻り値 type にそのプロパティの実際の型が返り、戻り値 format にはプロパティの実際の形式(0 ではない)が返り、bytes-after にはプロパティのバイト長(format が 16 でも 32 でも単位はバイトである)が返り、value は空が返る。この場合も、引数 delete は無視される。指定されたプロパティが存在する場合、AnyPropertyType が指定されているか、もしくは引数 type で指定された型とプロパティの実際の型が一致していれば、戻り値 type にはプロパティの実際の型が返り、戻り値 format にはプロパティの実際の形式(0 ではない)が返り、bytes-after と value には下記の値が返る。bytes-after と value の説明に次の変数を用いる。

    	N = actual length of the stored property in bytes
    	    (even if the format is 16 or 32)
    	I = 4 * long-offset
    	T = N - I
    	L = MINIMUM(T, 4 * long-length)
    	A = N - (I + L)

戻り値 value はプロパティの I 番目のバイト要素(先頭の要素番号は 0)から始まるものであり、value の長さは L (単位はバイト)である。但し、L が負になるような long-offset が指定された場合は、Value エラーとなる。bytes-after の値は A であり、この値はプロパティ内にある未だ読み込まれていない後続バイトの数を表す。引数 delete が True であり且つ bytes-after が 0 である場合、プロパティはウィンドウから削除され、同ウィンドウに関する PropertyNotify イベントが発生する。

## RotateProperties

window: WINDOW
delta: INT16
properties: LISTofATOM
Errors: Atom, Match, Window

properties のリスト(配列)にある各プロパティの名前に対して 0 から順番に番号が振られていると考えた場合、同リストに N 個のプロパティ名が入っているとすると、0 から N - 1 までの全ての I に対して、I 番目のプロパティ名と結び付いていた値(プロパティの内容)は、(I + delta) mod N 番目のプロパティ名と結び付いていた値へと変化する。結果は、プロパティ名の仮想的な環の中で、各プロパティの「状態」(内容)を delta の分だけ移動させた(環状に回転させた)のと同じになる(delta が正であれば右へ、delta が負であれば左へ移動する)。

delta mod N が 0 でない場合、各プロパティに対して、リスト内に並んでいる順序で、PropertyNotify イベントが発生する。

あるアトムがリスト内に複数回登場する場合、もしくは(properties 中の)あるアトムを名前(識別子)として持つプロパティが window のウィンドウに定義されていない(設定されていない)場合、Match エラーが発生する。エラー Atom や Match が発生した場合、properties のプロパティ群は変更されない。

## ListProperties

window: WINDOW
▶
atoms: LISTofATOM
Errors: Window

このリクエストは、window で指定されたウィンドウに現在設定されているプロパティ群のアトム(のリスト)を返すものである。

## SetSelectionOwner

selection: ATOM
owner: WINDOW or None
time: TIMESTAMP or CurrentTime
Errors: Atom, Window

このリクエストは、selection で指定されたセレクションの所有者(クライアント)、所有者ウィンドウ、及び最終変更時刻を変更するものである。time で指定された時刻が指定セレクションの現在の最終変更時刻より早い場合、あるいは現在のサーバ時刻より遅い場合、このリクエストは何も行わない。それ以外の場合は、最終変更時刻は time で指定された時刻に設定される。この時、time が CurrentTime であれば、time の値を現在のサーバ時刻で置き換えて設定を行う。owner の所有者ウィンドウとして None が指定された場合、セレクションの所有者は None になる(即ち、所有者は存在しなくなる)。それ以外の場合、セレクションの所有者はこのリクエストを実行したクライアントになる。新しい所有者(クライアントであれ None であれ)が現在の所有者と同一でなく、且つ現在の所有者が None でない場合、現在の所有者に SelectionClear イベントが送られる。

セレクションの所有者であるクライアントが(後ほど)終了した場合(即ちその接続が切断された場合)、あるいはリクエストで指定した所有者ウィンドウが(後ほど)破棄された場合、セレクションの所有者は自動的に None に転換されるが、最終変更時刻は変更されない。

サーバは、セレクション・アトムの解釈を行わない。owner で指定した所有者ウィンドウは、GetSelectionOwner リクエストの戻り値となり、また、SelectionRequest イベント及び SelectionClear イベントの中でも報告される。

セレクションは、サーバに対して大域的(global)である。(訳註：同一サーバを用いているクライアント全てからアクセスできる。)

## GetSelectionOwner

selection: ATOM
▶
owner: WINDOW or None
Errors: Atom

このリクエストは、selection で指定したセレクションを現在所有しているウィンドウがあれば、そのウィンドウを返すものである。owner に None が返った場合、指定したセレクションには所有者が存在しないことを表す。

## ConvertSelection

selection, target: ATOM
property: ATOM or None
requestor: WINDOW
time: TIMESTAMP or CurrentTime
Errors: Atom, Window

selection で指定されたセレクションに所有者が存在する場合、サーバはその所有者に SelectionRequest イベントを送信する。指定されたセレクションに所有者が存在しない場合、サーバは、property フィールドが None である SelectionNotify イベントを生成して requestor のウィンドウに送る。どちらのイベントでも、引数は変更せずそのまま渡される(上記の property の場合は例外)。

## SendEvent

destination: WINDOW or PointerWindow or InputFocus
propagate: BOOL
event-mask: SETofEVENT
event: <normal-event-format>
Errors: Value, Window

destination に PointerWindow を指定した場合、送信先(destination)は、ポインタが内部に存在するウィンドウに置き換えられる。destination に InputFocus を指定し、且つフォーカス・ウィンドウがポインタを含んでいる場合(訳註：用語集「Containment」)、送信先は、ポインタが内部に存在するウィンドウに置き換えられる。そうでない場合(destination に InputFocus を指定し、且つフォーカス・ウィンドウがポインタを含んでいない場合)、送信先はフォーカス・ウィンドウに置き換えられる。

event-mask が空の集合である場合、event のイベントは destination のウィンドウを作成したクライアントへ送られる。このクライアントが既に存在しない場合、イベントは送られない。

propagate が False である場合、イベントは、destination のウィンドウに対して event-mask で指定されているイベント型のいづれかを選択していたクライアント全てに送られる。

propagate が True であり、且つ destination のウィンドウに対して event-mask で指定されているイベント型のいづれかを選択しているクライアントが存在しない場合、destination は、次の条件を満たす、destination の最も近い祖先ウィンドウで置き換えられる。即ち、そのウィンドウに対して event-mask で指定されている型を選択しているクライアントが存在する祖先ウィンドウであって、且つ間に存在する祖先ウィンドウの中にそのイベント型を do-not-propagate-mask に含めている者が存在しない祖先ウィンドウである。そのような祖先ウィンドウが存在しない場合、あるいはその祖先ウィンドウがフォーカス・ウィンドウの祖先であって元々 InputFocus が指定されていた場合、イベントはどのクライアントへの送られない。これらの場合に当てはまらなければ、event のイベントは、最終的に決まった destination に対して event-mask で指定された型のいづれかを選択しているクライアント全てに報告される。

イベント・コード(イベントの種類を表す)は、コア・イベント(core events：本プロトコルで規定されているイベント)のいづれかのもの、または拡張で定義されたイベントのいづれかのものでなければならない(さもなくば Value エラーを生ずる)。これは、サーバが(必要に応じて)イベントの内容のバイト順を正しく並び替えることができるようにするためである。このバイト交換以外では、イベント・コードの最上位ビットを強制的に ON にすること及びイベントの中の通し番号を正しく設定することを除いて、サーバはイベントの内容を変更したり検査したりしない。

このリクエストでは、能動的占有は無視される。

## GrabPointer

grab-window: WINDOW
owner-events: BOOL
event-mask: SETofPOINTEREVENT
pointer-mode, keyboard-mode: { Synchronous, Asynchronous}
confine-to: WINDOW or None
cursor: CURSOR or None
time: TIMESTAMP or CurrentTime
▶
status: { Success, AlreadyGrabbed, Frozen, InvalidTime, NotViewable}
Errors: Cursor, Value, Window

このリクエストによって、ポインタの制御を能動的に占有することができる。以後のポインタ・イベントは、占有しているクライアントだけに報告される。このリクエストは、同リクエストを発行したクライアントによる他の能動的ポインタ占有を置き換える。

owner-events が False である場合、生成されるポインタ・イベントは全て、grab-window のウィンドウを対象として報告されることになり、また、event-mask で選択されているときしか報告されないことになる。owner-events が True であり、且つ生成されたポインタ・イベントが通常であればリクエスト発行クライアントへ報告される場合、同イベントは通常通り同クライアントへ報告される。これ以外の場合、イベントは、grab-window のウィンドウを対象として報告されることになり、また、event-mask で選択されているときしか報告されないことになる。owner-events の値がどちらであっても、報告されないイベントは単に棄てられる。

pointer-mode が Asynchronous である場合、ポインタ・イベントの処理は通常通り続行される。このリクエストを発行したクライアントによってポインタが現在凍結されている場合、ポインタ・イベントの処理は再開される。pointer-mode が Synchronous である場合、(プロトコル経由で見た)ポインタの状態は凍結されているように見えるものとなり、サーバは、占有しているクライアントが AllowEvents リクエストを発行して凍結を解除するまで、あるいはポインタ占有が解除されるまで、それ以上のポインタ・イベントを生成しなくなる。ポインタに起きた実際の変更は、同ポインタが凍結されている間も失われておらず、後々処理するためにキューに入れられているだけである。

keyboard-mode が Asynchronous である場合、キーボード・イベントの処理は、占有の能動化(activation)による影響は受けない。keyboard-mode が Synchronous である場合、(プロトコル経由で見た)キーボードの状態は凍結されているように見えるものとなり、サーバは、占有しているクライアントが AllowEvents リクエストを発行して凍結を解除するまで、あるいはポインタの占有が解除されるまで、それ以上のキーボード・イベントを生成しなくなる。キーボードに起きた実際の変更は、同キーボードが凍結されている間も失われておらず、後々処理するためにキューに入れられているだけである。

cursor にカーソルを指定した場合、ポインタがどのウィンドウの内部にあるかにかかわらず、同カーソルが表示される。cursor にカーソルを指定しなかった場合、ポインタが grab-window のウィンドウの内部にあるかもしくはその下位ウィンドウのいづれかの内部にあれば、そのウィンドウの通常のカーソルが表示される。これ以外の場合、grab-window のウィンドウのカーソルが表示される。

confine-to のウィンドウを指定すると、ポインタはそのウィンドウに含まれたままとなり、そこから出られなくなる。confine-to のウィンドウは、grab-window のウィンドウと無関係のものでもかまわない。ポインタは、元々 confine-to ウィンドウの内部に存在しなかった場合、占有の能動化(activate)の直前に自動的に最も近い縁に転移させられる(そして enter/leave のイベントが通常通り発生する)。confine-to のウィンドウが後に再構成された場合、ポインタは、同ウィンドウに含まれたままであるように、(必要に応じて)自動的に転移させられる。

このリクエストでは、EnterNotify イベントと LeaveNotify イベントが発生する。

他のクライアントがポインタを能動的に占有していた場合、このリクエストは蹉跌し、status として AlreadyGrabbed が返る。他のクライアントの能動的占有によってポインタが凍結されていた場合、このリクエストは蹉跌し、status として Frozen が返る。grab-window のウィンドウもしくは confine-to window のウィンドウが表示可能でなかった場合、あるいは confine-to のウィンドウが完全にルート・ウィンドウの境界の外側にある場合、このリクエストは蹉跌し、status として NotViewable が返る。time で指定された時刻が最終ポインタ占有時刻(last-pointer-grab time)の前であるか、または現在のサーバ時刻の後である場合、このリクエストは蹉跌し、status として InvalidTime が返る。この場合を除き、最終ポインタ占有時刻は time で指定された時刻に設定されるが、time の値に CurrentTime を指定した場合、この値は現在のサーバ時刻で置き換えられる。

## UngrabPointer

time: TIMESTAMP or CurrentTime

このリクエストを発行したクライアントが(GrabPointer もしくは GrabButton もしくは通常のボタン押下により)ポインタを能動的に占有している場合、このリクエストは同ポインタを解放し、キューに入っているイベントがあればそれを解放する。time で指定された時刻が最終ポインタ占有時刻より早い場合、あるいは現在のサーバ時刻より遅い場合、このリクエストは何も行わない。

このリクエストでは、EnterNotify イベントと LeaveNotify イベントが発生する。

能動的ポインタ占有のイベント発生ウィンドウや能動的ポインタ占有の confine-to のウィンドウ(GrabPointer参照)が表示可能でなくなった場合、あるいはウィンドウの再構成によって confine-to のウィンドウが完全にルート・ウィンドウの境界の外側に行ってしまった場合、UngrabPointer リクエストが自動的に実行される。

## GrabButton

modifiers: SETofKEYMASK or AnyModifier
button: BUTTON or AnyButton
grab-window: WINDOW
owner-events: BOOL
event-mask: SETofPOINTEREVENT
pointer-mode, keyboard-mode: { Synchronous, Asynchronous}
confine-to: WINDOW or None
cursor: CURSOR or None
Errors: Access, Cursor, Value, Window

このリクエストによって受動的な占有を確立することができる。将来、下記の全ての条件が満たされたとき、ポインタは GrabPointer で述べた形で能動的に占有され、最終ポインタ占有時刻には button で指定されたボタンが押された時刻(ButtonPress イベントの中に入っている)が設定され、ButtonPress イベントが報告される。

- ポインタが占有されておらず、且つ modifiers で指定された修飾キーが論理的に押されている状況で button で指定されたボタンが論理的に押され、且つその他のボタンや修飾キーは論理的に押されていない。

- grab-window で指定されたウィンドウがポインタを含んでいる。

- confine-to のウィンドウが存在する場合、同ウィンドウが表示可能(viewable)である。

- grab-window の祖先のいづれにおいても、ボタン/キーの組み合わせが同じである受動的占有が存在しない。

残りの引数の解釈は、GrabPointer と同じである。能動的な占有は、ポインタの全ボタンが論理的に放されている(押されていない)状態であるとき、各修飾キーの論理的な状態とは無関係に、自動的に終了する。デバイスの論理的な状態(プロトコル経由で見た状態)は、デバイスのイベント処理が凍結されている場合、デバイスの物理的な状態より遅れている可能性がある。

このリクエストは、同一のウィンドウ上の同一のボタン/キーの組み合わせに対する同一クライアントによるそれまでの受動的占有すべてを置き換える。modifiers に AnyModifier を指定すると、修飾キーのあらゆる組み合わせ(修飾キー無しも組み合わせに含む)に対してこのリクエストを発行するのと同じことになる。modifiers で指定された修飾キー全てに現時点でキーコードが割り当てられている必要はない。button に AnyButton を指定すると、あらゆるボタンに対してこのリクエストを発行するのと同じことになる。この場合を除き、button で指定されたボタンが現時点で物理ボタンに割り当てられている必要はない。

別のクライアントが同一のウィンドウ上の同一のボタン/キーの組み合わせに対して既に GrabButton リクエストを発行していた場合、Access エラーが発生する。AnyModifier や AnyButton を使用する場合、組み合わせの衝突する占有が存在すれば、リクエストは完全な失敗に終わり(占有は一切確立されない)、Access エラーが発生する。このリクエストは、能動的な占有には影響を与えない。

## UngrabButton

modifiers: SETofKEYMASK or AnyModifier
button: BUTTON or AnyButton
grab-window: WINDOW
Errors: Value, Window

このリクエストは、指定されたウィンドウにおける指定されたボタン/キーの受動的な組み合わせがこのリクエストを発行したクライアントによって占有されているものである場合に、その組み合わせを解放するものである。引数 modifiers に AnyModifier を指定すると、修飾キーのあらゆる組み合わせ(修飾キー無しの組み合わせも含む)に対してこのリクエストを発行するのと同じことになる。button に AnyButton を指定すると、あらゆるボタンに対してこのリクエストを発行するのと同じことになる。このリクエストは、能動的占有には影響を与えない。

## ChangeActivePointerGrab

event-mask: SETofPOINTEREVENT
cursor: CURSOR or None
time: TIMESTAMP or CurrentTime
Errors: Cursor, Value

このリクエストは、このリクエストを発行したクライアントがポインタを動的に占有しており、且つ time で指定された時刻が最終ポインタ占有時刻の前でなく現在のサーバ時刻の後でない場合に、指定された動的変数(event-mask と cursor)を変更するものである。event-mask と cursor の解釈は GrabPointer の場合と同じである。このリクエストは、GrabButton によって確立された受動的占有の変数群には影響を与えない。

## GrabKeyboard

grab-window: WINDOW
owner-events: BOOL
pointer-mode, keyboard-mode: { Synchronous, Asynchronous}
time: TIMESTAMP or CurrentTime
▶
status: { Success, AlreadyGrabbed, Frozen, InvalidTime, NotViewable}
Errors: Value, Window

このリクエストによって、キーボードの制御を能動的に占有することができる。以後のキー・イベントは、占有しているクライアントだけに報告される。このリクエストは、このリクエストを発行したクライアントによるキーボードの能動的占有が他にあれば、それを置き換える。

owner-events が False である場合、生成されるキー・イベントは全て grab-window のウィンドウを対象として報告される。owner-events が True であり、且つ生成されたキー・イベントが通常であればこのリクエストを発行したクライアントへ報告される場合、同キー・イベントは通常通りに報告される。これ以外の場合、イベントは grab-window のウィンドウを対象として報告される。KeyPress イベントと KeyRelease とは、クライアントがどのイベントを選択しているかにかかわらず、常に報告される。

keyboard-mode が Asynchronous である場合、キーボード・イベントの処理は通常通り続行される。このリクエストを発行したクライアントによってキーボードが現在凍結されている場合、キーボード・イベントの処理は再開される。keyboard-mode が Synchronous である場合、(プロトコル経由で見た)キーボードの状態は凍結されているように見えるものとなる。サーバは、占有しているクライアントが AllowEvents リクエストを発行して凍結を解除するまで、あるいはキーボードの占有が解除されるまで、それ以上のキーボード・イベントを生成しなくなる。キーボードに起きた実際の変更は、同キーボードが凍結されている間も失われておらず、後々処理するためにキューに入れられているだけである。

pointer-mode が Asynchronous である場合、ポインタ・イベントの処理は、占有の能動化(activation)による影響は受けない。pointer-mode が Synchronous である場合、(プロトコル経由で見た)ポインタの状態は凍結されているように見えるものとなる。サーバは、占有しているクライアントが AllowEvents リクエストを発行して凍結を解除するまで、あるいはキーボードの占有が解除されるまで、それ以上のポインタ・イベントを生成しなくなる。ポインタに起きた実際の変更は、同ポインタが凍結されている間も失われておらず、後々処理するためにキューに入れられているだけである。

このリクエストでは、FocusIn イベントと FocusOut イベントが発生する。

他のクライアントがキーボードを能動的に占有していた場合、このリクエストは蹉跌し、status として AlreadyGrabbed が返る。他のクライアントの能動的占有によってキーボードが凍結されていた場合、このリクエストは蹉跌し、status として Frozen が返る。grab-window のウィンドウが表示可能でなかった場合、このリクエストは蹉跌し、status として NotViewable が返る。time で指定された時刻が最終キーボード占有時刻(last-keyboard-grab time)の前であるか、または現在のサーバ時刻の後である場合、このリクエストは蹉跌し、status として InvalidTime が返る。この場合を除き、最終キーボード占有時刻は time で指定された時刻に設定されるが、time の値に CurrentTime を指定した場合、この値は現在のサーバ時刻で置き換えられる。

## UngrabKeyboard

time: TIMESTAMP or CurrentTime

このリクエストを発行したクライアントが(GrabKeyboard もしくは GrabKey により)キーボードを能動的に占有している場合、このリクエストは同キーボードを解放し、キューに入っているイベントがあればそれも解放する。time で指定された時刻が最終キーボード占有時刻より早い場合、あるいは現在のサーバ時刻より遅い場合、このリクエストは何も行わない。

このリクエストでは、FocusIn イベントと FocusOut イベントが発生する。

能動的キーボード占有のイベント発生ウィンドウが表示可能状態でなくなった場合、UngrabKeyboard リクエストが自動的に実行される。

## GrabKey

key: KEYCODE or AnyKey
modifiers: SETofKEYMASK or AnyModifier
grab-window: WINDOW
owner-events: BOOL
pointer-mode, keyboard-mode: { Synchronous, Asynchronous}
Errors: Access, Value, Window

このリクエストによって、キーボードの受動的占有を確立することができる。将来、下記の全ての条件が満たされたとき、キーボードは GrabKeyboard で述べた形で能動的に占有され、最終キーボード占有時刻には key で指定されたキーが押された時刻(KeyPress イベントの中に入っている)が設定され、KeyPress が報告される。

- キーボードが占有されておらず、且つ modifiers で指定された修飾キーが論理的に押されている状況で key で指定されたキー(これ自体が修飾キーであってもよい)が論理的に押され、且つ他の修飾キーは論理的に押されていない。

- grab-window で指定されたウィンドウがフォーカス・ウィンドウの祖先であるか、grab-window のウィンドウ自身がフォーカスウィンドウである。あるいは、grab-window のウィンドウがフォーカス・ウィンドウの子孫であり且つ grab-window のウィンドウがポインタを含んでいる。

- grab-window のウィンドウの祖先のいづれにおいても、指定されたものと同一のキーの組み合わせに対する受動的占有が存在しない。

残りの引数の解釈は、GrabKeyboard と同じである。能動的な占有は、キーボードの key で指定されたキーが論理的に放されている(押されていない)状態であるとき、各修飾キーの論理的な状態とは無関係に、自動的に終了する。デバイスの論理的な状態(プロトコル経由で見た状態)は、デバイスのイベントの処理が凍結されている場合、デバイスの物理的な状態より遅れている可能性がある。

このリクエストは、同一のウィンドウ上の同一のキーの組み合わせに対する同一クライアントによるそれまでの受動的占有すべてを置き換える。modifiers に AnyModifier を指定すると、修飾キーのあらゆる組み合わせ(修飾キー無しも組み合わせに含む)に対してこのリクエストを発行するのと同じことになる。modifiers で指定された修飾キー全てに現時点でキーコードが割り当てられている必要はない。key に AnyKey を指定すると、あらゆるキーコードに対してこのリクエストを発行するのと同じことになる。この場合を除き、key の値は、接続設定時に受け取った min-keycode と max-keycode で規定される範囲に収まっていなければならない(さもなくば Value エラーを生ずる)。

別のクライアントが同一のウィンドウ上の同一のキーの組み合わせに対して既に GrabKey リクエストを発行していた場合、Access エラーが発生する。AnyModifier や AnyKey を使用する場合、組み合わせの衝突する占有が存在すれば、リクエストは完全な失敗に終わり(占有は一切確立されない)、Access エラーが発生する。

## UngrabKey

key: KEYCODE or AnyKey
modifiers: SETofKEYMASK or AnyModifier
grab-window: WINDOW
Errors: Value, Window

このリクエストは、指定されたウィンドウにおける指定されたキーの組み合わせがこのリクエストを発行したクライアントによって占有されているものである場合に、その組み合わせを解放するものである。引数 modifiers に AnyModifier を指定すると、修飾キーのあらゆる組み合わせ(修飾キー無しの組み合わせも含む)に対してこのリクエストを発行するのと同じことになる。key に AnyKey を指定すると、あらゆるキーコードに対してこのリクエストを発行するのと同じことになる。このリクエストは、能動的占有には影響を与えない。

## AllowEvents

mode: { AsyncPointer, SyncPointer, ReplayPointer, AsyncKeyboard,
SyncKeyboard, ReplayKeyboard, AsyncBoth, SyncBoth}
time: TIMESTAMP or CurrentTime
Errors: Value

このリクエストは、このリクエストを発行するクライアントがデバイスを凍結していた場合に、キューに入れられていたイベントを解放するものである。time で指定された時刻が同クライアントによる直近の能動的占有の最終占有時刻より早い場合、あるいは time の時刻が現在のサーバ時刻より遅い場合、このリクエストは何も行わない。

AsyncPointer を指定すると、ポインタがこのリクエストを発行するクライアントによって凍結されている場合、ポインタ・イベントの処理は再開され平常通りに続行される。同クライアントが２つの異なる占有を行ってポインタを２回凍結している場合、AsyncPointer はその両方を解凍する。ポインタの凍結がリクエスト発行クライアントによるものでない場合、AsyncPointer モードでは何も行われないが、ポインタの占有までリクエスト発行クライアントによるものでなければいけないわけではない。

SyncPointer を指定すると、ポインタがこのリクエストを発行したクライアントによって凍結され能動的に占有されている場合、次の ButtonPress イベントあるいは次の ButtonRelease イベントが同クライアントへ報告されるまでの間、ポインタ・イベントの処理は再開され平常通りに続行される。この場合、それらのイベントが届いた時にポインタは再び凍結されているように見える状態となる。但し、報告されたイベントがポインタの占有を解除するものである場合、ポインタは凍結されない。ポインタの凍結がリクエスト発行クライントによるものでない場合、あるいはポインタを占有しているのがリクエスト発行クライントでない場合、SyncPointer モードでは何も行われない。

ReplayPointer を指定した場合、ポインタがこのリクエストを発行したクライアントによって能動的に占有されていて且つポインタが同クライアントへ送られたイベントの結果として凍結されていれば(GrabButton による受動的占有が(条件成就により)能動化した結果、あるいは先に実行されていた SyncPointer モードの AllowEvents リクエストの結果による場合であって、GrabPointer によるものは含まない)、ポインタの占有は解除され、凍結を齎した先のイベントはそっくり再処理される。この時、解除された占有の grab-window のウィンドウの受動的な占有や、同ウィンドウの上位の(ルート方向の)ウィンドウの受動的占有は無視される。リクエスト発行クライアントがポインタを占有してない場合、あるいはポインタの凍結がイベントの結果として生じたものでない場合、このリクエストは何も行わない。

AsyncKeyboard を指定すると、キーボードがこのリクエストを発行したクライアントによって凍結されている場合、キーボード・イベントの処理は再開され平常通りに続行される。同クライアントが異なる２つの占有を行って同キーボードを２回凍結している場合、AsyncKeyboard はその両方を解凍する。キーボードの凍結がリクエスト発行クライアントによるものでない場合、AsyncKeyboard では何も行われないが、キーボードの占有まで同クライアントによるものでなければいけないわけではない。

SyncKeyboard を指定すると、キーボードがこのリクエストを発行したクライアントによって凍結され能動的に占有されている場合、次の KeyPress イベントあるいは次の KeyRelease イベントが同クライアントへ報告されるまでの間、キーボード・イベントの処理は再開され平常通りに続行される。この場合、それらのイベントが届いた時にキーボードは再び凍結されているように見える状態となる。但し、報告されたイベントがキーボードの占有を解除するものである場合、キーボードは凍結されない。キーボードの凍結がリクエスト発行クライアントによるものでない場合、あるいはキーボードを占有しているのが同クライアントでない場合、SyncKeyboard では何も行われない。

ReplayKeyboard を指定した場合、キーボードがこのリクエストを発行したクライアントによって能動的に占有されていて且つキーボードが同クライアントへ送られたイベントの結果として凍結されていれば(GrabKey による受動的占有が(条件成就により)能動化された結果、あるいは先に実行されていた SyncKeyboard モードの AllowEvents リクエストの結果による場合であって、GrabKeyboard によるものは含まない)、キーボードの占有は解除され、凍結を齎した先のイベントはそっくり再処理される。この時、解除された占有の grab-window のウィンドウの受動的な占有や、同ウィンドウの上位の(ルート方向の)ウィンドウの受動的占有は無視される。リクエスト発行クライアントがキーボードを占有していない場合、あるいはキーボードの凍結がイベントの結果として生じたものでない場合、このリクエストは何も行わない。

SyncBoth を指定すると、ポインタとキーボードの両方がこのリクエストを発行したクライアントによって凍結されている場合、占有しているデバイスに関する新たなイベント ButtonPress、 ButtonRelease、KeyPress、あるいは KeyRelease (ポインタに対してはボタン・イベント、キーボードに対してはキー・イベント)が同クライアントへ報告されるまでの間、(両方のデバイスの)イベントの処理が再開され平常通りに続行されるようになる。この場合、それらのイベントが届いた時にデバイスは再び凍結されているように見える状態となる。但し、報告されたイベントが占有を解除するものである場合、デバイスは凍結されない(けれども、もう一方のデバイスが依然として占有されている場合、こちらのデバイスに関する後続のイベントによって両方のデバイスが凍結される)。リクエスト発行クライアントがポインタとキーボードの両方を凍結しているのでない限り、SyncBoth では何も行われない。同クライアントが異なる２つの占有を行ってポインタもしくはキーボードを２回凍結している場合、SyncBoth は２回分の解凍を行う(一方、(上記のイベントの受信による) SyncBoth の後続の再凍結は各デバイスを１回凍結するだけである)。

AsyncBoth を指定すると、ポインタとキーボードがこのリクエストを発行したクライアントによって凍結されている場合、両方のデバイスのイベント処理が再開され平常通りに続行される。同クライアントが異なる２つの占有を行って１つのデバイスを２回凍結している場合、AsyncBoth は２回分の解凍を行う。リクエスト発行クライアントがポインタとキーボードの両方を凍結しているのでない限り、AsyncBoth では何も行われない。

AsyncPointer、SyncPointer、及び ReplayPointer は、キーボード・イベントの処理には作用しない。AsyncKeyboard、SyncKeyboard、及び ReplayKeyboard は、ポインタ・イベントの処理には作用しない。

ポインタの占有とキーボードの占有の両方が同時に能動的になることは可能である(同一のクライントによる場合もあるし、異なるクライアントによる場合もある)。この場合、どちらかの占有によって一方のデバイスが凍結されると、そのデバイスに関するイベントの処理は行われなくなる。両方の占有によって一方のデバイスだけが凍結されることがある。この場合、両方の占有に関して凍結を解除しなければ、イベントの処理は再開することができない。１つのデバイスが同一のクライアントによって２回凍結された場合、１回の AllowEvents でその両方を解凍する。

## GrabServer

このリクエストは、このリクエストを送ってきた接続以外の全ての接続において、リクエストの処理と接続の切断(close-down)とを実行不能にするものである。

## UngrabServer

このリクエストは、他の接続(GrabServer を送ってきたの接続以外の接続)におけるリクエストの処理と接続の切断(close-down)とを再開するものである。

## QueryPointer

window: WINDOW
▶
root: WINDOW
child: WINDOW or None
same-screen: BOOL
root-x, root-y, win-x, win-y: INT16
mask: SETofKEYBUTMASK
Errors: Window

ポインタが論理的に存在している(乗っている)ルート・ウィンドウと、そのルートの原点を基準としたポインタの座標を返す。same-screen が False である場合、ポインタは引数 window のウィンドウと同じスクリーンの上には存在せず、child は None であり、win-x と win-y の値は 0 である。same-screen が True である場合、win-x と win-y は window のウィンドウの原点を基準としたポインタの座標であり、child は同ウィンドウの子の中のポインタを含んでいるものである(そのような子が存在する場合のみ)。修飾キーとボタンの現在の論理的な状態も返る。(プロトコル経由で見た)デバイスの論理的な状態は、デバイスのイベントの処理が凍結されている場合、物理な状態より遅れている可能性がある。

## GetMotionEvents

start, stop: TIMESTAMP or CurrentTime
window: WINDOW
▶
events: LISTofTIMECOORD
where:
TIMECOORD: [x, y: INT16 time: TIMESTAMP]
Errors: Window

このリクエストは、移動履歴バッファ内にあるイベントの中、次の条件を満たすもの全てを返す。即ち、start で指定された時刻から stop で指定された時刻まで(境界を含む)のイベントであり、且つ window で指定されたウィンドウ(の現在位置のもの)の内部(ボーダを含む)に座標があるイベント全てを返す。x、y 座標は、window のウィンドウの原点を基準として報告される。

start の時刻が stop の時刻より遅い場合、あるいは start の時刻が未来である場合、イベントは一切返らない。stop の時刻が未来である場合、stop に CurrentTime を指定したのと同じことになる。

## TranslateCoordinates

src-window, dst-window: WINDOW
src-x, src-y: INT16
▶
same-screen: BOOL
child: WINDOW or None
dst-x, dst-y: INT16
Errors: Window

src-x 及び src-y は、src-window の原点を基準とした座標として解釈され、dst-window の原点を基準とした座標である dst-x 及び dst-y となって返ってくる。same-screen が False である場合、src-window のウィンドウと dst-window のウィンドウは異なるスクリーンの上にあり、dst-x と dst-y の値は 0 である。指定された座標が dst-window のマップされている子の中に含まれていれば、その子が child に返る。

## WarpPointer

src-window: WINDOW or None
dst-window: WINDOW or None
src-x, src-y: INT16
src-width, src-height: CARD16
dst-x, dst-y: INT16
Errors: Window

dst-window が None である場合、このリクエストはポインタを、ポインタの現在位置を基準としてオフセット [dst-x, dst-y] の分だけ移動させる。dst-window がウィンドウである場合、このリクエストはポインタを、dst-window のウィンドウの原点から見て [dst-x, dst-y] の位置に移動させる。但し、src-window が None でない場合は、ポインタが src-window のウィンドウに含まれており且つポインタが src-window の(src-x〜src-heightで)指定された矩形の中にも含まれているときに限って、移動が行われる。

src-x と src-y から成る座標は、src-window の原点を基準としたものである。src-height の値が 0 である場合、src-height は src-window の(現在の)高さから src-y を引いた値で置き換えられる。src-width の値が 0 である場合、src-width は src-window の(現在の)幅から src-x を引いた値で置き換えられる。

このリクエストを使って、能動的ポインタ占有における confine-to ウィンドウの外側にポインタを移動させることはできない。そのように試みても、ポインタは confine-to ウィンドウの最も近い縁(移動させようとした場所に最も近い縁)までしか移動しない。

このリクエストは、まるでユーザが瞬時にポインタを移動させたかのようにイベントを発生させる。

## SetInputFocus

focus: WINDOW or PointerRoot or None
revert-to: { Parent, PointerRoot, None}
time: TIMESTAMP or CurrentTime
Errors: Match, Value, Window

このリクエストは、入力フォーカスを変更し、最終フォーカス変更時刻(last-focus-change time)を更新するものである。time で指定された時刻が現在の最終フォーカス変更時刻よりも早い場合、あるいは現在のサーバ時刻よりも遅い場合、このリクエストでは何も行われない。そうでない場合、最終フォーカス変更時刻に time の時刻が設定される。この時、time に CurrentTime が指定されていれば、この値は現在のサーバ時刻で置き換えられる。

focus に None を指定すると、新たなフォーカス・ウィンドウが設定されるまでの間、キーボード・イベントは全て棄てられる。この場合、引数 revert-to は無視される。

focus にウィンドウを指定すると、同ウィンドウがキーボードのフォーカス・ウィンドウになる。生成されたキーボード・イベントが通常であればこのウィンドウあるいはその子孫のいづれかに報告される場合、同イベントは通常通り(それらのウィンドウに)報告される。そうでない場合、イベントはフォーカス・ウィンドウを対象として報告される。

focus の値として PointerRoot を指定すると、フォーカス・ウィンドウは、各キーボード・イベントが発生した時にポインタが存在するスクリーンのルート・ウィンドウに動的に変更される。この場合、引数 revert-to は無視される。

このリクエストでは、FocusIn イベントと FocusOut イベントが発生する。

focus で指定するウィンドウは、リクエスト発行の時点で表示可能状態(viewable)でなければならない(さもなくば Match エラーを生ずる)。フォーカス・ウィンドウが後に表示可能でなくなった場合、新たなフォーカス・ウィンドウは引数 revert-to によって決まる。revert-to が Parent である場合、focus は親(もしくは最も近い表示可能な祖先)に転換され、新たな revert-to の値は None となる。revert-to が PointerRoot もしくは None である場合、focus はその値に転換される。focus が転換されると、FocusIn イベント及び FocusOut イベントが発生するが、最終フォーカス変更時刻は変わらない。

## GetInputFocus

▶
focus: WINDOW or PointerRoot or None
revert-to: { Parent, PointerRoot, None}

このリクエストは、現在のフォーカス(focus)の状態を返すものである。

## QueryKeymap

▶
keys: LISTofCARD8

このリクエストは、キーボードの論理的な状態を表すビット・ベクトル(bit vector)を返すものである。1 に設定されているビットは、対応するキーが現在押されていることを示す。ベクトルの長さは３２バイトである。N 番目(0 から数える)のバイトには 8N から 8N + 7 のキーに対応するビットが入り、このバイトの最下位ビットが 8N のキーに対応する。(プロトコル経由で見た)デバイスの論理的な状態は、デバイスのイベントの処理が凍結されている場合、物理的な状態よりも遅れている可能性がある。

## OpenFont

fid: FONT
name: STRING8
Errors: Alloc, IDChoice, Name

このリクエストは、必要であれば指定されたフォントを読み込み、同フォントに識別子 fid を与えるものである。フォント名 name には ISO Latin-1 符号化方式を用い、大文字と小文字は区別しない。フォント名 name の中で「“?”」及び「“*” 」の文字を使用した場合、パターン・マッチ(パターン照合)が行われ、マッチしたフォントが使用される。このパターン(型)においては、「“?”」という文字(８進数値は 77)は何らかの文字１つとマッチし、「“*” 」という文字(８進数値は 52)は任意の数の文字とマッチする。フォント名を表すための書式(特別な構造を持つ)は、X.Org の規格 X Logical Font Description Conventions で規定してある。

フォントは、特定のスクリーンと結び付いたものではなく、どのグラフィクス・コンテクストの構成要素としても使用(格納)することができる。

## CloseFont

font: FONT
Errors: Font

このリクエストは、リソース ID とフォントとの繋がりを削除するものである。フォント自体は、同フォントを参照する他のリソースが存在しなくなったときに解放される。

## QueryFont

font: FONTABLE
▶
font-info: FONTINFO
char-infos: LISTofCHARINFO
where: |  |
FONTINFO: | [draw-direction: { LeftToRight, RightToLeft }
min-char-or-byte2, max-char-or-byte2: CARD16
min-byte1, max-byte1: CARD8
all-chars-exist: BOOL
default-char: CARD16
min-bounds: CHARINFO
max-bounds: CHARINFO
font-ascent: INT16
font-descent: INT16
properties: LISTofFONTPROP]
FONTPROP: | [name: ATOM
value: <32-bit-value>]
CHARINFO: | [left-side-bearing: INT16
right-side-bearing: INT16
character-width: INT16
ascent: INT16
descent: INT16
attributes: CARD16]
Errors: Font

このリクエストは、font で指定したフォントの論理的な情報を返す。font に GCONTEXT 型のオブジェクトを指定した場合、その中に現在含まれているフォントを使用する。(訳註：FONTABLE は FONT あるいは GCONTEXT である。)

draw-direction は単なるヒントであり、char-infos の大多数が正の character-width を持っているのか(LeftToRight の場合)、それとも負の character-width を持っているのか(RightToLeft の場合)を示す。コア・プロトコル(本プロトコル)では、縦書きテキストの機能は定義していない。

(訳註：２バイトのフォントは、定義された文字の２次元の表(matrix)と見ることができる。byte1 (第１バイト)は行を定めるものであり、min_byte1 と max_byte1 で行の範囲を定める。byte2 (第２バイト)は列を定めるものであり、min_char_or_byte2 と max_char_or_byte2 で列の範囲を定める。１バイトの文字は１行のみから成り、byte2 (第２バイト)で文字を定める。そして、min_char_or_byte2 と max_char_or_byte2 が文字の範囲を定める。１バイトは１行なので、min_byte1 と max_byte1 の両方の値が 0 (１行目)となる。訳註ここまで。)

min-byte1 と max-byte1 の両方の値が 0 である場合、min-char-or-byte2 は char-infos の先頭の要素に対応する線型文字索引(linear character index)であり、max-char-or-byte2 は最後尾の要素の線型文字索引である。min-byte1 と max-byte1 のどちらかの値が 0 でない場合、 min-char-or-byte2 と max-char-or-byte2 の値はともに 256 未満であり、char-infos の N 番目(0 番から始まる)の要素に対応する２バイトの文字索引値は次のように計算される。

    	byte1 = N/D + min-byte1   /* 訳註：行のオフセット */
    	byte2 = N\\D + min-char-or-byte2   /* 訳註：列のオフセット */

ここで、

    	D = max-char-or-byte2 - min-char-or-byte2 + 1   /* 訳註：１行の文字数 */
    	/ = 整数除算 (integer division)
    	\\ = 整数 mod (integer modulus)

char-infos のリストの長さ(要素数)が 0 である場合、min-bounds と max-bounds は同じになり(訳註：空でない同一の CHARINFO が設定される)、char-infos はこの char-info(文字情報) で満たされたリスト(配列)となり、このリストの長さは次の通りである。

    	L = D * (max-byte1 - min-byte1 + 1)

この場合、指定された行の範囲(linear range)あるいは指定された行列の範囲にある全てのグリフ(字形)は、min-bounds (及び max-bounds)に設定されたものと同一の情報を持つ。all-chars-exist が True である場合、char-infos の全ての文字は 0 ではない境界枠(boundng box：定義は後述)を持つ。

default-char には、未定義の文字や存在しない文字が使用されたときに代わりに使われる文字が入る。default-char は CARD16 であって、CHAR2B でないことに注意。２バイトの行列形式を用いるフォントにおいては、default-char の最上位バイトが第１バイト(byte1)、最下位バイトが第２バイト(byte2)となる。default-char 自体が未定義の文字や存在しない文字を指していた場合、未定義文字や不存在文字の表示(printing)は行われない。

min-bounds と max-bounds には、CHARINFO の中の各構成要素ごとの最小値と最大値が入っている。この最小値と最大値はリスト char-infos の全ての要素(存在しない文字は除く)を通しての最大値・最小値である。フォントの境界枠(bounding box)(即ち、全ての文字を同一の原点 [x, y] に重ねることによって得られる形状を囲む最小矩形)の左上の座標は次の通りである。

    	[x + min-bounds.left-side-bearing, y - max-bounds.ascent]

フォントの境界枠の幅は次の通り。

    	max-bounds.right-side-bearing - min-bounds.left-side-bearing

フォントの境界枠の高さは次の通り。

    	max-bounds.ascent + max-bounds.descent

font-ascent は、フォントのベースライン(baseline)より上の部分の論理的な幅(extent：縦の幅)であり、行間隔を決めるのに使用される。この幅を超えて広がる文字もある。font-descent は、フォントのベースラインに重なる部分とベースラインより下の部分(を合わせたもの)の論理的な幅であり、これも行間隔を決めるのに使用される。この幅を超えて広がる文字もある。ベースラインの Y 座標が y である場合、フォントの論理的な幅は、Y 座標の値 (y - font-ascent) から (y + font-descent - 1) までである。

properties について、フォントはプロパティを持つとは限らない。プロパティの値の解釈(例えば INT32、CARD32)は、プロパティに関する予備知識(a priori knowledge)をもとに行わなければならない。基本的なフォント・プロパティは、X.Org の規格 X Logical Font Description Conventions で規定されている。

文字の原点が [x, y] である場合、文字の境界枠(即ち、その文字の形状を囲む最小矩形であり、CHARINFO の構成要素群によって定まるもの)となる矩形の左上隅の座標は、次の通り。

    	[x + left-side-bearing, y - ascent]

文字の境界枠の幅は次の通り。

    	right-side-bearing - left-side-bearing

文字の境界枠の高さは次の通り。

    	ascent + descent

そして次の文字の原点は次のように定義される。

    	[x + character-width, y]

ベースラインは、論理的には、下にはみ出さない文字(descent の値が 0 である場合であり、この場合には Y 座標が y より小さいピクセルしか描画されない)のすぐ下にあるものと見做される。原点は、論理的には、調整幅のない文字(nonkerned character：字間調整されてない文字)(left-side-bearing の値が 0 である場合であり、この場合 X 座標が x より小さいピクセルは一切描画されない)の左端と一致するものと見做される。

CHARINFO の寸法値は、負の値をとることができる。

存在しない文字においては、CHARINFO の全ての構成要素の値が 0 となる。

各文字の attributes フィールドの解釈は、サーバ依存である。

## QueryTextExtents

font: FONTABLE
string: STRING16
▶
draw-direction: { LeftToRight, RightToLeft}
font-ascent: INT16
font-descent: INT16
overall-ascent: INT16
overall-descent: INT16
overall-width: INT32
overall-left: INT32
overall-right: INT32
Errors: Font

このリクエストは、font で指定されたフォントにおける string で指定された文字列の論理的な寸法を返すものである。font に GCONTEXT 型オブジェクトを指定した場合、そのグラフィクス・コンテクストが現在所持しているフォントを使用する。draw-direction、font-ascent、及び font-descent は、 QueryFont で述べたものと同じである。overall-ascent は、string の文字列の全ての文字の中における最大の ascent (ベースラインのすぐ上から文字上端までの)寸法である。overall-descent は、string の文字列の全ての文字の中における最大の descent (ベースラインから文字下端までの)寸法である。overall-width は、string の文字列中の全ての文字の character-width (文字幅)寸法の合計である。string の文字列中の各文字について、その文字より前の全ての文字の character-width 寸法の合計を W とし、その文字の left-side-bearing (左側の)寸法を W に足した値を L とし、その文字の right-side-bearing (右側の)寸法に W を足した値を R とすると、overall-left は string の文字列の全ての文字の中における最小の L であり、overall-right は最大の R である。

２バイトの行列の索引ではなく線型索引(１行の索引)で定義されているフォントを指定した場合、サーバは、最上位バイトから先に送られてきた１６ビットの数値として各 CHAR2B を解釈する(つまり、CHAR2B の第１バイト(byte1)を最上位バイトとして扱う)。

全ての寸法の値が 0 である文字は無視される。font で指定されたフォントにおいて default-char が定義されてない場合、文字列中の未定義の文字は無視される。

## ListFonts

pattern: STRING8
max-names: CARD16
▶
names: LISTofSTRING8

このリクエストは、利用可能なフォント(フォントの検索経路に左右される；SetFontPath リクエストの項を参照)の中、フォント名が pattern で指定されたパターンにマッチするもののリスト(配列)を返す。最大で max-names 個の名前が返る。pattern のパターンには ISO Latin-1 符号化方式を使用し、大文字・小文字は区別されない。パターン中の文字「?」(８進数値 77)は任意の１文字とマッチし、パターン中の文字「*」(８進数値 52)は任意の数の文字とマッチする。names に返ってきたフォント名は小文字である。

## ListFontsWithInfo

pattern: STRING8
max-names: CARD16
▶
name: STRING8
info FONTINFO
replies-hint: CARD32
where:
FONTINFO: <same type definition as in QueryFont>

このリクエストは、ListFonts とよく似ているが、各フォントについての情報も返すところが異なっている。各フォントについて返される情報は QueryFont が返すものと同じであるが、文字ごとの寸法(CHARINFO)は返されない。このリクエストでは、複数個のリプライが発生する可能性があることに注意。各リプライの replies-hint は、あと何個のフォントが返されるのかを示すものである。replies-hint の数値は単なるヒントに過ぎず、実際に返ってくるフォントの数より大きかったり小さかったりする。replies-hint の数値が 0 であっても、これ以上フォントが返ってこないことは保証されない。全てのフォントが返った後に送られてくる、長さが 0 の name を持つリプライは、一連のリプライの終わりを示すものである。

## SetFontPath

path: LISTofSTRING8
Errors: Value

このリクエストは、フォントを検索するための検索経路を設定するものである。検索経路は、各サーバに１つしか存在せず、クライアント毎に１つづつ存在するわけではない。path で指定された(複数の)文字列の解釈は、オペレーティング・システムに依存している。けれども、この(複数の)文字列には、リスト内の順序によって、検索するディレクトリ(の順序)を指定する機能がある。

path に空のリストを指定すると、検索経路がサーバに設定されたデフォルトの経路に戻る。

このリクエストの副作用として、サーバは、現在明示的にリソース ID が割り当てられていないフォントに関する全てのキャッシュ情報を必ずフラッシュ(flush)する。

このリクエストで生ずるエラーの意味は、システム固有である。

## GetFontPath

▶
path: LISTofSTRING8

このリクエストは、現在のフォント検索経路を返すものである。

## CreatePixmap

pid: PIXMAP
drawable: DRAWABLE
depth: CARD8
width, height: CARD16
Errors: Alloc, Drawable, IDChoice, Value

このリクエストは、ピクスマップを１つ作成し、それに対して識別子 pid を割り当てるものである。width 及び height は 0 であってはならない(さもなくば Value エラーを生ずる)。 depth は、drawable で指定されたドローアブルのルートが対応している深さ(のいづれか１つ)でなければならない(さもなくば Value エラーを生ずる)。作成されたピクスマップの初期内容は、定められていない。

InputOnly ウィンドウをこのリクエストの drawable に渡すのは合法である。

## FreePixmap

pixmap: PIXMAP
Errors: Pixmap

このリクエストは、リソース ID とピクスマップの繋がりを削除するものである。このピクスマップの記憶領域は、これを参照しているリソースが他に存在しなければ、解放される。

## CreateGC

cid: GCONTEXT
drawable: DRAWABLE
value-mask: BITMASK
value-list: LISTofVALUE
Errors: Alloc, Drawable, Font, IDChoice, Match, Pixmap, Value

このリクエストは、グラフィクス・コンテクストを作成し、これに識別子 cid を割り当てるものである。この GCONTEXT オブジェクトは、drawable で指定されたドローアブルと同じルートと同じ深さを持っているドローアブルであれば、どのような destination ドローアブル(大抵は出力先)とでも併せて使用することができる。この条件を満たさないドローアブルと一緒に使用すると、Match エラーになる。

value-mask と value-list によって、どの構成要素を明示的に初期設定するのかを指定する。 グラフィクス・コンテクストの構成要素は以下の通り。

構成要素 | 型
--- | ---
function | { Clear, And, AndReverse, Copy, AndInverted, NoOp, Xor, Or, Nor, Equiv, Invert, OrReverse, CopyInverted, OrInverted, Nand, Set }
plane-mask | CARD32
foreground | CARD32
background | CARD32
line-width | CARD16
line-style | { Solid, OnOffDash, DoubleDash }
cap-style | { NotLast, Butt, Round, Projecting }
join-style | { Miter, Round, Bevel }
fill-style | { Solid, Tiled, OpaqueStippled, Stippled }
fill-rule | { EvenOdd, Winding }
arc-mode | { Chord, PieSlice }
tile | PIXMAP
stipple | PIXMAP
tile-stipple-x-origin | INT16
tile-stipple-y-origin | INT16
font | FONT
subwindow-mode | { ClipByChildren, IncludeInferiors }
graphics-exposures | BOOL
clip-x-origin | INT16
clip-y-origin | INT16
clip-mask | PIXMAP もしくは None
dash-offset | CARD16
dashes | CARD8

グラフィクス操作の結果は、与えられた source ピクセルと destination ピクセルを用いて、両ピクセルの対応するビットに対してビット演算を行って計算される。即ち、各ビット・プレーンに対して論理演算が行われる。plane-mask のプレーン・マスクは、演算の対象を各プレーンの一部に限定するので、演算の結果は次のようになる。

    	((src FUNC dst) AND plane-mask) OR (dst AND (NOT plane-mask))

foreground、background、及び plane-mask の値の範囲について、検査は行われない。それらの値は、単純に適当なビット数に切り詰められる。

function の意味は次の通り。

function | 演算
--- | ---
Clear | 0
And | src AND dst
AndReverse | src AND (NOT dst)
Copy | src
AndInverted | (NOT src) AND dst
NoOp | dst
Xor | src XOR dst
Or | src OR dst
Nor | (NOT src) AND (NOT dst)
Equiv | (NOT src) XOR dst
Invert | NOT dst
OrReverse | src OR (NOT dst)
CopyInverted | NOT src
OrInverted | (NOT src) OR dst
Nand | (NOT src) OR (NOT dst)
Set | 1

line-width は、ピクセル単位で表される。この値が 1 以上であれば太線(wide line)、特別な値 0 であれば細線(thin line)である。

太線は、その中央がグラフィクス・リクエストによって描かれる軌道(path)の上に来るように描画される。join-style や cap-style による特別な指定がない限り、[x1, y1] と [x2, y2] を端点とする幅が w の太線の境界枠(bounding box)は、次の実座標(real coordinates：訳註：数学の実数空間とは関係なく、Y 座標は上に向かうにつれて増え X 座標は右へ向かうにつれて増える座標系のことを表している？これは次の式の解釈としても合っているように思われる。)を頂点とする矩形となる。

    	[x1-(w*sn/2), y1+(w*cs/2)], [x1+(w*sn/2), y1-(w*cs/2)],
    	[x2-(w*sn/2), y2+(w*cs/2)], [x2+(w*sn/2), y2-(w*cs/2)]

sn は直線が(水平線との間に)なす角度(θ)の正弦(sinθ)であり、cs は直線が(水平線との間に)なす角度(θ)の余弦(cosθ)である。あるピクセルの中心が完全に境界枠(境界枠は無限に細い縁を持っているものと見做される)の中に入っている場合、そのピクセルは直線の一部である(それゆえに描画される)。あるピクセルの中心がちょうど境界枠の上に載っている場合、直線の内側が同ピクセルのすぐ右側(x 増加方向)にあるときに限り、そのピクセルは直線の一部となる。あるピクセルの中心が直線の水平の縁の上に載っているという特殊な場合は、そのピクセルが直線の一部となるには、直線の内側あるいは境界が同ピクセルのすぐ下(y 増加方向)にあることが必要条件であり、その上で、直線の内部あるいは境界が同ピクセルのすぐ右(x 増加方向)にも存在しなければならない。以上の説明は、太線を描画するピクセルを数学的なモデルを使って解説したものであるが、このモデルを実装するために必ず三角法を使わなければいけないわけではない。幅が１ピクセルより大きい直線の端点の角を計算するには、実数(real)あるいは固定小数点の演算を用いることが推奨される。

細線(line-width 即ち直線の幅が 0)は、名目上は、規定が無く且つデバイス依存であるアルゴリズムを使って描画される、幅が 1 ピクセルの直線である。このアルゴリズムには、２つの制約しか課されない。１つ目の制約は、ある直線を [x1,y1] から [x2,y2] までクリップせずに描画し、別の直線を [x1+dx,y1+dy] から [x2+dx,y2+dy] までクリップせずに描画した場合、ある点 [x,y] は、点 [x+dx,y+dy] が第２の直線(の描画結果)に接しているときに限り、第１の直線(の描画結果)に接していることになる、というものである。２つ目の制約は、直線を構成する「有効な点の集合」は、クリップによる影響を受けてはならない、というものである。したがって、ある点がクリップされた直線に接することになるのは、その点がクリップ領域の内側に存在し、且つその点がクリップせずに描画された直線にも接している場合に限られる。

cap-style と join-style の影響を無視すると、[x1,y1] から [x2,y2] へ向かって描画された太線は、常に [x2,y2] から [x1,y1] へ向かって描画された太線と同じピクセルを持つ。実装者は、この性質を細線にも実装するのが望ましいのであるが、必ずそうしなければならないわけではない。line-width の値が 0 の場合と line-width が 1 の場合とでは、描かれるピクセルが異なる可能性がある。一般的に、細線の描画は幅が 1 の太線の描画より高速であるが、両者の描画アルゴリズムが異なるため、細線と太線とを混ぜて使用すると美しく見えないことがある。全てのディスプレイに対して正確かつ均一な描画を行いたい場合、クライアントは常に line-width の値として 0 ではなく 1 を使用するべきである。

line-style は、直線のどの部分が描画されるのかを定めるものである。

Solid | 直線の全ての軌道(path)が描画される。
DoubleDash | 直線の全ての軌道(path)が描かれるが、破線の偶数番目(訳註：0 から番号を付けた場合、奇数番目も同じ)のダッシュと奇数番目のダッシュは塗られ方が異なる(fill-style を参照)。偶数ダッシュと奇数ダッシュの境界には cap-style の Butt が使用される。
OnOffDash | 破線中の偶数番目のダッシュだけが描画される。各ダッシュの端(破線の内側にあるもの)には cap-style で指定された描画様式が適用される(但し、NotLast は Butt として扱われる)。

cap-style は、軌道(path)の端点がどのように描画されるのかを定めるものである。

NotLast | 基本的には Butt と同じであるが、line-width の値が 0 のときは最終端点(線端の最後のピクセル)は描画されない。
Butt | 軌道(path)の端点は四角く(直線の傾きに対して直角の切り口)、線端の先まで突出しない。
Round | 軌道(path)の端点は、直径が line-width と等しく中心が端点にある円弧となる。但し、line-width の値が 0 の場合は Butt と同じになる。
Projecting | 終端は四角いが、line-width の半分と等しい距離だけ軌道(path)が端点の先まで伸びる形になる。但し、line-width の値が 0 のときは Butt と同じになる。

join-style は、太線の作る角がどのように描画されるのかを定めるものである。

Miter | ２本の直線の外側の辺を伸ばし、ぶつかったところに角を作る(そして、その角の内側まで塗りつぶす)。但し、ここで作られた角の角度が１１度より小さい場合、代わりの join-style として Bevel を使用する。
Round | 直径が line-width と等しく、中心が２直線の接合点(joinpoint)にある円弧となる。
Bevel | ２直線の端点の形は Butt 様式のものとなり、この２つの端点が作る三角形の凹みは塗りつぶされる。

１つの直線の両方の端点が一致する場合(x1=x2, y1=y2)、cap-style を両方の端点に適用するときは、その意味は line-width と cap-style の組み合わせで決まる。

NotLast | 細線(line-width が 0) | 結果はデバイスに依存するが、何も描画されないのが望ましい。
Butt | 細線 | 結果はデバイスに依存するが、１個のピクセルを描画するのが望ましい。
Round | 細線 | Butt/細線の組み合わせに同じである。
Projecting | 細線 | Butt/細線の組み合わせに同じである。
Butt | 太線(line-width が 1 以上) | 何も描画されない。
Round | 太線 | 閉じた軌道(x1=x2, y1=y2)は円になる。この円の中心は端点であり、直径は line-width に等しい。
Projecting | 太線 | 閉じた軌道(x1=x2, y1=y2)は方形になる。この方形は、辺が座標軸に平行で、中心は端点にあり、辺の長さが line-width に等しい。

１つの直線の両方の端点が一致する場合(x1=x2, y1=y2)、join-style を片方もしくは両方の端点に適用するときは、軌道の全体から直線部分が削除されたかのような結果(描画結果)となる。但し、軌道全体が単一の点(自分自身と結び付いている)から成る場合、もしくは単一の点へと軌道全体が縮小されている場合、両方の端点に cap-style を適用したのと同じ結果(描画結果)になる。

tile と stipple は、無限に広がる２次元のプレーンを表す。この２次元のプレーンでは、tile あるいは stipple (のパターン)が繰り返し複製され、面全体に敷き詰められている。グラフィクス操作で使用するドローアブルの上にこのプレーンを重ねる場合、tile あるいは stipple のインスタンスの左上隅は、ドローアブル内部の座標 (tile-stipple-x-origin, tile-stipple-y-origin) に位置する。tile、stipple、及びクリップの原点(tile-stipple-x-origin、tile-stipple-y-origin、clip-x-origin、clip-y-origin)の座標は、グラフィクス・リクエストで指定された destination のドローアブルの原点を基準として解釈される。

tile のピクスマップは、グラフィクス・コンテクストと同じルート、同じ深さでなければならない(さもなくば Match エラーを生ずる)。stipple のピクスマップは、深さが 1 でなければならず、グラフィクス・コンテクストと同じルートを持たなければならない(さもなくば Match エラーを生ずる)。fill-style が Stippled である場合(OpaqueStippled ではない)、stipple のスティプル・パターンは、１枚のプレーンにタイルされ、clip-mask と AND 演算される(論理積をとる)もう１つのクリップ・マスクとして機能する。どんなサイズのピクスマップでもタイルやスティプルに使用することができるけれども、サイズによって処理速度が異なることがある。

fill-style は、直線リクエスト、テキスト・リクエスト、及び塗りつぶしリクエストのソース(source)の内容を定めるものである。全てのテキスト・リクエストと塗りつぶしリクエスト(例えば、PolyText8、PolyText16、PolyFillRectangle、 FillPoly、PolyFillArc)の場合、及び line-style が Solid である直線リクエスト(例えば、PolyLine、PolySegment、PolyRectangle、PolyArc)の場合、及び line-style が OnOffDash もしくは DoubleDash である直線リクエストにおける偶数番目(訳註：0 から番号を付けた場合、奇数番目も同じ)のダッシュの場合、fill-style の各値の意味は次の通りになる。

Solid | foreground で指定された前景色を使用して塗りつぶす
Tiled | タイル(のピクスマップ)を使用して塗りつぶす
OpaqueStippled | 幅と高さが stipple (のピクスマップ)と同じタイルを使用して塗りつぶすのであるが、スティプルのビットが 0 のところは background で指定された背景色を使用し、スティプルのビットが 1 のところは foreground で指定された前景色を使用する。
Stippled | stipple のスティプルでマスクされ(て有効だと見做され)た部分を foreground で指定された前景色で塗りつぶす。

line-style が DoubleDash である直線リクエストにおける奇数番目のダッシュの場合、fill-style の各値の意味は次の通りになる。

Solid | background で指定した背景色を使用して塗りつぶす
Tiled | 偶数ダッシュの場合と同じ
OpaqueStippled | 偶数ダッシュの場合と同じ
Stippled | stipple のスティプルでマスクされ(て有効だと見做され)た部分を background で指定された背景色で塗りつぶす。

このリクエストで使用できる dashes の値は、SetDashes で設定できるパターンの中の一部を簡略な形式で表現したものである。dashes の値に数値 N を指定するのは、SetDashes において２つの要素から成るリスト [N, N] を指定するのと同じである。dashes の値は 0 であってはならない(さもなくば Value エラーを生ずる)。dash-offset と dashes の意味は SetDashes リクエストの項で説明してある。

clip-mask で指定したクリップ・マスクは、デスティネーション・ドローアブルに対する書き込みを限定するものである。同クリップ・マスクにおいてビットが 1 に設定されている箇所のピクセルだけが描画される。このクリップ・マスクの領域の範囲外にあるピクセルや、同クリップ・マスクにおいてビットが 0 に設定されている箇所のピクセルは描画されない。clip-mask のクリップ・マスクは、あらゆるグラフィクス・リクエストに影響を与えるが、ソースそのものをクリップするわけではない。clip-mask のクリップ・マスクの原点(の座標)は、グラフィクス・リクエストで指定されたデスティネーション・ドローアブルの原点を基準として解釈される。clip-mask にピクスマップを指定する場合、そのピクスマップは、深さが 1 でなければならず、作成するグラフィクス・コンテクストと同じルートを持たなければならない(さもなくば Match エラーを生ずる)。clip-mask が None である場合、クリップの原点とは関係なく、ピクセルは常に描画される。クリップ・マスク(GC の clip-mask)は、SetClipRectangles リクエストでも設定することができる。

subwindow-mode が ClipByChildren である場合、ソース・ウィンドウとデスティネーション・ウィンドウの両方が、表示可能状態でありクラスが InputOutput である子供全てによってさらにクリップされる(訳註：子供によって隠されている領域に描画しても何も起きない)。subwindow-mode が IncludeInferiors である場合、ソース・ウィンドウもデスティネーション・ウィンドウも子孫によってはクリップされない。この結果、下位ウィンドウの内容がソースに組み込まれ、デスティネーションの下位ウィンドウの境界を通して描画が行われる(訳註：子ウィンドウが不透明であっても、それを通り抜けて親ウィンドウの内容が現れる)。IncludeInferiors を使用する場合に、ソース・ウィンドウやデスティネーション・ウィンドウの深さが 1 であり、且つその子孫(マップされているもの)の深さがそれとは異なっていたとしても違法ではない。けれども、その結果(semantics)はコア・プロトコルでは定めていない。

fill-rule は、FillPoly リクエストで指定された軌道(paths)の内側にあるとされる(従って塗りつぶされる)ピクセルはどのようなピクセルなのかを定めるものである。EvenOdd は、ある点の原点とする無限に長い放射線が奇数回だけ軌道(path)を横切っている場合に、その点が内側(塗りつぶすべき領域)に含まれるとするものである(訳註：奇数回だけ(１重、３重、５重〜に)囲われている領域は塗りつぶし、偶数回(０重、２重、４重〜に)囲われている領域は塗りつぶさない)。Winding は、ある点を原点とする無限に長い放射線が「時計回り方向の軌道線分」と交差した回数と、「反時計回り方向の軌道線分」と交差した回数とが等しくない場合に、その点が内側に含まれているとするものである(訳註：この方式では、何回囲われたかにかかわらず、囲われた領域は全て塗りつぶすことになる。両種の線分の交差回数が等しい領域は０重に囲われている(即ち、囲われていない)と見做される部分である。それゆえ、この方式でも多角形の中に空白が生じることはある。軌道の線分には進行方向がある。訳註ここまで)。時計回り方向の軌道線分とは、放射線の原点から見て、放射線を左から右へ横切る線分のことである。反時計回り方向の軌道線分とは、放射線の原点から見て、放射線を右から左へ横切る線分のことである。方向を持つ線分と放射線が一致して重なってしまう場合は考えなくて良い。なぜかというと、線分に重なっていない別の放射線を選択すれば済むからである。

どちらの塗りつぶし規則(fill rule)においても、点は無限に小さいものであり、軌道(path)は無限に細い線である。あるピクセルが(塗りつぶすべき領域の)内側にあるとされるのは、ピクセルの中心点が内側にあり、且つ中心点が境界上にない場合である。あるピクセルの中心点が境界上にある場合、同ピクセルが内側にあるとされるのは、多角形の内部が同ピクセルのすぐ右側(x 増加方向)にある場合に限られる。ピクセルの中心点が多角形の水平な縁の上に載っている特殊な場合には、多角形の内部が同ピクセルのすぐ下(y 増加方向)にあるときに限り、同ピクセルは内側にあるとされる。

arc-mode は、PolyFillArc リクエストにおける塗りつぶし方を指定するものである。

graphics-exposures フラグは、CopyArea リクエストと CopyPlane リクエスト(及び拡張機能で定義された同様のリクエスト)における GraphicsExposure イベントの発生(の条件)に影響を与えるものである。

各構成要素のデフォルトの値は次の通り。

構成要素 | デフォルトの値
--- | ---
function | Copy
plane-mask | all ones
foreground | 0
background | 1
line-width | 0
line-style | Solid
cap-style | Butt
join-style | Miter
fill-style | Solid
fill-rule | EvenOdd
arc-mode | PieSlice
tile | foreground で指定されたピクセル(もし指定があれば)で塗りつぶされた不特定の大きさのピクスマップである。 foreground の指定がなければ 0 である。 後で foreground を変更してもこのピクスマップには影響しない。
stipple | 1 で埋め尽くされた不特定の大きさのピクスマップである。
tile-stipple-x-origin | 0
tile-stipple-y-origin | 0
font | <server-dependent-font>
subwindow-mode | ClipByChildren
graphics-exposures | True
clip-x-origin | 0
clip-y-origin | 0
clip-mask | None
dash-offset | 0
dashes | 4 (即ち、[4, 4] という内容のリスト)

グラフィクス・コンテクストにピクスマップを格納したとき、複製が作られる場合と作られない場合がある。格納したピクスマップが後ほどグラフィクス・リクエストのデスティネーションとして使用される場合、変更内容がグラフィクス・コンテクストに反映される場合もあるし、反映されない場合もある。格納したピクスマップが１つのグラフィクス・リクエストにおいてデスティネーションとして使用され、且つ同時にタイルまたはスティプルとしても使用される場合、結果は未定義である。

グラフィクス・コンテクストの情報の一部がディスプレイ・ハードウェアにキャシュされるにもかかわらず、そのハードウェアでは少数のグラフィクス・コンテクストしかキャッシュできない、ということがありがちである。グラフィクス・コンテクストの構成要素の数と複雑さを考えると、クライアントは、ほとんど同じ内容のグラフィクス・コンテクスト複数を切り替えて使用することは１つのグラフィクス・コンテクストに小さな変更を加えて使用することよりも高くつく、と想定するべきである。

## ChangeGC

gc: GCONTEXT
value-mask: BITMASK
value-list: LISTofVALUE
Errors: Alloc, Font, GContext, Match, Pixmap, Value

このリクエストは、グラフィクス・コンテクストの構成要素に変更を施すものである。value-mask と value-list によって、変更する構成要素を指定する。値と制約は CreateGC リクエストと同じである。

clip-mask を変更すると、指定したグラフィクス・コンテクストに対してこれ以前に実行されていた SetClipRectangles リクエストの効果を置き換えることになる。dash-offset もしくは dashes を変更すると、指定したグラフィクス・コンテクストに対してこれ以前に実行されていた SetDashes リクエストの効果を置き換えることになる。

構成要素が検証され変更される順序は、サーバ依存である。エラーが発生した場合、指定した構成要素の一部だけが変更されてしまっている可能性がある。

## CopyGC

src-gc, dst-gc: GCONTEXT
value-mask: BITMASK
Errors: Alloc, GContext, Match, Value

このリクエストは、src-gc から dst-gc へ構成要素をコピーするものである。value-mask は、CreateGC と同じように、どの構成要素をコピーするのかを指定する。２つのグラフィクス・コンテクストのルートと深さは同じでなければならない(さもなくば Match エラーを生ずる)。

## SetDashes

gc: GCONTEXT
dash-offset: CARD16
dashes: LISTofCARD8
Errors: Alloc, GContext, Value

このリクエストは、グラフィクス・コンテクスト内の dash-offset と dashes を設定するものである。dash-offset と dashes は破線の様式を定める。dashes は空であってはならない(空の場合、Value エラーを生ずる)。奇数の長さのリストを指定することは、このリストに自身と同じリストを繋げて偶数の長さのリストを作り、出来上がったこのリストを指定するのと同じことになる。dashes の先頭の要素と、その後に１つ置きに登場する要素とが偶数番目のダッシュである。そして、その他の要素が奇数番目のダッシュである。各要素は、ダッシュの長さをピクセル単位で指定するものである。要素は全て 0 であってはならない(さもなくば Value エラーを生ずる)。dash-offset は、破線のパターンの位相を定めるものであり、１つのグラフィクス・リクエストにおいて、dashes 内の何番目のピクセルからパターンが(実際に)始まるのかを指定するものである。破線の模様(dashing)は、join-style で結合された軌道要素群(path elements)を通して連続しているが、結合された直線の各「sequence」(訳註：要確認)において毎回 dash-offset にリセットされる。

dashes を測る単位は、通常の座標系のものと同じである。直線の勾配に沿ってダッシュの長さを測るのが理想であるが、実装においては、この理想を叶える必要があるのは水平な直線と垂直な直線だけである。この理想を満たせない場合、ダッシュの長さは直線の「主軸」(major axis)に沿って測るべきである。主軸とは、x 軸に対して -45 度から 45 度の間の角を成すように描画される直線の場合、及び x 軸に対して 135 度から 225 度の間の角を成すように描画される直線の場合、x 軸のことである。他の全ての直線においては、主軸とは y 軸のことである。

どのグラフィクス・プリミティブ(訳註：関数のこと。用語集参照)においても、１つ１つのダッシュの端点の計算はプリミティブのジオメトリのみによって行われる(訳註：つまりグラフィクス・コンテクストは使われない)。即ち、ダッシュの開始位置、ダッシュの方向、及びダッシュの長さのみによって行われる。

どのグラフィクス・プリミティブにおいても、line-style が DoubleDash のプリミティブ(ダッシュの要素数が偶数でも奇数でも)の表示に使用するピクセル総ての集合は、line-style が Solid のプリミティブの表示に使用するピクセルの集合と同じである。

どのグラフィクス・プリミティブにおいても次のことが言える。即ち、line-style が OnOffDash もしくは DoubleDash であり、且つまず座標 [x,y] において、そして再び座標 [x+dx,y+dy] においてクリップせずに描画を行うプリミティブの場合、点 [x1,y1] は、点 [x1+dx,y1+dy] が第２のインスタンスの一部としてダッシュに含まれるときに限り、第１のインスタンスの一部としてダッシュの中に含まれる。加えて言うと、ダッシュを構成する「有効な点の集合」は、クリップによる影響を受け得ない。ある点がクリップされたダッシュの中に含まれるのは、その点がクリップ領域の内側にあり、且つクリップせずにダッシュを描画したならばそのダッシュの中にその点が含まれたであろう場合に限られる。

## SetClipRectangles

gc: GCONTEXT
clip-x-origin, clip-y-origin: INT16
rectangles: LISTofRECTANGLE
ordering: { UnSorted, YSorted, YXSorted, YXBanded}
Errors: Alloc, GContext, Match, Value

このリクエストは、gc で指定したグラフィクス・コンテクストの clip-mask を rectangles で指定したリスト(から生成されるもの)へと変更し、同時にクリップの原点を設定するものである。出力は、rectangles で指定された矩形群の内部に収まるように周囲を切り取られる(クリップされる)。クリップの原点(の座標)は、グラフィクス・リクエストで指定されたデスティネーション・ドローアブルの原点を基準として解釈される。矩形の座標は、クリップの原点を基準として解釈される。矩形群は交差しない(共通部分を持たない)ようにするべきであり、交差した場合にグラフィクスの結果がどうなるのかは未定義である。rectangles のリストは空であってもよく、その場合、出力は事実上禁止される。これは、CreateGC リクエストや ChangeGC リクエストの clip-mask に None を指定した場合とは逆の効果である。

rectangles の矩形群の順序関係は、クライアントがこれを知っている場合、引数 ordering で指定することができる。これによって サーバの演算がより速くなる。不正確な順序が指定された場合、サーバは Match エラーを生成することができるけれども、必ずしもそうしなければいけないわけではない。エラーを生成しなかった場合、グラフィクスの結果は未定義である。UnSorted は、矩形群が任意の順序であってよいことを意味する。YSorted は、y 座標が昇順(小さいものが先頭)となるように矩形群が並んでいることを意味する。YXSorted は、YSorted の順序に対して、同一の y 座標の原点を持つ矩形は全て原点の x 座標が昇順となるように並んでいる、という制約を追加したものである。YXBanded は、YXSorted の順序に対して、「選択可能な y 座標の走査線の全てについて、ある走査線を領域内に含む矩形は全て、同一の y 座標の原点と同一の y 方向の幅(高さ)を持たなければならない」という制約を追加したものである。

## FreeGC

gc: GCONTEXT
Errors: GContext

このリクエストは、リソース ID とグラフィクス・コンテクストの間の結び付きを削除し、同グラフィクス・コンテクストを破棄するものである。

## ClearArea

window: WINDOW
x, y: INT16
width, height: CARD16
exposures: BOOL
Errors: Match, Value, Window

(訳註：このリクエストは、window で指定されたウィンドウの指定された矩形領域を同ウィンドウの背景ピクセル(background-pixel)もしくは背景ピクスマップ(background-pixmap)で塗るものである。)

x、y 座標は、ウィンドウの原点の基準としたものであり、矩形の左上隅の位置を指定する。width の値が 0 である場合、width はウィンドウの現在の幅から x を引いた値に置き換えられる。height の値が 0 である場合、height はウィンドウの現在の高さから y を引いた値に置き換えられる。ウィンドウに背景タイルが定義されている場合、矩形は次の(GC の)設定でタイルされる。即ち、plane-mask は全ての値が 1 のもの、function は Copy、subwindow-mode は ClipByChildren という設定でタイルされる。ウィンドウの背景が None である場合、ウィンドウの内容は変更されない。どちらの場合にも、exposures が True であれば、可視状態であるかあるいはバッキング・ストアに保持されている矩形の領域に対して、１つ以上の露出イベントが発生する。

このリクエストで InputOnly のウィンドウを使用すると、Match となる。

## CopyArea

src-drawable, dst-drawable: DRAWABLE
gc: GCONTEXT
src-x, src-y: INT16
width, height: CARD16
dst-x, dst-y: INT16
Errors: Drawable, GContext, Match

このリクエストは、src-drawable で指定された矩形を dst-drawable で指定された矩形と組み合わせるものである。src-x、src-y の座標は、src-drawable のドローアブルの原点を基準としたものである。dst-x と dst-y は、dst-drawable のドローアブルの原点を基準としたものである。どちらの座標も矩形の左上隅を指定する。src-drawable のドローアブルのルートと深さは、 dst-drawable のドローアブルと同じでなければならない(さもなくば Match エラーを生ずる)。

ソースの矩形の領域が隠されており且つ同領域がバッキング・ストアに保持されていない場合、あるいはソース・ドローアブルの境界の外側の領域が指定された場合、それらの領域はコピーされないが、それらのソース領域に対応するデスティネーション領域の中、可視状態であるか或いはバッキング・ストアに保持されているもの全てに対して、以下の処理が行われる。dst-drawable がウィンドウであり、その背景が None でない場合、それらのデスティネーション領域はその背景でタイルされる(plane-mask は全ての値が 1 のものを使用し、function は Copy とする)。タイル処理とは無関係に、またデスティネーションがウィンドウであるかピクスマップであるかとも無関係に、gc のグラフィクス・コンテクストの graphics-exposures が True であれば、上記のソース領域に対応するデスティネーション領域全てに対して GraphicsExposure イベントが生成される。

graphics-exposures が True であるにもかかわらず GraphicsExposure イベントが一切発生しない場合、NoExposure イベントが発生する。

GC の構成要素：function、plane-mask、subwindow-mode、graphics-exposures、clip-x-origin、clip-y-origin、clip-mask。

## CopyPlane

src-drawable, dst-drawable: DRAWABLE
gc: GCONTEXT
src-x, src-y: INT16
width, height: CARD16
dst-x, dst-y: INT16
bit-plane: CARD32
Errors: Drawable, GContext, Match, Value

src-drawable で指定されたドローアブルは dst-drawable で指定されたドローアブルと同じルートを持たなければならない(さもなくば Match エラーを生ずる)が、深さも同じである必要はない。bit-plane では必ず１つのビットだけを 1 に設定しなければならず、bit-plane の値(符号なし整数として解釈したもの)は 2n 未満でなければならない(さもなくば Value エラーを生ずる)(n は src-drawable のドローアブルの深さである)。実際には、次に述べるようなピクスマップが形成され、CopyArea が実行される(露出関連の処理についても全て CopyArea と同じである)。ここで形成されるピクスマップは、dst-drawable と同じ深さを持ち、ソース領域として指定されたサイズと同じ大きさを持ち、gc で指定されたグラフィクス・コンテクストの foreground と background を使用して形成されるものである(src-drawable 内の bit-plane 番目のビット・プレーンの中、ビットが 1 に設定されている箇所は foreground の色を使用し、同ビット・プレーンの中、ビットが 0 に設定されている箇所は background の色を使用する)。この処理は次のように考えることもできる。即ち、ソースの bit-plane 番目のビット・プレーンの指定領域をスティプルとして使用して、fill-style を OpaqueStippled として、デスティネーションの矩形領域を塗りつぶす処理であると考えることもできる。

GC の構成要素：function、plane-mask、foreground、background、subwindow-mode、graphics-exposures、clip-x-origin、clip-y-origin、clip-mask。

## PolyPoint

drawable: DRAWABLE
gc: GCONTEXT
coordinate-mode: { Origin, Previous}
points: LISTofPOINT
Errors: Drawable, GContext, Match, Value

このリクエストは、gc で指定されたグラフィクス・コンテクストの foreground のピクセルと、drawable のドローアブル内の points で指定された各点とを結びつけるものである(訳註：点を描画する)。points の各点は、リスト内の順序で描画される。

最初の点(の座標)は、常に drawable のドローアブルの原点を基準としたものである。残りの点(の座標)は、coordinate-mode に従い、drawable の原点を基準とする場合と直前の点を基準とする場合とがある。

GC の構成要素：function、plane-mask、foreground、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask。

## PolyLine

drawable: DRAWABLE
gc: GCONTEXT
coordinate-mode: { Origin, Previous}
points: LISTofPOINT
Errors: Drawable, GContext, Match, Value

このリクエストは、points のそれぞれの対(point[i], point[i+1])の間に直線を描画するものである。各直線は、points のリスト内の順序で描画される。各直線は全ての中継点で規則通りに接合され(join correctly)、最初と最後の点が一致する場合には、最初と最後の直線も規則通りに接合される。

いづれの直線においても、２回以上描画されるピクセルは存在しない。細線(line-width が 0)が交差する場合、交差する(箇所の)ピクセルは複数回描画される。太線が交差する場合、PolyLine (で作られた線)全体がまるで１個の「塗りつぶされた形状」(filled shape)であるかのように扱われ、交差する(箇所の)ピクセルは１回しか描画されない。

最初の点(の座標)は、常に drawable のドローアブルの原点を基準としたものである。残りの点(の座標)は、coordinate-mode に従い、drawable の原点を基準とする場合と直前の点を基準とする場合とがある。

Bevel 方式で接合される２つの直線の中のどちらかが垂直でも水平でもない場合、bevel 型接合(の接合箇所)の縁となる線分の勾配と位置は、実装依存である。但し、勾配と距離(接合点を基準としたもの)の計算は、直線の太さ(line width)と、２つの直線の勾配のみによって行われる。

GC の構成要素：function、plane-mask、line-width、line-style、cap-style、join-style、fill-style、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask。

GC のモード依存の構成要素：foreground、background、tile、stipple、tile-stipple-x-origin、tile-stipple-y-origin、dash-offset、dashes。

## PolySegment

drawable: DRAWABLE
gc: GCONTEXT
segments: LISTofSEGMENT
ただし:
SEGMENT: [x1, y1, x2, y2: INT16]
Errors: Drawable, GContext, Match

このリクエストは、segments で指定された区間ごとに、[x1, y1] と [x2, y2] の間に直線を１本描画する。直線は、segments のリスト内の順序で描画される。端点が一致しても接合処理は行わない。いづれの直線においても、２回以上描画されるピクセルは存在しない。直線が交差する場合、交差する(箇所の)ピクセルは複数回描画される。

GC の構成要素：function、plane-mask、line-width、line-style、cap-style、fill-style、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask。

GC のモード依存の構成要素：foreground、background、tile、stipple、tile-stipple-x-origin、tile-stipple-y-origin、dash-offset、dashes。

## PolyRectangle

drawable: DRAWABLE
gc: GCONTEXT
rectangles: LISTofRECTANGLE
Errors: Drawable, GContext, Match

このリクエストは、rectangles で指定された矩形群の輪郭(外形線)を描画するものである。これは、各矩形に対して次の５点を指定して PolyLine を実行したのと同様の結果になる。

    	[x,y] [x+width,y] [x+width,y+height] [x,y+height] [x,y]

各矩形の x、y の座標は、drawable で指定されたドローアブルの原点を基準としたものであり、その矩形の左上隅を表す。

rectangles の矩形群は、リスト内の順序で描画される。いづれの矩形においても、２回以上描画されるピクセルは存在しない。矩形と矩形が交差する場合、交差する(箇所の)ピクセルは複数回描画される。

GC の構成要素：function、plane-mask、line-width、line-style、cap-style、join-style、fill-style、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask。

GC のモード依存の構成要素：foreground、background、tile、stipple、tile-stipple-x-origin、tile-stipple-y-origin、dash-offset、dashes。

## PolyArc

drawable: DRAWABLE
gc: GCONTEXT
arcs: LISTofARC
Errors: Drawable, GContext, Match

このリクエストは、円形の弧または楕円形の弧(複数可)を描画するものである。各弧は、１つの矩形と２つの角度を用いて指定する。角度は、通常の度数に６４を掛けて得た符号付き整数(６４分の１度を単位とする符号付き整数)であり、正の値は反時計回り方向、負の値は時計回り方向を表す。弧の始点は、(引数 arcs の各 ARC の) angle1 で指定される。この angle1 の角度は (引数 arcs の各 ARC で指定された) 矩形の中心から見て３時の位置を基準としたものである。そして、弧の軌道(path)と範囲(extent)は (引数 arcs の各 ARC の) angle2 で指定される。この angle2 の角度は弧の始点を基準としたものである。angle2 の角度(通常の意味での角度)が３６０度より大きい場合、この角度は３６０度に切り詰められる。(引数 arcs の各 ARC で指定された) 矩形の x、y の座標は、drawable で指定されたドローアブルの原点を基準としたものである。ARC [x,y,w,h,a1,a2] で指定される弧の場合、長軸と短軸の原点は [x+(w/2),y+(h/2)] であり、円・楕円全体を表す無限に細い軌道(path)が水平軸と交差する点は [x,y+(h/2)] 及び [x+w,y+(h/2)] であり、同軌道が垂直軸と交差する点は [x+(w/2),y] 及び [x+(w/2),y+h] である。これらの座標の値は整数値である必要はない。即ち、小数点以下を切り捨てて離散値をとる座標にしたりはしない。

line-width の値が lw である太線の場合、その太線の境界の理論的な輪郭(外形線。太線として塗られる領域を定める)は、円・楕円の軌道(path)の接線からの垂直距離が lw/2 (分数値でもよい)に等しい点の全てから成る、無限に細い２つの軌道と定義される。弧の (ARC の) width と height が等しくなく、且つ両者が 0 でない場合、実際の境界輪郭は、実装依存である。但し、境界輪郭の形状と位置(弧の中心を基準とする)の計算は、弧の幅と高さ、及び line-width のみに基いて行われる。

cap-style は、円・楕円の端点の接線と一致する直線に対してこれを適用するのと同じ形で適用される。弧の切り口の角度が９０度の整数倍でなく、且つ弧の幅と高さがともに 0 でない場合、切り口のキャップの形状と位置は実装依存である。但し、cap-style が Butt である場合、切り口(の形状)は直線であり、同直線の位置(弧の中心を基準としたもの)と勾配の計算は、弧の幅と高さ、及び弧の切り口の角度のみに基いて行われる。他の cap-style の場合、キャップの位置(弧の中心を基準としたもの)と形状の計算は、弧の幅と高さ、line-width、弧の切り口の角度、及び端点から見た弧の方向(時計回りか反時計回りか)のみに基いて行われる。

join-style は、２つの円・楕円の接合点における接線と一致する２本の直線に対してこれを適用するのと同じ形で適用される。弧の幅と高さがともに 0 でなく、且つどちらの弧の切り口の角度も９０度の整数倍でない場合、接合の形状は実装依存である。但し、形状の計算は、各弧の幅と高さ、line-width、２つの弧の切り口の角度、接合点から見た弧の方向(時計回りか反時計回りか)、及び２つの弧の中心点の相対的な位置関係のみに基いて行われる。

ARC [x,y,w,h,a1,a2] で指定される弧の場合、角度は斜めになった楕円座標系で指定しなければならない((w と h が等しい) 円の場合、角度の座標系は通常の座標系と同一)。 この角度と、スクリーンの通常の座標系で表される角度(分度器で測ったもの)との関係は、次の通りである。

    	skewed-angle = atan(tan(normal-angle) * w/h) + adjust

skewed-angle と normal-angle の単位はラジアンであり(６４分の１度ではない)、範囲は [0, 2*PI) である(訳註：「)」に注意)。atan の値の範囲は [-PI/2, PI/2] である。adjust の値は次の通り。

0 | normal-angle の値が [0, PI/2) の範囲内にあるとき
PI | normal-angle の値が [PI/2, (3*PI)/2) の範囲内にあるとき
2*PI | normal-angle の値が [(3*PI)/2, 2*PI) の範囲内にあるとき

各弧は、arcs のリスト内の順序で描画される。ある弧の終点が次の弧の始点と一致する場合、２つの弧は規則通りに接合される(join correctly)。最初の弧の始点が最後の弧の終点と一致する場合も、２つの弧は規則通りに接合される。いづれの弧においても、２回以上描画されるピクセルは存在しない。２つの弧が規則通りに接合され、且つ line-width が 0 より大きく、且つこの２つの弧が交差する場合、２回以上描画されるピクセルは存在しない。それ以外の場合は、交差する弧の交差する(箇所の)ピクセルは複数回描画される。ある端点から時計回りに伸びる弧を指定すると、その弧の終点から反時計回りに(その弧と)同じように伸びる弧を指定したときと同じピクセルが描画される。但し、接合には違いが出る。

一方の軸を 0 に設定すると、水平もしくは垂直の直線を描画することができる。

角度は、縦横比(aspect ratio)を無視して、座標系のみに基いて計算される。

GC の構成要素：function、plane-mask、line-width、line-style、cap-style、join-style、fill-style、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask。

GC のモード依存の構成要素：foreground、background、tile、stipple、tile-stipple-x-origin、tile-stipple-y-origin、dash-offset、dashes。

## FillPoly

drawable: DRAWABLE
gc: GCONTEXT
shape: { Complex, Nonconvex, Convex}
coordinate-mode: { Origin, Previous}
points: LISTofPOINT
Errors: Drawable, GContext, Match, Value

このリクエストは、指定された軌道(path)によって囲まれる領域を塗りつぶすものである。points の最後の点と最初の点が一致する場合、この軌道は自動的に閉じられる。この領域には、２回以上描画されるピクセルは存在しない。

points の最初の点(の座標)は常に、drawable で指定されたドローアブルの原点を基準としたものである。残りの点(の座標)は、drawable の原点を基準とする場合と直前の点(の座標)を基準とする場合とがあり、どちらの基準をとるかは coordinate-mode によって決まる。

サーバは、shape という変数を使って実行効率を上げることができる。Complex は、軌道が自己交差する可能性があることを意味する。軌道内の点が連続で同じ座標を指していても、自己交差とは見做さない。

Nonconvex は、軌道は自己交差しないけれども形状が完全には凸状でないことを意味する。クライアントがこれを知っている場合、Complex の代わりに Nonconvex を指定すると実行効率を上げることができる。自己交差する軌道に対して Nonconvex を指定した場合のグラフィクス操作の結果は未定義である。

Convex は、多角形内の点のいづれの２点をとっても、それらを結ぶ線分が軌道と交差しないことを意味する。クライアントがこれを知っている場合、Convex を指定すると実行効率を上げることができる。凸状でない軌道に対して Convex を指定した場合のグラフィクス操作の結果は未定義である。

GC の構成要素：function、plane-mask、fill-style、fill-rule、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask。

GC のモード依存の構成要素：foreground、background、tile、stipple、tile-stipple-x-origin、tile-stipple-y-origin。

## PolyFillRectangle

drawable: DRAWABLE
gc: GCONTEXT
rectangles: LISTofRECTANGLE
Errors: Drawable, GContext, Match

このリクエストは、rectangles で指定された矩形群を塗りつぶすものである。rectangles の各矩形に対して、それぞれ次の４点を指定して FillPoly を実行したのと同じ結果になる。

    	[x,y] [x+width,y] [x+width,y+height] [x,y+height]

各矩形の x、y 座標は、drawable で指定されたドローアブルの原点を基準としたものであり、矩形の左上隅を表す。

rectangles の矩形群は、同リスト内の順序で描画される。いづれの矩形においても、２回以上描画されるピクセルは存在しない。矩形同士が交差する場合、交差する(箇所の)ピクセルは複数回描画される。

GC の構成要素：function、plane-mask、fill-style、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask。

GC のモード依存の構成要素：foreground、background、tile、stipple、tile-stipple-x-origin、tile-stipple-y-origin。

## PolyFillArc

drawable: DRAWABLE
gc: GCONTEXT
arcs: LISTofARC
Errors: Drawable, GContext, Match

このリクエストは、arcs 内の各弧に対して、指定された弧と１本もしくは２本の線分とによって定まる無限に細い軌道(path)によって囲われる領域を、arc-mode に従って塗りつぶすものである。arc-mode が Chord である場合、弧の両端の点を結ぶ線分１本を使用する。arc-mode が PieSlice である場合、弧の両端の点と円の中心点とを結ぶ線分２本を使用する。

ARC [x,y,w,h,a1,a2] で指定される弧の場合、長軸と短軸の原点は [x+(w/2),y+(h/2)] であり、円・楕円全体を表す無限に細い軌道は、水平軸と [x,y+(h/2)] 及び [x+w,y+(h/2)] で交差し、垂直軸と [x+(w/2),y] 及び [x+(w/2),y+h] で交差する。これらの座標の値は整数である必要はない。即ち、小数点以下を切り捨てて離散値をとる座標にしたりはしない。

弧の角度は、PolyArc リクエストの項で述べたのと同様の仕方で解釈される。弧の切り口の角度が９０度の整数倍でない場合、弧の端点の正確な位置と形状は、実装依存である。但し、arc-mode が Chord である場合、両端の点の(弧の中心を基準とした位置と形状の)計算は、弧の幅と高さ、及び弧の２つの端点の切り口の角度のみに基いて行われる。arc-mode が PieSlice である場合、ある端点の(位置と形状の)計算は、その端点における弧の切り口の角度と、弧の幅と高さの比のみに基いて行われる。

arcs の各弧は、リスト内の順序で塗りつぶされる。いづれの弧においても、２回以上描画されるピクセルは存在しない。領域が交差する場合、交差する(箇所の)ピクセルは複数回描画される。

GC の構成要素：function、plane-mask、fill-style、arc-mode、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask。

GC のモード依存の構成要素：foreground、background、tile、stipple、tile-stipple-x-origin、tile-stipple-y-origin。

## PutImage

drawable: DRAWABLE
gc: GCONTEXT
depth: CARD8
width, height: CARD16
dst-x, dst-y: INT16
left-pad: CARD8
format: { Bitmap, XYPixmap, ZPixmap}
data: LISTofBYTE
Errors: Drawable, GContext, Match, Value

このリクエストは、指定されたイメージを drawable のドローアブルの中の指定された矩形に結びつける(描画する)ものである。dst-x、dst-y の座標は、drawable のドローアブルの原点を基準としたものである。

format が Bitmap である場合、depth の値は 1 でなければならず(さもなくば Match エラーを生ずる)、イメージは XY 形式でなければならない。イメージの中のビットが 1 に設定されている箇所には、gc で指定されたグラフィクス・コンテクストの foreground のピクセルをソースとして使用し、0 に設定されている箇所には background のピクセルをソースとして使用する。

format が XYPixmap あるいは ZPixmap である場合、depth の値は drawable のドローアブルの深さと一致しなければならない(さもなくば Match エラーを生ずる)。XYPixmap である場合、イメージは XY 形式で送られなければならない。ZPixmap である場合、イメージは、指定された深さの Z 形式で送られなければならない。

format が ZPixmap 形式である場合、left-pad の値は 0 でなければならない(さもなくば Match エラーを生ずる)。format が Bitmap 形式あるいは XYPixmap 形式である場合、left-pad の値は、サーバへの接続設定の際に受け取った情報の中の bitmap-scanline-pad の値未満でなければならない(さもなくば Match エラーを生ずる)。サーバは、全ての走査線の中の最初の left-pad 個のビットを無視する。実際のイメージは、data のデータの中の最初の left-pad 個のビットを飛ばした位置から始まる。引数 width は、実際のイメージの幅を表すものであり、left-pad の部分は含まない。

GC の構成要素：function、plane-mask、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask。

GC のモード依存の構成要素：foreground、background。

## GetImage

drawable: DRAWABLE
x, y: INT16
width, height: CARD16
plane-mask: CARD32
format: { XYPixmap, ZPixmap}
▶
depth: CARD8
visual: VISUALID or None
data: LISTofBYTE
Errors: Drawable, Match, Value

このリクエストは、drawable のドローアブル内の指定された矩形の内容を、format で指定された形式で返すものである。x、y の座標は、drawable のドローアブルの原点を基準としたものであり、矩形の左上隅を表す。format に XYPixmap を指定すると、plane-mask で指定されたビット・プレーンだけが送られる。この際には、プレーンは、最上位ビットが先、最下位ビットが後という順序で届く。format に ZPixmap を指定すると、plane-mask で指定されていないプレーン全てのビットが 0 になって送られてくる。plane-mask に対して範囲の検査は行われず、余分なビットは単に無視される。返ってくる depth の値は、drawable のドローアブルを作成した時に指定した値であり、FORMAT 構造体(接続設定時の受け取ったもの)の構成要素 depth と同じであって、同構造体の構成要素 bits-per-pixel の値ではない。drawable がウィンドウである場合、そのヴィジュアル型も返る。drawable がピクスマップである場合、visual には None が返る。

drawable がピクスマップである場合、指定された矩形全体が同ピクスマップの中に含まれていなければならない(さもなくば Match エラーを生ずる)。drawable がウィンドウである場合、ウィンドウは表示可能状態でなければならず、且つ同ウィンドウに子孫や上に重なるウィンドウが存在しない場合には、同ウィンドウの指定された矩形は、スクリーン上で完全に可視状態であり且つ同ウィンドウの外縁の内部に全体が含まれていなければならない(さもなくば Match エラーを生ずる)。ウィンドウのボーダは、このリクエスト(で取得するイメージ)の範囲に含めて読み込むことができる。指定されたウィンドウにバッキング・ストアがある場合、同ウィンドウの領域の中、同ウィンドウの子孫でないウィンドウによって隠されている部分の内容として、このバッキング・ストアの内容が返る。指定されたウィンドウにバッキング・ストアがない場合、このような形で隠された領域の内容として返される内容は未定義である。また、指定されたウィンドウとは異なる深さを持つ(同ウィンドウの)子孫の可視領域の内容として返される内容も未定義である。ポインタのカーソルのイメージは、返ってくる内容には含まれない。

このリクエストには、他のグラフィックス関連リクエストのような汎用性は無い。主に基礎的なハードコピーを行うためのものである。

## PolyText8

drawable: DRAWABLE
gc: GCONTEXT
x, y: INT16
items: LISTofTEXTITEM8
where: |  |
TEXTITEM8: | TEXTELT8 or FONT
TEXTELT8: | [delta: INT8
string: STRING8]
Errors: Drawable, Font, GContext, Match

(訳註：このリクエストは１つ以上の文字列を描画するもの。)

x、y の座標は、drawable で指定されたドローアブルの原点を基準としたものであり、ベースラインの開始位置(最初の文字の原点)を表す。各テキスト項目(text item：TEXTITEM8)は順番に処理される。フォント項目(font item：FONT)があると、同フォントは gc のグラフィクス・コンテクストに格納され、以降のテキスト(文字列)で使用される。フォントの切り替えは、次の文字の原点の位置には影響しない。テキスト要素(text element：TEXTELT8)の delta には、string の文字列を描画する前に行われる、x 軸方向の位置の調整の値を指定する。この際には、delta の値は常に文字の原点に対して加える。各文字のイメージは、gc の font のものであり、drawable のドローアブルに対する塗りつぶし操作の際の追加のマスクとして機能する。

このリクエストに含まれる FONT は全て、常に最上位バイトから順に送られる。

ある項目(item：TEXTITEM8)に対して Font エラーが発生した場合、それより前の項目群は描画されてしまっている可能性がある。

２バイト行列の索引で定義されるフォントの場合、STRING8 のバイトはいづれも CHAR2B の第２バイト(byte2)の値として解釈され、この時、第１バイト(byte)の値は 0 と見做される。

GC の構成要素：function、plane-mask、fill-style、font、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask。

GC のモード依存の構成要素：foreground、background、tile、stipple、tile-stipple-x-origin、tile-stipple-y-origin。

## PolyText16

drawable: DRAWABLE
gc: GCONTEXT
x, y: INT16
items: LISTofTEXTITEM16
where: |  |
TEXTITEM16: | TEXTELT16 or FONT
TEXTELT16: | [delta: INT8
string: STRING16]
Errors: Drawable, Font, GContext, Match

このリクエストは PolyText8 とよく似ているが、こちらは２バイト(１６ビット)の文字を使用する。２バイト行列の索引ではなく線型索引(linear indexing)で定義されるフォントの場合、サーバは CHAR2B のそれぞれを、最上位バイトから先に送られてきた１６ビットの数値として解釈する(即ち、CHAR2B の第１バイト(byte1)が最上位バイトとして扱われる)。

## ImageText8

drawable: DRAWABLE
gc: GCONTEXT
x, y: INT16
string: STRING8
Errors: Drawable, GContext, Match

(訳註：このリクエストは、image text と呼ばれるものを描画する。イメージ・テキストでは、各文字の前景ビットと背景ビットの両方が塗られる。ちらつきが抑えられて見やすくなるらしい。)

x、y の座標は、drawable で指定されたドローアブルの原点を基準としたものであり、ベースラインの開始位置(最初の文字の原点)を表す。まず gc のグラフィクス・コンテクストで定義された背景ピクセルを用いてデスティネーションの矩形を塗りつぶし、次いで前景ピクセルでテキストを描く。塗りつぶされる矩形の左上隅の座標は次の通り。

    	[x, y - font-ascent]

塗りつぶされる矩形の幅は次の通り。

    	overall-width

塗りつぶされる矩形の高さは次の通り。

    	font-ascent + font-descent

overall-width、font-ascent、及び font-descent の値は、gc のグラフィクス・コンテクストと string の文字列を指定して QueryTextExtents リクエストを呼び出したときに返ってくる値と同じである。

gc に設定されている function と fill-style は、このリクエストでは無視される。実際に使用される function は Copy であり、fill-style は Solid となる。

２バイト行列の索引で定義されるフォントの場合、STRING8 のバイトはいづれも CHAR2B の第２バイト(byte2)の値として解釈され、この時、第１バイトの値は 0 と見做される。

GC の構成要素：plane-mask、foreground、background、font、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask。

## ImageText16

drawable: DRAWABLE
gc: GCONTEXT
x, y: INT16
string: STRING16
Errors: Drawable, GContext, Match

このリクエストは ImageText8 とよく似ているが、こちらは２バイト(１６ビット)の文字を用いる。２バイト行列の索引ではなく線型索引で定義されるフォントの場合、サーバは CHAR2B のそれぞれを、最上位バイトから先に送られてきた１６ビットの数値として解釈する(即ち、CHAR2B の第１バイト(byte1)が最上位バイトとして扱われる)。

## CreateColormap

mid: COLORMAP
visual: VISUALID
window: WINDOW
alloc: { None, All}
Errors: Alloc, IDChoice, Match, Value, Window

このリクエストは、window で指定されたウィンドウが存在するスクリーンに対して、visual で指定されたヴィジュアルの型のカラーマップを作成し、このカラーマップに識別子 mid を与えるものである。このヴィジュアル型はスクリーンが対応しているもののいづれかでなければならない(さもなくば Match エラーを生ずる)。ウィジュアルのクラスが GrayScale、PseudoColor、もしくは DirectColor である場合のカラーマップのエントリの初期値は定められていない。StaticGray、StaticColor、及び TrueColor の場合、エントリは決まった値を持つが、この値はヴィジュアル固有のものであり、コア・プロトコル(本プロトコル)では定義していない。StaticGray、StaticColor、及び TrueColor の場合、alloc には None を指定しなければならない(さもなくば Match エラーを生ずる)。他のクラスの場合、alloc に None を指定すると、カラーマップには初期状態では割り当てられたエントリが入っていないので、クライアントはエントリを割り当てることができる。

alloc に All を指定すると、カラーマップ全体が書き込み可能な状態で割り当てられる。割り当てられたエントリ全ての初期値は、定められていない。これは、GrayScale と PseudoColor の場合、AllocColorCells リクエストが 0 から N - 1 までの全てのピクセル値を返したのと同じ結果になる(N は指定されたヴィジュアルの colormap-entries (VISUALTYPE) の値である)。DirectColor の場合、AllocColorPlanes リクエストが 0 のピクセル値を返し、且つ red-mask、green-mask、及び blue-mask の値として、visual で指定されたヴィジュアルの対応するマスクと同じビットを含む値を返したのと同じ結果になる。但し、いづれの場合においても、これらのエントリは FreeColors で解放することができない。

## FreeColormap

cmap: COLORMAP
Errors: Colormap

このリクエストは、リソース ID とカラーマップとの結び付きを削除し、同カラーマップの記憶領域を解放するものである。カラーマップがスクリーンに組み込まれている場合、同カラーマップは取り外される(uninstalled)(UninstallColormap リクエストを参照)。cmap のカラーマップがいづれかのウィンドウのカラーマップとして定義されている(設定されている)(CreateWindow もしくは ChangeWindowAttributes によって)場合、そのウィンドウのカラーマップは None に変更され、ColormapNotify イベントが発生する。カラーマップが None であるウィンドウに表示される色については、本プロトコルでは定めていない。

このリクエストは、スクリーンのデフォルト・カラーマップに対しては何ら影響を与えない。

## CopyColormapAndFree

mid, src-cmap: COLORMAP
Errors: Alloc, Colormap, IDChoice

このリクエストは、src-cmap のカラーマップと同じヴィジュアル型・同じスクリーンを持つカラーマップを作成し、作成したカラーマップに識別子 mid を与えるものである。また、このリクエストは、クライアントの割り当て済みエントリ全てを src-cmap のカラーマップから新たなカラーマップへ移す操作も行う。この時、それらのエントリの色値はそのままであり、読み込み専用あるいは書き込み可能という特性もそのままである。このリクエストによって、src-cmap のカラーマップ内の上記エントリは解放される。新たなカラーマップの中のその他のエントリの色値は、定められていない。クライアントが alloc に All を指定して src-cmap のカラーマップを作成していた場合(CreateColormap リクエストの項を参照)、新たなカラーマップも alloc を All として作成され、全てのエントリの全ての色値は src-cmap のカラーマップからコピーされ、その後 src-cmap 内の全てのエントリは解放される。クライアントが alloc に All を指定して src-cmap のカラーマップを作成したのでない場合、移される割り当て済みエントリは、AllocColor、AllocNamedColor、AllocColorCells、もしくは AllocColorPlanes のいづれかを用いてクライアントが割り当てたピクセルとプレーンの中、割り当てられた後に未だ解放されていないピクセルとプレーン全てである。

## InstallColormap

cmap: COLORMAP
Errors: Colormap

このリクエストは、cmap のカラーマップを同カラーマップのスクリーンに組み込む(install)ものである。このカラーマップと結び付いている全てのウィンドウは、直ちに本当の色で表示されることになる。副作用として、これとは別のカラーマップがサーバによって暗黙のうちに組み込まれたり取り外されたり(uninstalled)することがある。この時、どのカラーマップが組み込まれたり取り外されたりするのかはサーバ次第であるが、必要リスト(required list)にあるカラーマップは組み込まれたままでなければならない。

cmap のカラーマップが組み込み済みのカラーマップでない場合、同カラーマップを属性として持つ全てのウィンドウに関して ColormapNotify イベントが発生する。加えて、このリクエストの結果として組み込まれたり取り外されたりした他のカラーマップ全てについても同様で、それらのカラーマップを属性として持つ全てのウィンドウに関して ColormapNotify イベントが発生する。

常に「必要リスト」(required list)と呼ばれるものが存在する。これは、組み込まれたカラーマップ群の部分集合であって、順序を持つリストである。必要リストの長さは、X サーバへの接続設定の際に通知されたスクリーンの min-installed-maps の値を M とすると、長くても M である。必要リストは次のように維持される。あるカラーマップが明示的な引数として InstallColormap に渡された場合、同カラーマップは必要リストの先頭に追加される。必要であれば、必要リストの長さが M を超えないように末尾部分が切り捨てられる。あるカラーマップが明示的な引数として UninstallColormap に渡され、しかもそのカラーマップが必要リストに入っていた場合、同カラーマップはリストから取り除かれる。X サーバが暗黙のうちにカラーマップを組み込む場合、同カラーマップは必要リストには加えられない。X サーバは、必要リストに含まれているカラーマップを暗黙のうちに取り外す(uninstall)ことができない。

初期状態では、スクリーンのデフォルトのカラーマップが組み込まれている(けれども、必要リストには含まれていない)。

## UninstallColormap

cmap: COLORMAP
Errors: Colormap

cmap で指定されたカラーマップが同カラーマップのスクリーンの必要リスト(required list)の中にある場合(InstallColormap リクエストの項を参照)、同カラーマップはリストから除かれる。副作用として、cmap のカラーマップは取り外される(uninstalled)ことがあり、また、これとは別のカラーマップが暗黙のうちに組み込まれたり取り外されたりすることもある。この時、どのカラーマップを組み込んだり取り外したりするのかはサーバ次第であるが、必要リストにあるカラーマップは組み込まれたままでなければならない。

cmap のカラーマップが取り外された場合、同カラーマップを属性として持つ全てのウィンドウに関して ColormapNotify イベントが発生する。加えて、このリクエストの結果として組み込まれたり取り外されたりした他のカラーマップ全てについても同様で、それらのカラーマップを属性として持つ全てのウィンドウに関して ColormapNotify イベントが発生する。

## ListInstalledColormaps

window: WINDOW
▶
cmaps: LISTofCOLORMAP
Errors: Window

このリクエストは、window で指定されたウィンドウのスクリーンに現在組み込まれているカラーマップのリスト(配列)を返すものである。リスト内のカラーマップの順序に意味はなく、必要リスト(InstallColormap の項を参照)に関する情報は何ら含まれていない。

## AllocColor

cmap: COLORMAP
red, green, blue: CARD16
▶
pixel: CARD32
red, green, blue: CARD16
Errors: Alloc, Colormap

このリクエストは、読み込み専用のカラーマップ・エントリを取得する(allocate)ものである。このエントリには、ハードウェアが対応している RGB 値の中、引数で指定された値に最も近い値が入っている。リクエストの戻り値として、実際に使用されるピクセル値と RGB 値が返る。複数のクライアントが同一の RGB 値(実際に使用される値が同一)を要求した場合、同一の読み込み専用エントリが割り当てられ(be assigned)、そのエントリは共有される。

## AllocNamedColor

cmap: COLORMAP
name: STRING8
▶
pixel: CARD32
exact-red, exact-green, exact-blue: CARD16
visual-red, visual-green, visual-blue: CARD16
Errors: Alloc, Colormap, Name

このリクエストは、cmap で指定されたカラーマップに対応するスクリーンにおいて name で指定された色を探し出し、同 cmap を用いて AllocColor を実施するものである。name には ISO Latin-1 の符号化方式を使用するものとし、大文字と小文字は区別しない。「exact-〜」の RGB 値は、探し出した色の本当の値を表し、「visual-〜」の値は、cmap のカラーマップで実際に使用される値を表す。

## AllocColorCells

cmap: COLORMAP
colors, planes: CARD16
contiguous: BOOL
▶
pixels, masks: LISTofCARD32
Errors: Alloc, Colormap, Value

colors の数値は正でなければならず、planes の数値は非負でなければならない(さもなければ Value エラーが生ずる)。colors の数値を C、planes の数値を P としてリクエストを行った場合、pixels のリスト(配列)には C 個の要素が、masks のリストには P 個のマスクが返る。各マスクのビットは、他のマスクや pixels のいづれのものとも被らない(共通部分を持たない)。masks と pixels の論理和をとることで、C × 2P 個の相異なるピクセルが得られる。ここで得たピクセルは全て、リクエストを通じて書き込み可能である。GrayScale と PseudoColor に対しては、各マスクの中の１つのビットだけが 1 に設定される。DirectColor に対しては、各マスクの中の３つのビットだけが 1 に設定される。contiguous が True であり且つ全てのマスクの論理和をとる場合、GrayScale と PseudoColor に対しては、連続するビット集合が１つ形成され、DirectColor に対しては、連続するビット集合が３つ形成される(ピクセルのサブフィールド１つにつき１つ)。割り当てられたエントリの RGB 値は、定められていない。

## AllocColorPlanes

cmap: COLORMAP
colors, reds, greens, blues: CARD16
contiguous: BOOL
▶
pixels: LISTofCARD32
red-mask, green-mask, blue-mask: CARD32
Errors: Alloc, Colormap, Value

colors の数値は正でなければならず、reds、greens、及び blues の数値は非負でなければならない(さもなければ Value が生ずる)。colors の数値をC、reds の数値を R、greens の数値を G、そして blues の数値を B としてリクエストを行った場合、pixels には C 個の要素が返り、各マスク(３つ)にはそれぞれ R 桁のビット集合(R 桁が 1 に設定されたビット集合)、G 桁のビット集合、B 桁のビット集合が返る。contiguous が True である場合、各マスクは連続するビット集合１つを持つ。各マスクのビットは、他のマスクや pixels のいづれのものとも被らない(共通部分を持たない)。DirectColor に対しては、各マスクは、ピクセルの対応するサブフィールドの部分に収まる。各マスクの部分集合と pixels の論理和をとることで、C × 2 R+G+B 個の相異なるピクセルが得られる。ここで得たピクセルは全て、リクエストを通じて書き込み可能である。割り当てられたエントリの RGB の初期値は定められていない。(上述のピクセル値の個数にも関わらず、) カラーマップには、C × 2 R 個の独立した赤のエントリと、C × 2 G 個の独立した緑のエントリと、C × 2 B 個の独立した青のエントリがあるだけである(訳註：エントリの数は C × 2 R + C × 2 G + C × 2 B)。これは PseudoColor の場合でも同じである。StoreColors や StoreNamedColor を用いて、あるピクセル値に対応するカラーマップのエントリ(の内容)を変更した場合、そのピクセルは３つのマスクに従って分解され、それに対応する独立エントリ(最大３つ)が更新される。

## FreeColors

cmap: COLORMAP
pixels: LISTofCARD32
plane-mask: CARD32
Errors: Access, Colormap, Value

plane-mask のビットは、pixels のいづれのビットとも被らない(共通部分を持たない)ようにする。全てのピクセルの集合は、plane-mask の部分集合(それぞれ)と pixels との論理和をとることによって得られる。このリクエストは、クライアントが(AllocColor、AllocNamedColor、AllocColorCells、及び AllocColorPlanes を使用して)割り当てたそれらのピクセル全てを解放するものである。AllocColorPlanes によって取得したピクセルの中の１個を解放したとしても、同ピクセルに関連したピクセル全てを解放するまでは、実際には同ピクセルを再利用できない可能性があることに注意。同様に、読み込み専用のエントリは、(それを使用している)全てのクライアントによって解放されるまでは、実際には解放されない。また、同一の読み込み専用エントリを複数回割り当てられているクライアントが存在する場合には、クライアントがその回数の分だけ同エントリを解放して初めて実際に同エントリが解放される。

１つ以上のピクセルでエラーが発生した場合でも、クライアントが cmap のカラーマップに割り当てた pixels のピクセルは全て解放される。指定されたピクセルが cmap のカラーマップにおける有効な索引でなかった場合、Value エラーが発生する。指定されたピクセルがクライアントに割り当てられたものでなかった場合(即ち、そもそも割り当てられていないか、他のクライアントが割り当てたにすぎない場合)、あるいは指定されたカラーマップの全エントリが書き込み可能であった場合(CreateColormap で引数 alloc に All を指定して同カラーマップを作成していた場合)には、Access エラーが発生する。２つ以上のピクセルでエラーが発生した場合、どのピクセルについてエラーを報告するのかは任意である。

## StoreColors

cmap: COLORMAP
items: LISTofCOLORITEM
where:
COLORITEM: | [pixel: CARD32
| do-red, do-green, do-blue: BOOL
| red, green, blue: CARD16]
Errors: Access, Colormap, Value

このリクエストは、指定されたピクセルのカラーマップ・エントリを変更するものである(訳註：cmap で指定されたカラーマップの、items 内の pixel で指定されたピクセルのエントリを変更する)。引数 do-red、do-green、及び do-blue は、どの構成要素を実際に変更するのかを表す。指定されたカラーマップが所属するスクリーンに同カラーマップが組み込まれている場合(is an installed map)、変更結果は即座に反映される。

変更作業中に１つ以上のピクセルに関してエラーが発生した場合であっても、items の各 pixel で指定されたピクセルの中、(任意のクライアントによって) 書き込み可能なものとして取得された cmap 内のピクセルは全て、変更される。pixel で指定されたピクセルが cmap のカラーマップにおける有効な索引でない場合、Value エラーが発生する。pixel で指定されたピクセルが割り当てられていない(取得されてない)場合、あるいは読み込み専用のものとして取得されている場合、Access エラーが発生する。２つ以上のピクセルでエラーが発生した場合、どのピクセルについてエラーを報告するのかは任意である。

## StoreNamedColor

cmap: COLORMAP
pixel: CARD32
name: STRING8
do-red, do-green, do-blue: BOOL
Errors: Access, Colormap, Name, Value

このリクエストは、cmap で指定されたカラーマップに対応するスクリーンにおいて name で指定された色を探し出し、同 cmap を用いて StoreColors を実施するものである。name には ISO Latin-1 の符号化方式を使用するものとし、大文字と小文字は区別しない。エラー Access と Value については、StoreColors と同じである。

## QueryColors

cmap: COLORMAP
pixels: LISTofCARD32
▶
colors: LISTofRGB
where:
RGB: [red, green, blue: CARD16]
Errors: Colormap, Value

このリクエストは、cmap のカラーマップに入っているハードウェア固有の色の値の中、pixels で指定されたピクセルに対応する値を返すものである。割り当てられていない(unallocated)エントリを指定した場合に返る値は、定められていない。指定されたピクセルが cmap のカラーマップにおける有効な索引ではなかった場合、Value エラーが発生する。２つ以上のピクセルでエラーが発生した場合、どのピクセルについてエラーを報告するのかは任意である。

## LookupColor

cmap: COLORMAP
name: STRING8
▶
exact-red, exact-green, exact-blue: CARD16
visual-red, visual-green, visual-blue: CARD16
Errors: Colormap, Name

このリクエストは、cmap で指定されたカラーマップに対応するスクリーンにおいて name で指定された名前の色を探し出し、次の２つの値を返すものである。１つはその色の正確な値(RGB 値)であり、もう１つは、ハードウェアが対応している RGB 値の中、cmap のカラーマップのヴィジュアル型を考慮した上で、正確な値に最も近い値である。name には ISO Latin-1 の符号化方式を使用するものとし、大文字と小文字は区別しない。

## CreateCursor

cid: CURSOR
source: PIXMAP
mask: PIXMAP or None
fore-red, fore-green, fore-blue: CARD16
back-red, back-green, back-blue: CARD16
x, y: CARD16
Errors: Alloc, IDChoice, Match, Pixmap

このリクエストは、カーソルを作成し、そのカーソルに識別子 cid を結びつける。サーバが StaticGray のスクリーンと GrayScale のスクリーンにしか対応していない場合であっても、前景と背景の RGB 値を指定しなければならない。前景(の RGB 値)は、source においてビットが 1 になっている箇所に対して使用され、背景(の RGB 値)は、ビットが 0 になっている箇所に対して使用される。source と mask (指定されている場合)は、どちらも深度 1 でなければならない(さもなければ Match エラーが生ずる)が、 source と mask のピクスマップのルートはいづれ(の深さ)のものでも構わない。mask のピクスマップによってカーソルの形状を定義する。即ち、mask において 1 に設定されたビットは、source のどのピクセルを表示すべきかを定義し、mask においてビットが 0 に設定された箇所については、source のピクスマップの同箇所に対応するビットは表示されない(無視される)。mask が指定されていない場合、source の全ピクセルが表示される。mask を指定する場合、そのサイズは source のサイズと同じでなければならない(さもなくば Match エラーを生ずる)。x、y 座標は、ホットスポット(hotspot)の位置を定めるものであり、source の原点を基準としたものである。この座標は source 内の点でなければならない(さもなくば Match エラーを生ずる)。

カーソルの構成要素は、ディスプレイの制約に合うように勝手に変換(transform)される可能性がある。

引数のピクスマップは、この後に明示的に参照する予定がない場合、即座に解放しても構わない。

source と mask のピクスマップへの以降の描画がカーソルに与える影響は未定義である。サーバは、このピクスマップの複製を作成することもあるし、作成しないこともある。

## CreateGlyphCursor

cid: CURSOR
source-font: FONT
mask-font: FONT or None
source-char, mask-char: CARD16
fore-red, fore-green, fore-blue: CARD16
back-red, back-green, back-blue: CARD16
Errors: Alloc, Font, IDChoice, Value

このリクエストは、CreateCursor によく似ているが、(CreateCursor における) source と mask のビットマップを指定されたフォントのグリフ(字形)から得る点が異なっている。source-char は source-font 内の特定のグリフでなければならず、また、mask-font の指定がある場合、mask-char は mask-font 内の特定のグリフでなければならない(さもなければ Value エラーを生ずる)。mask-font のフォントと mask-char の文字は、指定してもしなくてもよい(optional)。source のグリフの原点と mask (マスクの指定があれば)のグリフの原点とが一致するように２つのグリフを配置する。この原点の座標がホットスポット(hotspot)になる。source と mask の境界枠(bounding box)の寸法が同じである必要はなく、この境界枠を基準とした場合のホットスポットの位置取り(相対的な位置)には何ら制約はない。mask-font と mask-char の指定がない場合、source の全てのピクセルが表示される。source-char と mask-char は CARD16 であり、CHAR2B ではないことに注意。２バイトの表(matrix)から成るフォントの場合、１６ビットの値は、第１バイトを最上位バイト、第２バイトを最下位バイトとして形成される。

カーソルの構成要素は、ディスプレイの制約に合うように勝手に変換(transform)される可能性がある。

引数のフォントは、この後に明示的に参照する予定がない場合、即座に解放しても構わない。

## FreeCursor

cursor: CURSOR
Errors: Cursor

このリクエストは、リソース ID とカーソルとの結び付きを削除するものである。カーソルの記憶領域を他のリソースが参照していない場合、同記憶領域は解放される。

## RecolorCursor

cursor: CURSOR
fore-red, fore-green, fore-blue: CARD16
back-red, back-green, back-blue: CARD16
Errors: Cursor

このリクエストは、カーソルの色を変更するものである。指定されたカーソルが現在スクリーン上に表示されている場合、変更結果は直ちに反映される。

## QueryBestSize

class: { Cursor, Tile, Stipple}
drawable: DRAWABLE
width, height: CARD16
▶
width, height: CARD16
Errors: Drawable, Match, Value

このリクエストは、引数で指定したサイズに最も近い「最適なサイズ」を返すものである。class が Cursor である場合、表示可能なサイズ(カーソル全体を表示できなければならない)の中、もっとも大きなものを返す。class が Tile である場合、最も速くタイル(tile)描画できるサイズを返す。class が Stipple である場合、最も速くスティプル描画できるサイズを返す。

Cursor の場合、drawable は使用したいスクリーンを表す。Tile と Stipple の場合、drawable は、スクリーンに加えてウィンドウのクラスと深さをも表す。Tile と Stipple の場合、InputOnly のウィンドウは drawable として使用することができない(使用すると Match エラーを生ずる)。

## QueryExtension

name: STRING8
▶
present: BOOL
major-opcode: CARD8
first-event: CARD8
first-error: CARD8

このリクエストによって、name で指定された拡張機能が存在するか否かを判断することができる。拡張機能が存在し且つその拡張機能に主たる命令コード(major opcode)がある場合、major-opcode にその主命令コードが返る。そうでない場合、0 が返る。従たる命令コード(minor opcode)と拡張リクエストの書式は、拡張機能が独自に定める。拡張機能が追加のイベント型を必要とする場合、first-event に(追加の)イベント型を表す番号(code)の開始点が返る。そうでない場合、0 が返る。追加するイベントの形式は、拡張機能が独自に定める。拡張機能が追加のエラー・コードを必要とする場合、first-error にエラー番号(code)の開始点が返る。そうでない場合、0 が返る。追加エラー内の追加データの形式は、拡張機能が独自に定める。

name で指定する拡張機能の名前には ISO Latin-1 符号化方式を使用し、大文字と小文字を区別する。

## ListExtensions

▶
names: LISTofSTRING8

このリクエストは、サーバが対応している拡張機能全てのリスト(目録)を返すものである。

## SetModifierMapping

keycodes-per-modifier: CARD8
keycodes: LISTofKEYCODE
▶
status: { Success, Busy, Failed}
Errors: Alloc, Value

このリクエストは、修飾キーとして使用されるキーのキーコード(キーコードが存在すれば)を指定するものである。keycodes のリストに入っているキーコードの数は、8 ✕ keycodes-per-modifier 個でなければならない(さもなくば Length エラーを生ずる)。keycodes のキーコードは８つの集合に分割され、各集合には keycodes-per-modifier 個の要素が入る。これらの集合は、順に修飾キー Shift、Lock、Control、Mod1、Mod2、Mod3、Mod4、及び Mod5 に割り当てられる。各集合においては、0 でないキーコード値しか使用できず、0 の値は無視される。0 でないキーコードは全て、接続設定時に受け取った min-keycode と max-keycode で定まる範囲の中になければならない(さもなくば Value エラーを生ずる)。１つの集合の内部におけるキーコードの順序に意味は無い。ある集合において 0 でない値が１つも指定されていなかった場合、対応する修飾キーの使用は禁止され、同修飾キーのビットは常に 0 となる。そうでない場合、ある修飾キーに対応する集合に属するキーが１個以上押された状態になると、常にその修飾キーのビットが 1 になる。

サーバは、どのように修飾キーを変更することができるのかについて制約を設けることができる(例えば、特定のキーが放されたことをハードウェアにおいて検知できない場合、オート・リピート機能を無効にできないキーが存在する場合、あるいは同じ修飾キーとして複数のキーを使用する機能が無い場合)。この制約に抵触した場合、リプライの status は Failed となり、どの修飾キーも変更されない。

ある修飾キーに対して、現在設定されているキーコードとは異なる新たなキーコード(0 でない)が指定され、且つその修飾キーに対応するキー(現在設定されているもの、あるいは新たに指定されたもの)のいづれかが論理的に押された状態にある場合、リプライの status は Busy となり、どの修飾キーも変更されない。

status が Success であれば、このリクエストは MappingNotify イベントを生成する。

## GetModifierMapping

▶
keycodes-per-modifier: CARD8
keycodes: LISTofKEYCODE

このリクエストは、修飾キーとして使用されているキーのキーコードを返すものである。keycodes のリストには 8 ✕ keycodes-per-modifier 個のキーコードが入っている。keycodes のキーコードは８つの集合に分割され、各集合には keycodes-per-modifier 個の要素が入る。これらの集合は、順に修飾キー Shift、Lock、Control、Mod1、Mod2、Mod3、Mod4、及び Mod5 に割り当てられる。keycodes-per-modifier の値はサーバが任意に指定するが、この結果として生じる各集合の中の未使用要素は値 0 を使用して埋められる。ある集合において全ての値が 0 である場合、対応する修飾キーの使用は禁止されている。各集合の中でのキーコードの順序は、サーバが任意に指定する。

## ChangeKeyboardMapping

first-keycode: KEYCODE
keysyms-per-keycode: CARD8
keysyms: LISTofKEYSYM
Errors: Alloc, Value

このリクエストは、first-keycode で指定されたキーコードから始まる、指定された個数のキーコードに対して、キーシンボルを割り当てるものである(訳註：本プロトコルではキーコードの個数は keysyms の要素数と keysyms-per-keycode の値から察するしかないが、「Xlib - C Language X Interface」の XChangeKeyboardMapping() においては、直接個数を指定する引数がある)。この範囲にないキーコードのキーシムは変更されない。keysyms のリストの要素数は、keysyms-per-keycode の倍数でなければならない(さもなくば Length エラーを生ずる)。first-keycode の値は、接続設定時に受け取った min-keycode の値以上でなければならない(さもなくば Value エラーを生ずる)。また、次の式の値は、接続設定時に受け取った max-keycode の値以下でなければならない(さもなくば Value エラーを生ずる)。

    	first-keycode + (keysyms-length / keysyms-per-keycode) - 1

値が K であるキーコードに対する N 番目(先頭は 0 番)の KEYSYM は、keysyms のリストにおいて次の要素番号(先頭は 0 番)を持つ。

    	(K - first-keycode) * keysyms-per-keycode + N

クライアントは、希望するキーシンボル全てを保持するのに十分なサイズとなるように、keysyms-per-keycode に任意の値を指定することができる。NoSymbol は KEYSYM の特別な値であり、各キーコードにおける未使用要素を埋めるために使用される。あるキーコードに対するキーシンボルのリストにおいて、末尾以外の位置に NoSymbol が存在してもかまわない。

このリクエストでは、MappingNotify イベントが発生する。

サーバはこのマッピング(キーコードとキーシンボルとの対応関係)を解釈する必要はない。マッピングは、クライアントが読み書きするためだけに記憶される(第５章を参照)。

## GetKeyboardMapping

first-keycode: KEYCODE
count: CARD8
▶
keysyms-per-keycode: CARD8
keysyms: LISTofKEYSYM
Errors: Value

このリクエストは、first-keycode で指定されたキーコードから始まる、count で指定された個数のキーコードに対応するキーシンボルを返すものである。first-keycode の値は、接続設定時に受け取った min-keycode の値以上でなければならない(さもなくば Value エラーを生ずる)。また、次の式の値は、接続設定時に受け取った max-keycode の値以下でなければならない(さもなくば Value エラーを生ずる)。

    	first-keycode + count - 1

keysyms のリストの要素数は次の通り。

    	count * keysyms-per-keycode

値が K のキーコードに対する N 番目(先頭は 0 番)の KEYSYM は、keysyms のリストにおいて次の要素番号(先頭は 0 番)を持つ。

    	(K - first-keycode) * keysyms-per-keycode + N

サーバは、要求されたシンボル全てを報告するのに十分なサイズとなるように、keysyms-per-keycode に任意の値を指定する。NoSymbol は KEYSYM の特別な値であり、各キーコードにおける未使用要素を埋めるために使用される。

## ChangeKeyboardControl

value-mask: BITMASK
value-list: LISTofVALUE
Errors: Match, Value

このリクエストは、キーボードのさまざまな機構(aspect)を操作するものである。value-mask と value-list によって、どの制御変数(control)を変更するのかを指定する。指定できる値は次の通り。

制御変数(control) | 型
--- | ---
key-click-percent | INT8
bell-percent | INT8
bell-pitch | INT16
bell-duration | INT16
led | CARD8
led-mode | { On, Off }
key | KEYCODE
auto-repeat-mode | { On, Off, Default }

key-click-percent は、可能であれば、キー・クリックの音量を 0 (off) から 100 (大) までの値(境界を含む)で設定するものである。-1 を指定すると、デフォルト設定に戻る。これ以外の負の値を指定すると Value エラーが発生する。

bell-percent は、可能であれば、ベルの基本音量を 0 (off) から 100 (大) までの値(境界を含む)で設定するものである。-1 を指定すると、デフォルト設定に戻る。これ以外の負の値を指定すると Value エラーが発生する。

bell-pitch は、可能であれば、ベルの音の高低を(Hz 単位で)設定するものである。-1 を指定すると、デフォルト設定に戻る。これ以外の負の値を指定すると Value エラーが発生する。

bell-duration は、可能であれば、ベルの音の出力時間を(ミリ秒単位で)設定するものである。-1 を指定すると、デフォルト設定に戻る。これ以外の負の値を指定すると Value エラーが発生する。

led-mode と led の両方を指定すると、可能であれば、指定された LED の状態が変更される。led-mode だけを指定した場合、可能であれば、全ての LED の状態が変更される。最大で 32 個の LED を使用することができる。これらの LED には 1 から順に番号が付いている。LED の解釈は規格では定められていない。led-mode の指定なしに led を指定した場合、Match エラーが発生する。

auto-repeat-mode と key の両方が指定された場合、可能であれば、指定されたキーのオート・リピート・モードが変更される。auto-repeat-mode だけを指定すると、可能であれば、キーボード全体の大域的な(global)オート・リピート・モードが変更される。この時、キーごとのオート・リピート・モードの設定には影響はない。auto-repeat-mode の指定なしに key を指定した場合、Match エラーが発生する。各キーには、オート・リピートすべきか否かに関する個別のモードと、そのモードのデフォルト設定とが存在する。これに加えて、オート・リピートを有効にすべきか否かに関する大域的な(キーボード全体に共通の)モードと、そのモードのデフォルト設定とが存在する。大域的なモードが On である場合、各キーは自身の個別のオート・リピート・モードに従う。大域的なモードが Off である場合、いづれのキーもオート・リピートしない。オート・リピートしているキーは、KeyPress イベントと KeyRelease イベントを交互に発生させる。あるキーが修飾キーとして使用されている場合、そのキーのオート・リピートの設定にかかわらず、同キーはオート・リピートしないようにするのが望ましい。

ベル音出力器は、コンソールに接続されているけれども直接にキーボード上にあるわけではない場合でも、あたかもキーボードの一部であるかのように扱われる。

制御変数を検証し変更する際の順序は、サーバ依存である。エラーが発生した場合、制御変数の一部は変更されてしまっている可能性がある。

## GetKeyboardControl

▶
key-click-percent: CARD8
bell-percent: CARD8
bell-pitch: CARD16
bell-duration: CARD16
led-mask: CARD32
global-auto-repeat: { On, Off}
auto-repeats: LISTofCARD8

このリクエストは、キーボードの現在の制御変数の値を返すものである。LED に関して言うと、led-mask の最下位ビットが 1 番の LED に対応し、led-mask 中の 1 であるビットは対応する LED が点灯していることを表すものである。auto-repeats はビット・ベクトルであり、1 であるビットは、対応するキーに対してオート・リピートが許可されていることを表す。このベクトルは３２バイトで表される。N 番目(先頭は 0 番)のバイトには、8N から 8N + 7 までのキーに対応するビットが入っており、同バイトの最下位ビットが 8N のキーに対応する。

## Bell

percent: INT8
Errors: Value

このリクエストは、可能であれば、キーボードのベルを鳴らすものである。その際には、キーボードの基礎音量に対する相対的な音量を指定する。percent には、-100 から 100 までの範囲(両端を含む)の数値を指定することができる(範囲外の数値を指定すると Value エラーを生ずる)。percent の値が負でない場合、ベルが鳴る音量は次の通り。

    	base - [(base * percent) / 100] + percent

percent が負である場合、音量は次の通り。

    	base + [(base * percent) / 100]

## SetPointerMapping

map: LISTofCARD8
▶
status: { Success, Busy}
Errors: Value

このリクエストは、ポインタのマッピング(物理的なボタンと論理的なボタン番号との対応付け)を設定するものである。map で指定されたリストの要素の要素番号(index)は、1 から始まる。map のリストの長さは、GetPointerMapping で返されるリストの長さと同じでなければならない(さもなくば Value エラーを生ずる)。map のリストの要素番号(index)はコア・ボタン番号(訳註：物理的なボタン番号)であり、同リストの要素が実効番号(訳註：論理的なボタン番号)を定める。

要素の値が 0 であれば、そのボタンは無効化される。要素の(取り得る)値は物理的なボタンの数には制約されないが、２つ以上の要素が同一の値(値 0 は除く)を持つことはできない(さもなくば Value エラーを生ずる)。

変更しようとしたボタンのいづれかが論理的に押された状態であった場合、リプライの status に Busy が返り、マッピングは変更されない。

リプライの status が Success のとき、このリクエストは MappingNotify イベントを発生させる。

## GetPointerMapping

▶
map: LISTofCARD8

このリクエストは、ポインタの現在のマッピング(物理的なボタンと論理的なボタン番号との対応付け)を返すものである。map のリストの要素の要素番号(index)は 1 から始まる。map のリストの長さは、物理的なボタンの数を表す。

ポインタへの名義写像(nominal mapping：訳註：非数値である名義を数値に変換する)は、次の恒等写像である。

      map[i]=i

## ChangePointerControl

do-acceleration, do-threshold: BOOL
acceleration-numerator, acceleration-denominator: INT16
threshold: INT16
Errors: Value

このリクエストは、ポインタがどのように動くのかを定めるものである。acceleration は、移動量に対する乗数であり、acceleration-numerator と acceleration-denominator の値を用いて分数で表される。例えば、acceleration が 3/1 であれば、ポインタは通常よりも３倍速く移動することになる。サーバは、任意にこの分数を丸める(round：整える)ことができる。acceleration (加速倍率)は、ポインタが１度に移動する量が threshold で指定されたピクセル数より多い場合にのみ有効となり、移動量の中の threshold のピクセル数を超えた部分に対してのみ適用される。acceleration-numerator、acceleration-denominator、threshold の値として -1 を指定すると、その引数のデフォルトの値が設定される。(訳註：「Setting a value to -1 restores the default.」については、X11R7.7/xserver/xorg-server-1.12.2/dix/devices.c:2193行目以降を参照。) これ以外の負の値を指定した場合、あるいは acceleration-denominator に 0 を指定した場合、Value エラーが発生する。

## GetPointerControl

▶
acceleration-numerator, acceleration-denominator: CARD16
threshold: CARD16

このリクエストは、ポインタの現在の acceleration (加速倍率：acceleration-numerator と acceleration-denominator を用いて分数で表される)と threshold (加速に必要な移動量：単位はピクセル)を返すものである。

## SetScreenSaver

timeout, interval: INT16
prefer-blanking: { Yes, No, Default}
allow-exposures: { Yes, No, Default}
Errors: Value

timeout と interval は秒単位で指定する。この２つの引数の値に -1 を指定すると、その引数のデフォルトの値が使用される。(訳註：「setting a value to -1 restores the default.」の意味については、X11R7.7/xserver/xorg-server-1.12.2/dix/dispatch.c:3053〜3060 を参照。) これ以外の負の値を指定すると Value エラーが発生する。timeout の値が 0 である場合、スクリーン・セーバは無効化される(けれども、既に起動しているスクリーン・セーバが停止することはない)。timeout の値が 0 でない場合、スクリーン・セーバは有効化される。一度スクリーン・セーバが有効化されると、timeout で指定された秒数の間キーボードやポインタからの入力が無い場合に、スクリーン・セーバが起動される。(1) いづれのスクリーンにおいても、prefer-blanking によってブランキングが希望され、且つハードウェアがビデオ・ブランキングに対応している場合、そのスクリーンは単純にブランク状態となる。(2) そうでない場合であって、allow-exposures によって露出が許可されているかあるいはクライアントに露出イベントを送ることなくスクリーンを再生成できる場合、そのスクリーンは(モニターの)焼き付きを防止するためにサーバ依存の様式で変更されることになる。(3) (1)でも(2)でもない場合、スクリーンの状態は変更されず、スクリーン・セーバは起動されない。キーボードやポインタの次の入力が為された時、あるいは引数 mode を Reset とする次の ForceScreenSaver が実行された時、スクリーン・セーバは停止し、全てのスクリーンの状態は元に戻る。

サーバ依存のスクリーン・セーバ方式が周期的な変更を受け入れられる類のものであれば、interval は変更周期の長さ(の希望)を表すヒントとして機能する。interval の値に 0 を指定すると、周期的な変更が不要であることを示すヒントになる。この種のスクリーン変更方式の例を挙げると、周期的にカラーマップをかき混ぜる方式、スクリーンのあちこちに周期的にアイコン・イメージを移動させる方式、ルート・ウィンドウの背景タイルでスクリーンをタイリングしつつ周期的にタイルの原点の位置をランダムに変更する方式など。

## GetScreenSaver

▶
timeout, interval: CARD16
prefer-blanking: { Yes, No}
allow-exposures: { Yes, No}

このリクエストは、スクリーン・セーバを制御する変数の現在の値を返すものである。

## ForceScreenSaver

mode: { Activate, Reset}
Errors: Value

mode が Activate であり且つスクリーン・セーバが現在停止している場合、(timeout の値に 0 が設定されていてスクリーン・セーバが無効化されている場合であっても)スクリーン・セーバが起動される。mode が Reset であり且つスクリーン・セーバが現在有効化されている場合、スクリーン・セーバは(もし起動していたのであれば)停止し、起動タイマは(まるで今デバイス入力を受け取ったかのように)初期状態へとリセットされる。

## ChangeHosts

mode: { Insert, Delete}
host: HOST
Errors: Access, Value

このリクエストは、host で指定されたホストをアクセス制御リストに追加したり、同リストから削除したりするものである。アクセス制御機構が有効である場合、クライントがサーバへの接続確立を試みるには、同クライアントが存在しているホストがアクセス制御リストに載っているか、あるいは同クライアントがサーバ固有の方法によって(接続の)許可を与えられているかしなければならない。さもなければ、サーバは接続を拒否する。

クライアントがこのリクエストの実行するには、同者がサーバと同じホスト上に存在するか、あるいは(and/or)サーバ固有の方法によって許可を与えられているかしなければならない(さもなくば Access エラーを生ずる)。

アクセス制御リストの初期状態は、通常は設定可能である。この設定は大抵、サーバが起動時とリセット時に読み込むべきファイルの名前を指定することによって行われる。

以下のアドレス・ファミリ(アドレスの種類)が定義されている。サーバは、これらのファミリに必ず対応していなければならないわけではなく、ここに挙がっていないファミリに対応していても構わない。非対応のファミリを使用した場合、あるいは対応しているファミリの中で不適切なアドレス書式や不適切なアドレス長を使用した場合、Value エラーとなる。

Internet ファミリでは、アドレスの長さは４バイトでなければならない。アドレスのバイトの順序は、標準の IP (internet protocol)のものである。サーバは、自動的にアドレス・バイトの順序を交換したりはしない。Internet ファミリでは、IP バージョン４のアドレスしか使用できない。

InternetV6 ファミリでは、アドレスの長さは１６バイトでなければならない。アドレスのバイトの順序は、標準の IP のものである。サーバは、自動的にアドレス・バイトの順序を交換したりはしない。InternetV6 ファミリでは、IP バージョン６のアドレスしか使用できない。

DECnet ファミリでも、サーバは自動的にアドレス・バイトの順序を交換したりはしない。Phase IV アドレスの長さは２バイトである。第１バイトにはノード番号の最下位ビット８桁が入り、第２バイトの最下位の２ビットにはノード番号の最上位ビット２桁が入り、第２バイトの最上位の６ビットにはエリア(area：訳註：ノードのグループ)の情報が入る。

Chaos ファミリでは、アドレスの長さは２バイトでなければならない。第１バイトは常にホスト番号であり、第２バイトは常にサブネット番号である。サーバは、自動的にアドレス・バイトの順序を交換したりはしない。

ServerInterpreted ファミリでは、アドレスの長さは６５５３５バイト以下の任意の長さである。アドレスは ASCII 文字から成る２つの文字列で構成され、この２つの文字列は値が 0 であるバイト１つで区切られている。第１の文字列はアドレスの型(type)を表し、第２の文字列にはアドレスの値が入る。アドレスの型とその型の値の文法(syntax)とは、X.Org Registry に登録されている。実装者の中、実装独自の型を追加したいと考える者は、名前空間における衝突を防ぐため、X.Org registry に唯一無二の接頭辞を登録することができる。

ChangeHosts リクエストでホスト・アドレスを使用することは推奨されない。このやり方が有効なのはホストが被りのない不変な(一定の)アドレスを持っている場合であるが、この要件は、次の事情によってますます満たされ難くなっている。即ち、動的に割り当てられるアドレス、ネットワーク・アドレス変換ゲートウェイ、IPv6 リンク・ローカル・アドレス、その他の様々な技術を各サイトが採用したことによる。また、このやり方は、同一ホストのユーザが皆、同等のアクセス権を持っていることを前提にしているが、これは複数のユーザを持つマシンが多数存在する今の環境にはもはや合っていない。これに代わって、共有秘密や公開鍵暗号に基くような、もっと安全な形式の認証を用いることが推奨される。

## ListHosts

▶
mode: { Enabled, Disabled}
hosts: LISTofHOST

このリクエストは、アクセス制御リストに載っているホスト群と、接続設定の際にこのリストを使用する機能(アクセス制御)が有効になっているか否かとを返すものである。

各ホスト名は、長さが４バイトの倍数になるように詰め物をされる。

## SetAccessControl

mode: { Enable, Disable}
Errors: Access, Value

このリクエストは、接続設定時のアクセス制御リストの利用を有効あるいは無効にするものである。

クライアントがこのリクエストを実行するには、サーバと同じホストの上に存在するか、あるいは(and/or)サーバ固有の方法で許可を与えられているかしなければならない(さもなくば Access エラーを生ずる)。

## SetCloseDownMode

mode: { Destroy, RetainPermanent, RetainTemporary}
Errors: Value

このリクエストは、接続を閉じる(切断する)時にクライアントのリソースをどうするかを定めるものである。各接続の初期状態は、Destroy モードである。close-down モード(接続切断のモード)の役割は、第１０章で説明している。

## KillClient

resource: CARD32 or AllTemporary
Errors: Value

resource に有効なリソースが指定された場合、KillClient は、同リソースを作成したクライアントの接続を強制的に切断する。このクライアントが RetainPermanent モードもしくは RetainTemporary モードで既に終了している場合、同クライアントのリソースは全て破棄される(第１０章を参照)。resource に AllTemporary が指定された場合、RetainTemporary モードで終了している全てのクライアントのリソースを破棄する。

## NoOperation

このリクエストには引数も効果も無い。けれども、リクエストの length フィールド(リクエストの長さを表す)を使うと、このリクエストの長さを４バイトの倍数の任意の長さにすることができる。サーバは、このリクエストに含まれるバイトの内容を解釈しない。

このリクエストは、クライアント・ライブラリが各リクエストを６４ビットの境界から始めたいと考えたとき、もっとも短い４バイトの形を取らせて、詰め物として使用することができる。

## 第１０章　接続の切断

接続を閉じる(close)時、クライアントが行っていたイベント配信選択(event selection)は全て破棄される。クライアントが能動的にポインタを占有している場合、UngrabPointer が実行される。クライアントが能動的にキーボードを占有している場合、UngrabKeyboard が実行される。クライアントによる受動的占有は全て解放される。クライアントがサーバを占有している場合、UngrabServer が実行される。クライアントが所有しているセレクション(SetSelectionOwner リクエストの項を見よ)は全て、所有されていない状態になる。close-down モード(SetCloseDownMode リクエストの項を見よ)が RetainPermanent もしくは RetainTemporary である場合、クライアントが作った(allocate)全てのリソース(カラーマップのエントリを含む)は、それぞれ「永久的」もしくは「一時的」なものとして印を付されることになる(但し、他のクライアントが明示的にこれらのリソースを破棄することは妨げられない)。close-down モードが Destroy である場合、クライアントのリソースは全て破棄される。

クライアントのリソースが破棄された場合、同クライアントのセーブ・セット(訳註：「用語集」参照)に入っているウィンドウのそれぞれに対して次の処理が行われる。即ち、セーブ・セット・ウィンドウが先述のクライアントの作ったウィンドウの子孫である場合、同セーブ・セット・ウィンドウの親を最も近い祖先に変更し、リソース破棄クライアントが作成したウィンドウの子孫でなくなるようにする。セーブ・セット・ウィンドウがアンマップされている場合、MapWindow リクエストを同ウィンドウに対して実行する(同ウィンドウがリソース破棄クライアントの作成したウィンドウの子孫でない場合であっても実行する)。親変更を行ってもセーブ・セット・ウィンドウの外側左上隅の絶対座標(ルート・ウィンドウの座標系のもの)は変わらない。このセーブ・セットの処理の後、リソース破棄クライアントが作成したウィンドウは全て破棄される。同クライアントが作成した「ウィンドウ以外」のリソースのそれぞれに対して、適当な Free リクエストが実行される。同クライアントが作成した(allocate)色とカラーマップ・エントリは全て解放される。

サーバには接続を持っている状態と全く持っていない状態があり、サーバはこの２つの状態の間を行き来する。サーバは、close-down モードが Destroy である接続切断によって接続を持っていない状態へと移行する度に、あたかも起動直後であるかのように自身の状態をリセットする。これは先ず、RetainPermanent モードもしくは RetainTemporary モードで終了済みのクライアントの残存リソースを全て破棄することから始まる。次いで、既定のアトムの識別子を除く全てのアトム識別子を削除し、全ルート・ウィンドウの全プロパティを削除し、装置のマッピングと属性(キー・クリック、ベルの音量、ポインタの加速倍率(acceleration))を全てリセットし、アクセス制御リストをリセットし、標準のルート・タイルとカーソルに戻し、デフォルトのフォント経路に戻し、入力フォーカスを PointerRoot モードに戻す。

close-down モードが RetainPermanent もしくは RetainTemporary である場合、接続を切断してもサーバのリセットは起きない。

## 第１１章　イベント

ウィンドウ W にポインタが存在する状態でボタンの押下の処理が行われたときは、有効な能動的占有が存在しなければ、ルートから順に下へ向かって W の祖先を捜索し、能動化すべき受動的占有がないかを調べる。そのボタンについて該当する受動的占有が(祖先ウィンドウの中に)発見されなかった場合、イベント(訳註：ボタン押下のイベント)を受けとったクライアントによる能動的占有が自動的に開始され、最終ポインタ占有時刻(last-pointer-grab time)は現在のサーバ時刻に設定される。これは、下記のように引数を指定して GrabButton を実行したのと実質的に同じ結果になる。

引数 | 値
--- | ---
event-window | ボタン・イベントが発生したウィンドウ
event-mask | クライアントがイベント発生ウィンドウに対して選択していたポインタ・イベント
pointer-mode 及び keyboard-mode | Asynchronous
owner-events | クライアントがイベント発生ウィンドウに対して OwnerGrabButton を選択していた場合は True、それ以外の場合は False。
confine-to | None
cursor | None

ポインタの論理的な状態が「全てのボタンが放されている(押されていない)」状態になったとき、占有は自動的に終了する。UngrabPointer と ChangeActivePointerGrab は、どちらも能動的占有に変更を加えるために使用できるものである。

## 入力デバイスのイベント

KeyPress
KeyRelease
ButtonPress
ButtonRelease
MotionNotify
root, event: WINDOW
child: WINDOW or None
same-screen: BOOL
root-x, root-y, event-x, event-y: INT16
detail: <下で説明>
state: SETofKEYBUTMASK
time: TIMESTAMP

これらのイベントは、キーやボタンの状態が論理的に変わったとき、あるいはポインタが論理的に移動したときに発生する。これらの論理的な変更の発生は、デバイスのイベントの処理が凍結されている場合には、物理的な変更よりも遅れる可能性がある。KeyPress と KeyRelease は全てのキーに対して生成される。これは、修飾キーのビットに対応付けられているキーであっても例外ではない。イベントの「ソース」は、ポインタが(中に)あるウィンドウである。あるウィンドウを対象としてイベントが報告される場合、そのウィンドウのことをイベント・ウィンドウと呼ぶ。イベント・ウィンドウは次のように決定(発見)される。即ち、クライアントがそのイベントを選択していたウィンドウの中、ソース・ウィンドウからウィンドウの階層を上に辿って行って最初に見つかったものがイベント・ウィンドウになる(但し、間に存在するウィンドウの中に、do-not-propagate-mask に当該イベント型を含んでいて同イベントの生成を禁止しているウィンドウが存在しないことが条件である)。報告に使われる実際のウィンドウは、能動的占有の効果を受けて変更され得る。また、キーボード・イベントの場合、同ウィンドウはフォーカス・ウィンドウの影響でも変更され得る。

root は、ソース・ウィンドウのルート・ウィンドウである。root-x と root-y は、イベント発生時のポインタの座標であり、ルートの原点を基準としたものである。event はイベント・ウィンドウである。イベント・ウィンドウがルートと同じスクリーンの上に存在する場合、event-x と event-y は、イベント・ウィンドウの原点を基準としたポインタの座標となる。そうでない場合、event-x と event-y の値は 0 になる。ソース・ウィンドウがイベント・ウィンドウの子孫である場合、child にはイベント・ウィンドウの子が設定される。この子は、ソース・ウィンドウの祖先である場合もあるし、ソース・ウィンドウ自身である場合もある。ソース・ウィンドウがイベント・ウィンドウの子孫でない場合、child には None が設定される。state の構成要素(中身)は、イベント発生直前におけるボタンと修飾キーの論理的な状態である。detail の構成要素の型は、下表のようにイベントの型によって異なるものとなる。

イベントの型 | 構成要素の型
--- | ---
KeyPress, KeyRelease | KEYCODE
ButtonPress, ButtonRelease | BUTTON
MotionNotify | { Normal Hint }

MotionNotify イベントは、動作がウィンドウ内で始まりウィンドウ内で終わったときに限って生成される。動作イベントの粒度(granularity)について特に保証は無いが、動作イベントを選択しているクライアントは、ポインタが移動し且つ止まったとき、イベントを少なくとも１つ受け取ることが保証されている。PointerMotion を選択すると、ポインタのボタンの状態に関わらずイベントを受け取ることができる。代わりに Button[1-5]Motion の部分集合(訳註：Button1Motion、Button2Motion、Button3Motion、Button4Motion、Button5Motion の特定の組み合わせ)を選択した場合、指定されたボタンの中の１つ以上が押されたときだけ MotionNotify イベントを受け取ることになる。ButtonMotion を選択すると、１つ以上のボタンが押されたときに限って MotionNotify イベントを受け取ることになる。いづれのイベントマスクを選択したかに関わらず、イベントの型は常に MotionNotify である。PointerMotionHint を選択した場合、サーバは、キーやボタンの状態が変化するか、ポインタがイベント・ウィンドウを離れるか、もしくはクライントが QueryPointer リクエストや GetMotionEvents リクエストを発行するかするまでの間は、クライアントに対して、イベント・ウィンドウに関する MotionNotify イベント(detail は Hint)を１つしか送らずに済ませることができる。

## ポインタのウィンドウ・イベント

EnterNotify
LeaveNotify
root, event: WINDOW
child: WINDOW or None
same-screen: BOOL
root-x, root-y, event-x, event-y: INT16
mode: { Normal, Grab, Ungrab}
detail: { Ancestor, Virtual, Inferior, Nonlinear, NonlinearVirtual}
focus: BOOL
state: SETofKEYBUTMASK
time: TIMESTAMP

ポインタが移動したりウィンドウの階層が変更したりした結果、ポインタの存在するウィンドウがそれまでとは異なるものになった場合、MotionNotify イベントではなく、EnterNotify イベントと LeaveNotify イベントが発生する。ウィンドウに対して EnterWindow を選択しているクライアントだけが EnterNotify イベントを受信し、LeaveWindow を選択しているクライアントだけが LeaveNotify イベントを受信する。イベントで報告されるポインタの位置は常に、ポインタの初期位置ではなく最終位置である。root は、この最終位置が属するルート・ウィンドウである。root-x と root-y は、ルートの原点を基準とした、イベント発生時のポインタの座標である。event はイベント・ウィンドウである。イベント・ウィンドウが root のルートと同じスクリーンンの上にある場合、event-x と event-y には、イベント・ウィンドウの原点を基準としたポインタの座標が入る。そうでない場合、event-x と event-y の値は 0 である。LeaveNotify イベントでは、ポインタの初期位置がイベント・ウィンドウの子の中に含まれている場合、その子が child の構成要素として設定される。そうでない場合、child は None である。EnterNotify イベントでは、ポインタの最終位置がイベント・ウィンドウの子の中に含まれている場合、その子が child の構成要素として設定される。そうでない場合、child は None である。イベント・ウィンドウがフォーカス・ウィンドウであるかもしくはフォーカス・ウィンドウの子孫である場合、focus は True である。そうでない場合、focus は False である。

通常のポインタ動作イベントの場合、mode の値は Normal である。占有が能動化するときの疑似動作イベントの場合、mode は Grab であり、占有が解除される(deactivate)ときの疑似動作イベントの場合、mode は Ungrab である。

階層変更によって引き起こされる EnterNotify イベントと LeaveNotify イベントは全て、その階層変更によって引き起こされる階層イベントの後に発生する(即ち、UnmapNotify、MapNotify、ConfigureNotify、GravityNotify、CirculateNotify の後である)。但し、EnterNotify イベント及び LeaveNotify イベントと、FocusOut イベント、VisibilityNotify イベント及び Expose イベントとの間には、順序関係の制約は無い。

mode が Normal である場合、イベントは以下のように発生する。

ポインタがウィンドウ A からウィンドウ B へと移動し、A が B の子孫であるとき、

- ウィンドウ A に対して、detail の値が Ancestor である LeaveNotify イベントが発生する。

- ウィンドウ階層に関して A と B の間にある各ウィンドウ(A と B は除く)に対して、A から B へと向かう順序で、detail の値が Virtual である LeaveNotify イベントが発生する。

- ウィンドウ B に対して、detail の値が Inferior である EnterNotify イベントが発生する。

ポインタがウィンドウ A からウィンドウ B へと移動し、B が A の子孫であるとき、

- ウィンドウ A に対して、detail の値が Inferior である LeaveNotify イベントが発生する。

- ウィンドウ階層に関して A と B の間にある各ウィンドウ(A と B は除く)に対して、A から B へと向かう順序で、detail の値が Virtual である EnterNotify イベントが発生する。

- ウィンドウ B に対して、detail の値が Ancestor である EnterNotify イベントが発生する。

ポインタがウィンドウ A からウィンドウ B へと移動し、ウィンドウ C が両ウィンドウの最下位の共通祖先であるとき、

- ウィンドウ A に対して、detail の値が Nonlinear である LeaveNotify イベントが発生する。

- ウィンドウ階層に関して A と C の間にある各ウィンドウ(A と C は除く)に対して、A から C へと向かう順序で、detail の値が NonlinearVirtual である LeaveNotify イベントが発生する。

- ウィンドウ階層に関して C と B の間にある各ウィンドウ(C と B は除く)に対して、C から B へと向かう順序で、detail の値が NonlinearVirtual である EnterNotify イベントが発生する。

- ウィンドウ B に対して、detail の値が Nonlinear である EnterNotify イベントが発生する。

ポインタがウィンドウ A からウィンドウ B へと移動し、両ウィンドウがスクリーンを異にするとき、

- ウィンドウ A に対して、detail の値が Nonlinear である LeaveNotify イベントが発生する。

- A がルート・ウィンドウでない場合、A の親からルート・ウィンドウへ至るまでの各祖先ウィンドウ(ルートも含む)に対して、A からルートへと向かう順序で、detail の値が NonlinearVirtual である LeaveNotify イベントが発生する。

- B がルート・ウィンドウでない場合、B のルートから下って行って B へ至るまでの各ウィンドウ(B は含まない)に対して、ルートから B へと向かう順序で、detail の値が NonlinearVirtual である EnterNotify イベントが発生する。

- ウィンドウ B に対して、detail の値が Nonlinear である EnterNotify イベントが発生する。

ポインタの占有が能動化されたとき(但し、confine-to のウィンドウへの初期転移の後、且つその占有を能動化する実際の ButtonPress イベントが発生する前の時点)、その占有の grab-window のウィンドウを G とし、ポインタがあるウィンドウを P とすると、イベントは次のように発生する。

- あたかもポインタが P の中の現在の位置から G の中のある位置へ突然転移して来たかのように、mode の値が Grab である EnterNotify イベントと LeaveNotify イベントが(上記の Normal の場合と同じように)発生する。もっとも、実際にはポインタは転移しておらず、これらのイベントにおいては、ポインタの(現在の)位置は初期位置及び最終位置の両方として使用される。

ポインタの占有が解除(deactivate)されたとき(但し、占有を解除する実際の ButtonRelease イベントが発生した後の時点)、その占有の grab-window を G とし、ポインタがあるウィンドウを P とすると、イベントは次のように発生する。

- あたかもポインタが G の中のある位置から P の中の現在の位置へ突然転移して来たかのように、mode の値が Ungrab である EnterNotify イベントと LeaveNotify イベントが(上記の Normal の場合と同じように)発生する。もっとも、実際にはポインタは転移しておらず、これらのイベントにおいては、ポインタの現在の位置は初期位置及び最終位置の両方として使用される。

## 入力フォーカスのイベント

FocusIn
FocusOut
event: WINDOW
mode: { Normal, WhileGrabbed, Grab, Ungrab}
detail: { Ancestor, Virtual, Inferior, Nonlinear, NonlinearVirtual, Pointer, PointerRoot, None }

この２つのイベントは、入力フォーカスが変更されたときに発生し、event のウィンドウに対して FocusChange を選択していたクライアントへ報告されるものである。キーボードが占有されていないときに SetInputFocus によって生成されるイベントの場合、mode の値は Normal である。キーボードが占有されているときに SetInputFocus によって生成されるイベントの場合、mode の値は WhileGrabbed である。キーボードの占有が能動化したときに生成されるイベントの場合、mode の値は Grab である。キーボードの占有が解除された(deactivate)ときに生成されるイベントの場合、mode の値は Ungrab である。

ウィンドウのアンマップによって引き起こされる FocusOut イベントは全て、UnmapNotify イベントの後に発生する。但し、FocusOut と、同じ理由で発生したイベント EnterNotify、LeaveNotify、VisibilityNotify、及び Expose との間には、順序関係の制約は無い。

mode の値が Normal あるいは WhileGrabbed であるイベントは、以下のように発生する。

フォーカスがウィンドウ A からウィンドウ B へ移り、A が B の子孫であり、ポインタがウィンドウ P にあるとき、

- ウィンドウ A に対して、detail の値が Ancestor である FocusOut イベントが発生する。

- ウィンドウの階層に関して A と B の間にある各ウィンドウ(A と B は除く)に対して、A から B へと向かう順序で、detail の値が Virtual である FocusOut イベントが発生する。

- ウィンドウ B に対して、detail の値が Inferior である FocusIn イベントが発生する。

- P が B の子孫であり、且つ P が A ではなく A の子孫でもなく A の祖先でもない場合、B の子から P へ至るまでの各子孫ウィンドウ(P を含む)に対して、B から P へと向かう順序で、detail の値が Pointer である FocusIn イベントが発生する。

フォーカスがウィンドウ A からウィンドウ B へ移り、B が A の子孫であり、ポインタがウィンドウ P にあるとき、

- P が A の子孫であり、且つ P が B の子孫ではなく B の祖先でもない場合、P から遡って A に至るまでの各ウィンドウ(P を含み A は含まない)に対して、P から A へと向かう順序で、detail の値が Pointer である FocusOut イベントが発生する。

- ウィンドウ A に対して、detail の値が Inferior である FocusOut イベントが発生する。

- ウィンドウ階層に関して A と B の間にある各ウィンドウ(A と B は除く)に対して、A から B へと向かう順序で、detail の値が Virtual である FocusIn イベントが発生する。

- ウィンドウ B に対して、detail の値が Ancestor である FocusIn イベントが発生する。

フォーカスがウィンドウ A からウィンドウ B へ移り、ウィンドウ C が両ウィンドウの最下位の共通祖先であり、ポインタがウィンドウ P にあるとき、

- P が A の子孫である場合、P から遡って A に至るまでの各ウィンドウ(P を含み A は含まない)に対して、P から A へと向かう順序で、detail の値が Pointer である FocusOut イベントが発生する。

- ウィンドウ A に対して、detail の値が Nonlinear である FocusOut イベントが発生する。

- ウィンドウ階層に関して A と C の間にある各ウィンドウ(A と C は除く)に対して、A から C へと向かう順序で、detail の値が NonlinearVirtual である FocusOut イベントが発生する。

- ウィンドウ階層に関して C と B の間にある各ウィンドウ(C と B は除く)に対して、C から B へと向かう順序で、detail の値が NonlinearVirtual である FocusIn イベントが発生する。

- ウィンドウ B に対して、detail の値が Nonlinear である FocusIn イベントが発生する。

- P が B の子孫である場合、B から下って行って P に至るまでの各ウィンドウ(B は除き P を含む)に対して、B から P へと向かう順序で、detail の値が Pointer である FocusIn イベントが発生する。

フォーカスがウィンドウ A からウィンドウ B へと移り、両ウィンドウがスクリーンを異にし、ポインタがウィンドウ P にあるとき、

- P が A の子孫である場合、P から遡って A へと至るまでの各ウィンドウ(P は含み A は除く)に対して、P から A へと向かう順序で、detail の値が Pointer である FocusOut イベントが発生する。

- ウィンドウ A に対して、detail の値が Nonlinear である FocusOut イベントが発生する。

- A がルート・ウィンドウでない場合、A の親からルートへ至るまでの各祖先ウィンドウ(ルートも含む)に対して、A からルートへ向かう順序で、detail の値が NonlinearVirtual である FocusOut イベントが発生する。

- B がルート・ウィンドウでない場合、B のルートから下って行って B へ至るまでの各ウィンドウ(ルートを含み B は除く)に対して、ルートから B へ向かう順序で、detail の値が NonlinearVirtual である FocusIn イベントが発生する。

- ウィンドウ B に対して、detail の値が Nonlinear である FocusIn イベントが発生する。

- P が B の子孫である場合、B の子から P へ至るまでの各子孫ウィンドウ(P も含む)に対して、B から P へと向かう順序で、detail の値が Pointer である FocusIn イベントが発生する。

フォーカスがウィンドウ A から PointerRoot (あるいは None)へ移り、且つポインタがウィンドウ P にあるとき、

- P が A の子孫である場合、P から遡って A へ到るまでの各ウィンドウ(P を含み A は除く)に対して、P から A へ向かう順序で、detail の値が Pointer である FocusOut イベントが発生する。

- ウィンドウ A に対して、detail の値が Nonlinear である FocusOut イベントが発生する。

- A がルート・ウィンドウでない場合、A の親からルートへ至るまでの各祖先ウィンドウ(ルートを含む)に対して、A からルートへ向かう順序で、detail の値が NonlinearVirtual である FocusOut イベントが発生する。

- ルート・ウィンドウ全てに対して、detail の値が PointerRoot (あるいは None)である FocusIn イベントが発生する。

- 新たなフォーカスが PointerRoot である場合、P のルートから下って行って P へ至るまでの各ウィンドウ(ルートも P も含む)に対して、ルートから P へ向かう順序で、detail の値が Pointer である FocusIn イベントが発生する。

フォーカスが PointerRoot (あるいは None)からウィンドウ A へ移り、ポインタがウィンドウ P にあるとき、

- 旧いフォーカスが PointerRoot であった場合、P から遡って P のルートへ至るまでの各ウィンドウ(P とルートを含む)に対して、P からルートへ向かう順序で、detail の値が Pointer である FocusOut イベントが発生する。

- ルート・ウィンドウ全てに対して、detail の値が PointerRoot (あるいは None)である FocusOut イベントが発生する。

- A がルート・ウィンドウでない場合、A のルートから下って行って A に至るまでの各ウィンドウ(A は除く)に対して、ルートから A へ向かう順序で、detail の値が NonlinearVirtual である FocusIn イベントが発生する。

- ウィンドウ A に対して、detail の値が Nonlinear である FocusIn イベントが発生する。

- P が A の子孫である場合、A の子から P へ至るまでの各子孫ウィンドウ(P を含む)に対して、A から P へ向かう順序で、detail の値が Pointer である FocusIn イベントが発生する。

フォーカスが PointerRoot から None へ(あるいは None から PointerRoot へ)移り、ポインタがウィンドウ P にあるとき、

- 旧いフォーカスが PointerRoot である場合、P から遡って P のルートへ至るまでの各ウィンドウ(P とルートを含む)に対して、P からルートへ向かう順序で、detail の値が Pointer である FocusOut イベントが発生する。

- ルート・ウィンドウ全てに対して、detail の値が PointerRoot (あるいは None)である FocusOut イベントが発生する。

- ルート・ウィンドウ全てに対して、detail の値が None (あるいは PointerRoot)である FocusIn イベントが発生する。

- 新たなフォーカスが PointerRoot である場合、P のルートから下って行って P に至るまでの各ウィンドウ(ルートと P を含む)に対して、ルートから P へと向かう順序で、detail の値が Pointer である FocusIn イベントが発生する。

キーボードの占有が能動化されたとき(占有を能動化する実際の KeyPress イベントが発生する前の時点で)、この占有の grab-window のウィンドウを G とし、現在のフォーカスを F とすると、イベントは次のように発生する。

- 即ち、あたかもフォーカスが F から G へ変更されたかのように、mode の値が Grab である FocusIn イベントと FocusOut イベントとが(上で述べた mode が Normal の場合と同じ仕方で)発生する。

キーボードの占有が解除されたとき(占有を解除する実際の KeyRelease イベントが発生した後の時点で)、この占有の grab-window を G とし、現在のフォーカスを F とすると、イベントは次のように発生する。

- あたかもフォーカスが G から F へと変更されたかのように、mode の値が Ungrab である FocusIn イベントと FocusOut イベントとが(上で述べた mode が Normal の場合と同じ仕方で)発生する。

## KeymapNotify

KeymapNotify
keys: LISTofCARD8

keys の値は、QueryKeymap の項で説明したビット・ベクトルである。このイベントは、ウィンドウに対して KeymapState を選択しているクライアントへ報告されるものであり、EnterNotify イベント及び FocusIn イベントが発生する度、即座に発生する。

## Expose

Expose
window: WINDOW
x, y, width, height: CARD16
count: CARD16

このイベントは、window のウィンドウに対して Exposure を選択しているクライアントに報告されるものである。このイベントが発生するのは、ウィンドウの領域として使用できる有効な内容が存在せず、且つ次の３ついづれかが成立するときである。即ち、(1)同領域が可視である場合、(2)同領域が表示可能であり且つサーバが同ウィンドウのバッキング・ストアを保持している(おそらくは新たに保持することになった)場合、(3)あるいは同ウィンドウは表示可能でないものの、サーバが同ウィンドウの backing-store 属性として Always や WhenMapped を受け取っている(おそらくは新たに受け取った)場合である。領域は任意の個数の矩形に分割され、各矩形に対して１つづつ Expose イベントが発生する。

(複数の)露出イベントを引き起こす動作が１つあった場合、特定の(１つの)ウィンドウに関するイベント群は必ず連続して報告される。count の値が 0 である場合、そのウィンドウに対する後続の Expose イベントは存在しない。count が 0 でない場合、少なくとも count の値の数だけそのウィンドウに対する後続の Expose イベントが存在する(もっとある可能性あり)。

x、y 座標は、window のウィンドウの原点を基準としたものであり、矩形の左上隅を表す。width 及び height は、矩形の寸法を表す。

Expose イベントは、InputOnly ウィンドウでは決して発生しない。

階層の変更によって起きる Expose イベントは全て、その変更によって起きる階層イベント(hierarchy event)の後に発生する(階層イベントの例は、UnmapNotify、MapNotify、ConfigureNotify、GravityNotify、CirculateNotify である)。あるウィンドウに対する Expose イベントは全て、同ウィンドウに対する VisibilityNotify イベントの後に発生する。けれども、全てのウィンドウに対する全ての Expose イベントが、全てのウィンドウに対する Visibilitity イベントの後に発生しなければならない、というわけではない。FocusOut、EnterNotify、及び LeaveNotify の各イベントと Expose イベントとの間には、順序関係の制約は無い。

## GraphicsExposure

GraphicsExposure
drawable: DRAWABLE
x, y, width, height: CARD16
count: CARD16
major-opcode: CARD8
minor-opcode: CARD16

このイベントは、graphics-exposures の値が True であるグラフィクス・コンテクストを使用しているクライアントに対して報告されるものである。また、このイベントは、ソース領域の一部が隠れていたり境界外だったりするために、デスティネーション領域に計算できない部分がある場合に発生するものである。１つのグラフィクス・リクエストで露出される領域群は全て、連続して報告されることが保証されている。count の値が 0 であれば、このウィンドウに対する後続の GraphicsExposure イベントは存在しない。count の値が 0 でない場合、少なくとも count の値の数だけこのウィンドウに対する後続の GraphicsExposure イベントが存在する(もっとある可能性あり)。

x、y の座標は、drawable のドローアブルの原点を基準としたものであり、矩形の左上隅を表す。width と height は矩形の寸法を表す。

major-opcode と minor-opcode によって、使用されたグラフィクス・リクエストを識別する。コア・プロトコル(本プロトコル)においては、major-opcode は常に CopyArea か CopyPlane のどちらかを表す値であり、minor-opcode の値は常に 0 である。

## NoExposure

NoExposure
drawable: DRAWABLE
major-opcode: CARD8
minor-opcode: CARD16

このイベントは、graphics-exposures の値が True であるグラフィクス・コンテクストを使用しているクライアントに報告されるものであり、GraphicsExposure イベントを生成する可能性のあるグラフィクス・リクエストが同イベントを生成しない場合に発生するものである。drawable には、グラフィクス・リクエストで使用されたデスティネーションが入る。

major-opcode と minor-opcode によって、使用されたグラフィクス・リクエストを識別する。コア・プロトコル(本プロトコル)においては、major-opcode は常に CopyArea か CopyPlane のどちらかを表す値であり、minor-opcode の値は常に 0 である。

## VisibilityNotify

VisibilityNotify
window: WINDOW
state: { Unobscured, PartiallyObscured, FullyObscured}

このイベントは、window のウィンドウに対して VisibilityChange を選択していたクライアントに報告されるものである。以下の説明においては、ウィンドウの状態は、同ウィンドウの下位ウィンドウ全てを無視して算出される。このイベントが state の値を Unobscured として発生するのは、ウィンドウの状態が「部分的に隠されている」状態または「完全に隠されている」状態または「表示可能でない」状態から「表示可能で全く隠されていない」状態へと変化した場合である。このイベントが state の値を PartiallyObscured として発生するのは、ウィンドウの状態が「表示可能で全く隠されていない」状態または「表示可能で完全に隠されている」状態または「表示可能でない」状態から「表示可能で部分的に隠されている」状態へと変化した場合である。このイベントが state の値を FullyObscured として発生するのは、ウィンドウの状態が「表示可能で全く隠されていない」状態または「表示可能で部分的に隠されている」状態または「表示可能でない」状態から「表示可能で完全に隠されている」状態へと変化した場合である。

VisibilityNotify イベントは、InputOnly のウィンドウに対して発生することはない。

ウィンドウ階層の変更によって生じる VisibilityNotify イベントは全て、同変更によって生じる階層イベントの後に発生する(例えば、UnmapNotify、MapNotify、ConfigureNotify、GravityNotify、CirculateNotify の後)。あるウィンドウに対する VisibilityNotify イベントは同ウィンドウに対する Expose イベントより先に発生する。けれども、全てのウィンドウに対する全ての VisibilityNotify イベントが、全てのウィンドウに対する全ての Expose イベントよりも先に発生しなければならないわけではない。VisibilityNotify イベントと、FocusOut イベント、EnterNotify イベント、及び LeaveNotify イベントとの間には、順序関係の制約は無い。

## CreateNotify

CreateNotify
parent, window: WINDOW
x, y: INT16
width, height, border-width: CARD16
override-redirect: BOOL

このイベントは、parent のウィンドウに対して SubstructureNotify を選択しているクライアントに報告されるものであり、window のウィンドウが作成されたときに発生するものである。引数(イベントの各フィールド)は、CreateWindow リクエストにおけるものと同じである。

## DestroyNotify

DestroyNotify
event, window: WINDOW

このイベントは、window のウィンドウに対して StructureNotify を選択しているクライアントと、同ウィンドウの親に対して SubstructureNotify を選択しているクライアントに対して報告されるものである。このイベントが発生するのは、window のウィンドウが破棄されたときである。event には、このイベントが発生したウィンドウが入る(訳註：破棄されたウィンドウもしくはその親ウィンドウ)。window には、破棄されたウィンドウが入る。

DestroyNotify イベントの発生順序について述べると、各ウィンドウにおいて、先ずそのウィンドウの全ての子孫に関するイベントが発生し、その後に同ウィンドウ自身に関するものが発生する。兄弟間や、下位階層を跨いだ(訳註：従兄弟・再従兄弟のような)ウィンドウの間には、イベントの発生順序に対してこれ以外の制約は無い。

## UnmapNotify

UnmapNotify
event, window: WINDOW
from-configure: BOOL

このイベントは、window のウィンドウに対して StructureNotify を選択しているクライアントと、同ウィンドウの親に対して SubstructureNotify を選択しているクライアントに対して報告されるものである。このイベントが発生するのは、window のウィンドウが「マップされている」状態から「アンマップされている」状態へ変わったときである。event には、このイベントが発生したウィンドウが入る(アンマップされたウィンドウもしくはその親ウィンドウであり、X サーバはここにイベントを送る)。window には、アンマップされたウィンドウが入る。アンマップされたウィンドウの win-gravity が Unmap であり、同ウィンドウの親のサイズが変更された結果としてこのイベントが発生した場合、from-configure フラグが True になる。

## MapNotify

MapNotify
event, window: WINDOW
override-redirect: BOOL

このイベントは、window のウィンドウに対して StructureNotify を選択しているクライアントと、同ウィンドウの親に対して SubstructureNotify を選択しているクライアントに対して報告されるものである。このイベントが発生するのは、window のウィンドウが「アンマップされている」状態から「マップされている」状態へ変わったときである。event には、このイベントが発生したウィンドウが入る。window には、マップされたウィンドウが入る。override-redirect フラグは、window のウィンドウの属性から取ったものである。

## MapRequest

MapRequest
parent, window: WINDOW

このイベントは、parent のウィンドウに対して SubstructureRedirect を選択しているクライアントに報告されるものである。このイベントが発生するのは、アンマップ状態にあり override-redirect 属性が False であるウィンドウ(window のウィンドウ)に対して MapWindow リクエストが発行されたときである。(訳註：通常、このイベントを受け取るのはウィンドウ・マネージャである。)

## ReparentNotify

ReparentNotify
event, window, parent: WINDOW
x, y: INT16
override-redirect: BOOL

このイベントは、window のウィンドウの古い親もしくは新しい親に対して SubstructureNotify を選択しているクライアント、または window のウィンドウに対して StructureNotify を選択しているクライアントに報告されるものである。このイベントが発生するのは、window のウィンドウの親が変更されたときである。event には、このイベントが発生したウィンドウが入る(訳註：親変更されたウィンドウ若しくはその古い親若しくはその新しい親)。window には、親を変更されたウィンドウが入る。parent には新しい親が入る。x、y 座標は、新しい親の原点を基準としたものであり、親変更されたウィンドウの外側左上隅の位置を表す。override-redirect フラグは、親変更されたウィンドウ(window のウィンドウ)の属性から取ったものである。

## ConfigureNotify

ConfigureNotify
event, window: WINDOW
x, y: INT16
width, height, border-width: CARD16
above-sibling: WINDOW or None
override-redirect: BOOL

このイベントは、window のウィンドウに対して StructureNotify を選択していたクライアントと、同ウィンドウの親に対して SubstructureNotify を選択していたクライアントに報告されるものである。このイベントが発生するは、ConfigureWindow によって実際に window のウィンドウの状態が変わったときである。event には、イベントが発生したウィンドウが入る(再構成されたウィンドウもしくはその親)。window には、変更された(再構成された)ウィンドウが入る。x、y 座標は、新しい親の原点を基準としたものであり、window のウィンドウの外側左上隅の位置を表す。width と height は、ウィンドウの内側のサイズを表し、ボーダ(枠)は含まない。above-sibling が None である場合、再構成されたウィンドウは、兄弟間(全兄弟)の重ね順において、最も下(後ろ)に配置される。そうでない場合、同ウィンドウは above-sibling で指定された兄弟のすぐ上(前)に配置される。override-redirect フラグは、window のウィンドウの属性から取ったものである。

## GravityNotify

GravityNotify
event, window: WINDOW
x, y: INT16

このイベントは、window のウィンドウに対して StructureNotify を選択しているクライアントと、同ウィンドウの親に対して SubstructureNotify を選択しているクライアントに報告されるものである。このイベントが発生するのは、ウィンドウがその親のサイズ変更の所為で移動させられたときである。event には、イベントが発生したウィンドウが入る(訳註：移動したウィンドウもしくはその親。ここにイベントが送られる)。window には、移動したウィンドウが入る。x、y の座標は、新しい親の原点を基準としたものであり、window のウィンドウの外側左上隅の位置を表す。

## ResizeRequest

ResizeRequest
window: WINDOW
width, height: CARD16

このイベントは、window のウィンドウに対して ResizeRedirect を選択しているクライアントに報告されるものである。このイベントが発生するのは、同クライアントとは別のクライアントが ConfigureWindow リクエストを発し、window のウィンドウのサイズを変更しようと試みたときである。width と height は、ウィンドウ内側のサイズ(サイズ変更リクエストで指定されたサイズ)であり、ボーダ(枠)は含まない。

## ConfigureRequest

ConfigureRequest
parent, window: WINDOW
x, y: INT16
width, height, border-width: CARD16
sibling: WINDOW or None
stack-mode: { Above, Below, TopIf, BottomIf, Opposite}
value-mask: BITMASK

このイベントは、parent のウィンドウに対して SubstructureRedirect を選択しているクライアントに報告されるものである。このイベントが発生するのは、同クライアントとは別のクライアントが window のウィンドウに対して ConfigureWindow リクエストを発行したときである。value-mask は、リクエストでどの構成要素が指定されたのかを表す。value-mask とそれに対応する値は、リクエストで指定された通りに報告される。その他の値は、window のウィンドウの現在のジオメトリの値となる。但し、sibling と stack-mode は、リクエストで指定されなかった場合、それぞれ None 及び Above となる。

## CirculateNotify

CirculateNotify
event, window: WINDOW
place: { Top, Bottom}

このイベントは、window のウィンドウに対して StructureNotify を選択しているクライアントと、同ウィンドウの親に対して SubstructureNotify を選択しているクライアントに報告されるものである。このイベントが発生するのは、CirculateWindow リクエストによって、ウィンドウの重ね順が実際に変更されたときである。event には、イベントが発生したウィンドウが入る(訳註：重ね順が変更されたウィンドウもしくはその親。ここにイベントが送られる)。window には、重ね順が変更されたウィンドウが入る。place が Top である場合、window のウィンドウは全兄弟の中で一番上(最前面)にある。そうでない場合、同ウィンドウは全ての兄弟の下(後ろ)にある。

## CirculateRequest

CirculateRequest
parent, window: WINDOW
place: { Top, Bottom}

このイベントは、parent のウィンドウに対して SubstructureRedirect を選択しているクライアンに報告されるものである。このイベントが発生するのは、parent のウィンドウに対して CirculateWindow リクエストが発行され、あるウィンドウ(parent の下位ウィンドウ)の重ね順を実際に変更する必要があるときである。window には、重ね順を変更するべきウィンドウが入る。place には、新しい重ね順の位置(リクエストで要求された位置)が入る。

## PropertyNotify

PropertyNotify
window: WINDOW
atom: ATOM
state: { NewValue, Deleted}
time: TIMESTAMP

このイベントは、window のウィンドウに対して PropertyChange を選択しているクライアントへ報告されるものである。このイベントは、次の場合には state に NewValue が入った状態で発生する。その場合とは、ChangeProperty あるいは RotateProperties を使用して window のウィンドウのプロパティを変更した場合であり、これには、ChangeProperty を使って長さが 0 のデータを追加した場合と、ChangeProperty あるいは RotateProperties を使用して同一のデータでプロパティの全部もしくは一部を置き換えた場合とが含まれる。このイベントが state に Deleted を入れた状態で発生するのは、リクエスト DeleteProperty あるいは GetProperty を使用してwindow のプロパティが削除された場合である。time のタイムスタンプは、プロパティが変更された時のサーバ時刻を表す。

## SelectionClear

SelectionClear
owner: WINDOW
selection: ATOM
time: TIMESTAMP

このイベントは、セレクションの現在の所有者に報告されるものであり、SetSelectionOwner によって新たな所有者が定められたときに発生する。time のタイムスタンプは、selection のセレクションについて記録されている最終変更時刻である。owner は、現在の所有者(訳註：これから所有権を失う所有者)が自身の SetSelectionOwner リクエストで指定したウィンドウである。

## SelectionRequest

SelectionRequest
owner: WINDOW
selection: ATOM
target: ATOM
property: ATOM or None
requestor: WINDOW
time: TIMESTAMP or CurrentTime

このイベントは、セレクションの所有者に報告されるものであり、あるクライアントが ConvertSelection リクエストを発行したときに発生する。owner は、SetSelectionOwner リクエストを実行したときに指定したウィンドウを表す。残りのフィールドは、ConvertSelection リクエストで指定された通りのものである。

所有者は、target で指定された型に基いて selection のセレクションを変換し、requestor (要求者)のウィンドウに SelectionNotify を送り返す。セレクションの使い方に関する仕様は、X.Org の規格の「Inter-Client Communication Conventions Manual」(クライアント間通信規約)で規定してある。

## SelectionNotify

SelectionNotify
requestor: WINDOW
selection, target: ATOM
property: ATOM or None
time: TIMESTAMP or CurrentTime

このイベントは、ConvertSelection リクエストで指定されたセレクションに所有者が存在しなかったとき、同リクエストに応えてサーバが生成するものである。所有者が存在する場合、このイベントは SendEvent を使って所有者が生成する。セレクションの所有者は、selection のセレクションを変換して property にプロパティとして格納し終えた場合、あるいはセレクションの変換が実行できなかった場合(property に None を設定して示す)、このイベントを requestor (変換の要求者)のウィンドウへ送る。

## ColormapNotify

ColormapNotify
window: WINDOW
colormap: COLORMAP or None
new: BOOL
state: { Installed, Uninstalled}

このイベントは、window のウィンドウに対して ColormapChange を選択しているクライアントに報告されるものである。ウィンドウのカラーマップ属性が変更されたことを受けて発生した場合には、new の値は True であり、ウィンドウのカラーマップが組み込まれたり取り外されたりしたことを受けて発生した場合には、new の値は False である。どちらの場合にも、state の値はカラーマップが現在組み込まれているか否かを表す。

## MappingNotify

MappingNotify
request: { Modifier, Keyboard, Pointer}
first-keycode, count: CARD8

このイベントは全てのクライアントに送られる。このイベントに関心がないことを表明する(受け取りたくないことを表明する)機構は存在しない。detail は、発生した変更の種類を表す。detail の値が Modifier (原文は Modifiers)であれば SetModifierMapping が成功したことを表し、Keyboard であれば ChangeKeyboardMapping が成功したことを表し、Pointer であれば SetPointerMapping が成功したことを表す。detail の値が Keyboard の場合、変更されたキーコードの範囲が first-keycode と count によって示される。

## ClientMessage

ClientMessage
window: WINDOW
type: ATOM
format: {8, 16, 32}
data: LISTofINT8 or LISTofINT16 or LISTofINT32

このイベントは、クライアントが SendEvent を使用することによってのみ発生する。type によって、受信側クライアントがどのように data のデータを解釈するべきなのかを指定する。サーバは、type や data の解釈を行わない。format は、data を８ビットのリスト(配列)として見るべきなのか、それとも１６ビットのリスト、あるいは３２ビットのリストとして見るべきなのかを指定するものである。format のおかげで、サーバは(必要に応じて) data のバイト順を正しく並び替えることができるようになる。data は常に、８ビットの値２０個、あるいは１６ビットの値１０個、あるいは３２ビットの値５個から成る。もっとも、メッセージの型(type)によっては、これらの値の全部を使用しないこともある。

## 第１２章　フロー制御と並行処理

サーバは、ある接続に対して書き込んでいる時は、その接続からの読み込みを停止することが認められている(但し、書き込みをブロックするのであれば、サーバは他の接続をサービスし続けなければならない)。サーバは、接続毎に１度に１つのリクエストだけバッファできればよいのである。クライアントは、サーバに対する任意の接続において、同接続から読み込んでいる最中にブロックする(待受け状態になる)ことが可能であるが、書き込んでいる最中にブロックする場合にはイベントとエラーの読み込み動作は熟さなければならない。クライアント側でこの規則に対する違反があると、接続がデッドロックする可能性がある。もっとも、伝送層にバッファ容量がほとんど無い場合や、クライアントがリプライの読み込みやエラー・イベントの確認を一切せずに大量のリクエストを送信しようとした場合でなければ、デッドロックはそう簡単に起きるものではない。

サーバが内部で並行処理を行えるように実装されているか否かにかかわらず、リクエスト群全体の実行結果は、まるで順番通りに個々のリクエストの実行を完了させていったかのようにならなければならず、また、同一の接続から来たリクエスト群は届いた順序で実行されなければならない(即ち、この２つを総合した実行順序は、個々のストリームの纏まりは崩さずにそれらの纏まりを並び替えたものになる)。リクエストを１つ実行する操作には、全ての引数(の有効無効)を検証すること、リプライのためのデータ全てを纏めること、及び必要なイベント全てを生成しキューに入れることが含まれる。けれども、リプライとイベントを実際に送ることは、リクエストの実行には含まれない。加えて、(例えば、占有の能動化やポインタの移動のように)複数のイベントを生成し得る他の要因がある場合、サーバによる実行結果は、他の要因群とリクエスト群の全てに関して、必要なイベント全てを実際に生成し不可分的にキューに入れるというものでなければならない。あるクライアントからのあるリクエストについて、そのリクエストを実行することによって生じたイベントであって同クライアントへ送られるべきものが存在する場合、同イベントはリプライやエラーの送信に先立って同クライアントへ送られなければならない。

## 附録 A：KEYSYM の符号

KEYSYM の値は、３２ビットの整数であり、キーボードのキーキャップの記号(キーボードの各キーの表面に描いてある記号)を表す符号である。最上位の３ビットは常に 0 であり、残りの２９ビットの数値空間を使用する。便宜的に、KEYSYM の値を４つのバイトに分けて扱う。

- 第１バイトは最上位の８ビットである(0 で固定された３つのビットと、有効な２９個のビットの中の最上位５ビットから成る)。

- 第２バイトは、その次の最上位８ビットである。

- 第３バイトは、その次の最上位８ビットである。

- 第４バイトは、最下位の８ビットである。

KEYSYM の値には、６つの区分(category)がある。

## 特別な KEYSYM

特別な値が２つある。NoSymbol と VoidSymbol である。これらはシンボルが存在しないことを表すのに使用する(「第５章　キーボード」を参照)。

Byte 1 | Byte 2 | Byte 3 | Byte 4 | Hex. value | Name
--- | --- | --- | --- | --- | ---
0 | 0 | 0 | 0 | #x00000000 | NoSymbol
0 | 255 | 255 | 255 | #x00FFFFFF | VoidSymbol

## Latin-1 の KEYSYM

Latin-1 の KEYSYM は、#x0020 から #x007E まで及び #x00A0 から #00FF までの範囲を使用する。また、Latin-1 の各 KEYSYM はそれぞれ、ISO 10646 / Unicode の文字の U+0020 から U+007E まで及び U+00A0 から U+00FF までをも表す。

## Unicode の KEYSYM

Unicode の KEYSYM は #x01000100 から #x0110FFFF までの範囲を使用する。各 KEYSYM はそれぞれ、ISO 10646 / Unicode の文字の U+0100 から U+10FFFF までを表す。Unicode の KEYSYM の数値は、対応する文字の Unicode の表における位置に #x01000000 を足した値である。後方互換性を確保するため、クライアントは、処理対象の文字に Unicode の KEYSYM と 古い KEYSYM とが存在する場合、両方の KEYSYM を処理できるようにしておくべきである。

デッド・キーはこれに続いて打ち込まれた文字にアクセント記号を付けるものであるが、このキーはファンクションの KEYSYM として符号化するものとし、(同キーと)等価な結合文字に対応する Unicode の KEYSYM では符号化しない。キーキャップが特定の機能(function)を表すと同時に図形の記号(Unicode にも存在するもの)をも持っている場合(例えば、カーソルを上に移動させる機能のキーに対する上向きの矢印の図形)、描かれた記号に対応する Unicode の KEYSYM は使わず、該当するファンクション KEYSYM を使用すべきである。

## ファンクション KEYSYM

ファンクション KEYSYM が表すキーキャップ記号は、符号化された文字の集合の要素を直接表すものではない。代わりに、ファンクション KEYSYM は通常、ソフトウェアの機能、モード、あるいは操作(例えば、「cursor up」「caps lock」「insert」)を表す。これらの機能等はそれ専用のキーを使って有効にする(activate)ことができる。ファンクション KEYSYM の第１バイトと第２バイトの値は 0 である。第３バイトは８ビットの集合３つを区別するために使用し、この集合たる８ビットが第４バイトとなり、第４バイトによって個々のファンクション・キーを表す。

第３バイト | 第４バイト
--- | ---
255 | キーボード
254 | キーボード (XKB) 拡張
253 | 3270 (IBM3270)

各国の市場において、文字キーに関してはキーボードは比較的統一されている傾向があるけれども、各種ファンクション・キーにはかなりの差異が見られる。初期のタイム・シェアリング時代の産物であるファンクション・キーがあるかと思えば、特定のアプリケーション(例えば、テキスト処理、ウェブ・ブラウジング、視聴覚データへのアクセスを行うもの)のために設計されたファンクション・キーも存在する。キーキャップ上の記号は、製造企業や国(の市場)ごとにかなり差異があり、同一のソフトウェア機能を記す場面ですら差異が見られる(例えば、アメリカでは「Ctrl」だがドイツでは「Strg」である等)。

このような世界でどのように KEYSYM を定義するかについて、２つの考え方が存在する。

- 刻印アプローチ

- 共通アプローチ

刻印アプローチでは、他とは異なるキー刻印の全てに対して KEYSYM を割り当てる。これは、実質的には、あらゆるキーボードのあらゆるキー刻印の集合を作ることに等しい。例えば、最上段のファンクション・キーに F1 から Fn という文字が描いてあるキーボードもあれば、PF1 から PFn という文字が描かれているキーボードもある。刻印アプローチにおいては、これらのキーは異なるキーとして扱う。同様に、Lock は Shift Lock とは異なり、小文字を大文字に切り替える効果を持つ上向き矢印記号とも異なる。Del、DEL、Delete、Remove など、このような別名は他にもたくさんある。刻印アプローチでは、KEYSYM の集合に新たなエントリを追加すべきか否かを判断するのは簡単である。既存のエントリの中に完全に一致するものがなければ、新たなエントリを作成すればよい。

共通アプローチでは、十分な数のキーボードを用意し、それらの上に存在する全てのキーを持ってきて、纏めるべきだと思われる複数の別名を１つの KEYSYM に纏めようと試みる。例えば、Del、DEL、及び Delete は１つの KEYSYM に纏められる。企業は、企業専用の符号空間を用いて KEYSYM の集合を拡大することができ、標準集合に含まれない独自キーの全てをそこに含めることができる。標準の KEYSYM にどのキーを対応させるかは各企業が判断するけれども、これはユーザによって上書きされる可能性が高い。共通アプローチの実践をさらに難しくするのは、次の２つの点を判断する必要があることである。即ち、標準集合の KEYSYM の１つと見做してかまわないような刻印１つを実装するためにどれだけのキーボードを集めれば十分なのか(十分集まったと言える時期は何時なのか)、及び、１つの KEYSYM に纏められるべき刻印はどれとどれなのかを判断する必要があることである。

どちらの方法も完璧ではなく洗練されてもいないが、移植性のあるアプリケーションを書きやすいことから共通アプローチを選んだ。Delete の機能を１つの KEYSYM に纏めることによって、アプリケーションは、削除機能を実装しつつ、同機能が幅広いワークステーションで適切にキーに割り当てられていることを期待できるようになる。共通アプローチにおいては、アプリケーションの作成者は依然として自由に企業独自の KEYSYM を探したり解釈したりすることができるけれども、そうした KEYSYM が拡張集合に入っているため、アプリケーション開発者は自分が移植性のないアプリケーションを書いているということに一層自覚的になる。

下表の「Keyboard」の集合は、各種キーボードによくあるキーをかき集めたものである。数値を表すキーパッドの記号は一般的にはキーボードの主部のキーに見られる記号の単純な複製にすぎないけれども、この集合の中ではそれらを区別している。なぜかというと、そうした記号に区別可能な意味(semantics)が割り当てられていることが多いからである。

KEYSYM の値 | 名前 | 集合
--- | --- | ---
#xFF08 | BACKSPACE, BACK SPACE, BACK CHAR | Keyboard
#xFF09 | TAB | Keyboard
#xFF0A | LINEFEED, LF | Keyboard
#xFF0B | CLEAR | Keyboard
#xFF0D | RETURN, ENTER | Keyboard
#xFF13 | PAUSE, HOLD | Keyboard
#xFF14 | SCROLL LOCK | Keyboard
#xFF15 | SYS REQ, SYSTEM REQUEST | Keyboard
#xFF1B | ESCAPE | Keyboard
#xFF20 | MULTI-KEY CHARACTER PREFACE | Keyboard
#xFF21 | KANJI, KANJI CONVERT | Keyboard
#xFF22 | MUHENKAN | Keyboard
#xFF23 | HENKAN MODE | Keyboard
#xFF24 | ROMAJI | Keyboard
#xFF25 | HIRAGANA | Keyboard
#xFF26 | KATAKANA | Keyboard
#xFF27 | HIRAGANA/KATAKANA TOGGLE | Keyboard
#xFF28 | ZENKAKU | Keyboard
#xFF29 | HANKAKU | Keyboard
#xFF2A | ZENKAKU/HANKAKU TOGGLE | Keyboard
#xFF2B | TOUROKU | Keyboard
#xFF2C | MASSYO | Keyboard
#xFF2D | KANA LOCK | Keyboard
#xFF2E | KANA SHIFT | Keyboard
#xFF2F | EISU SHIFT | Keyboard
#xFF30 | EISU TOGGLE | Keyboard
#xFF31 | HANGUL START/STOP (TOGGLE) | Keyboard
#xFF32 | HANGUL START | Keyboard
#xFF33 | HANGUL END, ENGLISH START | Keyboard
#xFF34 | START HANGUL/HANJA CONVERSION | Keyboard
#xFF35 | HANGUL JAMO MODE | Keyboard
#xFF36 | HANGUL ROMAJA MODE | Keyboard
#xFF37 | HANGUL CODE INPUT | Keyboard
#xFF38 | HANGUL JEONJA MODE | Keyboard
#xFF39 | HANGUL BANJA MODE | Keyboard
#xFF3A | HANGUL PREHANJA CONVERSION | Keyboard
#xFF3B | HANGUL POSTHANJA CONVERSION | Keyboard
#xFF3C | HANGUL SINGLE CANDIDATE | Keyboard
#xFF3D | HANGUL MULTIPLE CANDIDATE | Keyboard
#xFF3E | HANGUL PREVIOUS CANDIDATE | Keyboard
#xFF3F | HANGUL SPECIAL SYMBOLS | Keyboard
#xFF50 | HOME | Keyboard
#xFF51 | LEFT, MOVE LEFT, LEFT ARROW | Keyboard
#xFF52 | UP, MOVE UP, UP ARROW | Keyboard
#xFF53 | RIGHT, MOVE RIGHT, RIGHT ARROW | Keyboard
#xFF54 | DOWN, MOVE DOWN, DOWN ARROW | Keyboard
#xFF55 | PRIOR, PREVIOUS, PAGE UP | Keyboard
#xFF56 | NEXT, PAGE DOWN | Keyboard
#xFF57 | END, EOL | Keyboard
#xFF58 | BEGIN, BOL | Keyboard
#xFF60 | SELECT, MARK | Keyboard
#xFF61 | PRINT | Keyboard
#xFF62 | EXECUTE, RUN, DO | Keyboard
#xFF63 | INSERT, INSERT HERE | Keyboard
#xFF65 | UNDO, OOPS | Keyboard
#xFF66 | REDO, AGAIN | Keyboard
#xFF67 | MENU | Keyboard
#xFF68 | FIND, SEARCH | Keyboard
#xFF69 | CANCEL, STOP, ABORT, EXIT | Keyboard
#xFF6A | HELP | Keyboard
#xFF6B | BREAK | Keyboard
#xFF7E | MODE SWITCH, SCRIPT SWITCH, CHARACTER SET SWITCH | Keyboard
#xFF7F | NUM LOCK | Keyboard
#xFF80 | KEYPAD SPACE | Keyboard
#xFF89 | KEYPAD TAB | Keyboard
#xFF8D | KEYPAD ENTER | Keyboard
#xFF91 | KEYPAD F1, PF1, A | Keyboard
#xFF92 | KEYPAD F2, PF2, B | Keyboard
#xFF93 | KEYPAD F3, PF3, C | Keyboard
#xFF94 | KEYPAD F4, PF4, D | Keyboard
#xFF95 | KEYPAD HOME | Keyboard
#xFF96 | KEYPAD LEFT | Keyboard
#xFF97 | KEYPAD UP | Keyboard
#xFF98 | KEYPAD RIGHT | Keyboard
#xFF99 | KEYPAD DOWN | Keyboard
#xFF9A | KEYPAD PRIOR, PAGE UP | Keyboard
#xFF9B | KEYPAD NEXT, PAGE DOWN | Keyboard
#xFF9C | KEYPAD END | Keyboard
#xFF9D | KEYPAD BEGIN | Keyboard
#xFF9E | KEYPAD INSERT | Keyboard
#xFF9F | KEYPAD DELETE | Keyboard
#xFFAA | KEYPAD MULTIPLICATION SIGN, ASTERISK | Keyboard
#xFFAB | KEYPAD PLUS SIGN | Keyboard
#xFFAC | KEYPAD SEPARATOR, COMMA | Keyboard
#xFFAD | KEYPAD MINUS SIGN, HYPHEN | Keyboard
#xFFAE | KEYPAD DECIMAL POINT, FULL STOP | Keyboard
#xFFAF | KEYPAD DIVISION SIGN, SOLIDUS | Keyboard
#xFFB0 | KEYPAD DIGIT ZERO | Keyboard
#xFFB1 | KEYPAD DIGIT ONE | Keyboard
#xFFB2 | KEYPAD DIGIT TWO | Keyboard
#xFFB3 | KEYPAD DIGIT THREE | Keyboard
#xFFB4 | KEYPAD DIGIT FOUR | Keyboard
#xFFB5 | KEYPAD DIGIT FIVE | Keyboard
#xFFB6 | KEYPAD DIGIT SIX | Keyboard
#xFFB7 | KEYPAD DIGIT SEVEN | Keyboard
#xFFB8 | KEYPAD DIGIT EIGHT | Keyboard
#xFFB9 | KEYPAD DIGIT NINE | Keyboard
#xFFBD | KEYPAD EQUALS SIGN | Keyboard
#xFFBE | F1 | Keyboard
#xFFBF | F2 | Keyboard
#xFFC0 | F3 | Keyboard
#xFFC1 | F4 | Keyboard
#xFFC2 | F5 | Keyboard
#xFFC3 | F6 | Keyboard
#xFFC4 | F7 | Keyboard
#xFFC5 | F8 | Keyboard
#xFFC6 | F9 | Keyboard
#xFFC7 | F10 | Keyboard
#xFFC8 | F11, L1 | Keyboard
#xFFC9 | F12, L2 | Keyboard
#xFFCA | F13, L3 | Keyboard
#xFFCB | F14, L4 | Keyboard
#xFFCC | F15, L5 | Keyboard
#xFFCD | F16, L6 | Keyboard
#xFFCE | F17, L7 | Keyboard
#xFFCF | F18, L8 | Keyboard
#xFFD0 | F19, L9 | Keyboard
#xFFD1 | F20, L10 | Keyboard
#xFFD2 | F21, R1 | Keyboard
#xFFD3 | F22, R2 | Keyboard
#xFFD4 | F23, R3 | Keyboard
#xFFD5 | F24, R4 | Keyboard
#xFFD6 | F25, R5 | Keyboard
#xFFD7 | F26, R6 | Keyboard
#xFFD8 | F27, R7 | Keyboard
#xFFD9 | F28, R8 | Keyboard
#xFFDA | F29, R9 | Keyboard
#xFFDB | F30, R10 | Keyboard
#xFFDC | F31, R11 | Keyboard
#xFFDD | F32, R12 | Keyboard
#xFFDE | F33, R13 | Keyboard
#xFFDF | F34, R14 | Keyboard
#xFFE0 | F35, R15 | Keyboard
#xFFE1 | LEFT SHIFT | Keyboard
#xFFE2 | RIGHT SHIFT | Keyboard
#xFFE3 | LEFT CONTROL | Keyboard
#xFFE4 | RIGHT CONTROL | Keyboard
#xFFE5 | CAPS LOCK | Keyboard
#xFFE6 | SHIFT LOCK | Keyboard
#xFFE7 | LEFT META | Keyboard
#xFFE8 | RIGHT META | Keyboard
#xFFE9 | LEFT ALT | Keyboard
#xFFEA | RIGHT ALT | Keyboard
#xFFEB | LEFT SUPER | Keyboard
#xFFEC | RIGHT SUPER | Keyboard
#xFFED | LEFT HYPER | Keyboard
#xFFEE | RIGHT HYPER | Keyboard
#xFFFF | DELETE, RUBOUT | Keyboard

キーボード拡張(XKB)の集合は、X Keyboard Extension: Protocol Specification の附録 C で定義してある。そこでは、種々のキーに加えて、ある種のデッド・キーも定義している。

下表の「3270」の集合は、IBM 3270 端末に固有の追加キーについて定義している。

KEYSYM の値 | 名前 | 集合
--- | --- | ---
#xFD01 | 3270 DUPLICATE | 3270
#xFD02 | 3270 FIELDMARK | 3270
#xFD03 | 3270 RIGHT2 | 3270
#xFD04 | 3270 LEFT2 | 3270
#xFD05 | 3270 BACKTAB | 3270
#xFD06 | 3270 ERASEEOF | 3270
#xFD07 | 3270 ERASEINPUT | 3270
#xFD08 | 3270 RESET | 3270
#xFD09 | 3270 QUIT | 3270
#xFD0A | 3270 PA1 | 3270
#xFD0B | 3270 PA2 | 3270
#xFD0C | 3270 PA3 | 3270
#xFD0D | 3270 TEST | 3270
#xFD0E | 3270 ATTN | 3270
#xFD0F | 3270 CURSORBLINK | 3270
#xFD10 | 3270 ALTCURSOR | 3270
#xFD11 | 3270 KEYCLICK | 3270
#xFD12 | 3270 JUMP | 3270
#xFD13 | 3270 IDENT | 3270
#xFD14 | 3270 RULE | 3270
#xFD15 | 3270 COPY | 3270
#xFD16 | 3270 PLAY | 3270
#xFD17 | 3270 SETUP | 3270
#xFD18 | 3270 RECORD | 3270
#xFD19 | 3270 CHANGESCREEN | 3270
#xFD1A | 3270 DELETEWORD | 3270
#xFD1B | 3270 EXSELECT | 3270
#xFD1C | 3270 CURSORSELECT | 3270
#xFD1D | 3270 PRINTSCREEN | 3270
#xFD1E | 3270 ENTER | 3270

## 企業の KEYSYM

KEYSYM の番号の #x10000000 から #x1FFFFFFF までは、企業独自の拡張で利用することができる。この中、#x11000000 から #x1100FFFF までの範囲はキーパッドの KEYSYM 用である。

## 古い KEYSYM

ISO 10646 / Unicode が使えるようになる前の時代、文字を表すのに８ビットの古い文字符号集合を複数用いていた。第１バイトと第２バイトの値は 0 であり、第３バイトで文字符号の集合を指定し、第４バイトには指定された集合の中の特定の文字を表す８ビットの値が入る、というものである。

第３バイト | 第４バイト
--- | ---
1 | Latin-2
2 | Latin-3
3 | Latin-4
4 | Kana
5 | Arabic
6 | Cyrillic
7 | Greek
8 | Technical
9 | Special
10 | Publishing
11 | APL
12 | Hebrew
13 | Thai
14 | Korean
15 | Latin-5
16 | Latin-6
17 | Latin-7
18 | Latin-8
19 | Latin-9
32 | Currency

各文字集合の中の、前の文字集合(第３バイトの値がより小さい文字集合)にある符号と重複していた符号が削除されているので、その部分は空いている。

Latin、Arabic、Cyrillic、Greek、Hebrew、及び Thai の文字集合は、当時利用可能であった ISO 8859 の該当部分の初期草案を元に作られた。しかしながら、Cyrillic と Greek の文字集合の場合、ISO の規格の最終版は草案とは異なるものになっていた。Technical、Special、及び Publishing の集合は、当時はこれと同等の国際的な規格が存在しなかったため、Digital Equipment Corporation の規格に基いている。

下の表には、規格化されていた古い KEYSYM 全てが載っている。名前の欄には、元の文書(本プロトコルの旧版)で使用されていた名前を載せている。誤解の余地なく等価である Unicode の値が存在する場合(ISO 8859 の文字は全てこの場合に当たる)、相互参照として２番目の列にその値を記載している。Unicode の数値が載ってない場合、その KEYSYM が表していた当の機能(semantics)は失われてしまったかもしれず、可能であれば、代わりに Unicode の KEYSYM を用いるべきである(訳註：よくわかってない：要確認)。

Unicode の KEYSYM の対応するものが増えたので、古い KEYSYM の一部あるいは全部は、この規格の将来の版では段階的に廃止され、取り除かれる可能性がある。Technical、Special、Publishing、APL 及び Currency (#x20AC を除く)の集合の KEYSYM の大半は、実際には一度も使用されなかったと思われ、それゆえ Unicode 以前のフォントでは使用できない。特に Currency の集合は、元々 Unicode から写し取ったものであるが、Unicode の KEYSYM の導入によって、既に非推奨のものとなっている。

KEYSYM の値 | Unicode の値 | 名前 | 集合
--- | --- | --- | ---
#x01A1 | U+0104 | LATIN CAPITAL LETTER A WITH OGONEK | Latin-2
#x01A2 | U+02D8 | BREVE | Latin-2
#x01A3 | U+0141 | LATIN CAPITAL LETTER L WITH STROKE | Latin-2
#x01A5 | U+013D | LATIN CAPITAL LETTER L WITH CARON | Latin-2
#x01A6 | U+015A | LATIN CAPITAL LETTER S WITH ACUTE | Latin-2
#x01A9 | U+0160 | LATIN CAPITAL LETTER S WITH CARON | Latin-2
#x01AA | U+015E | LATIN CAPITAL LETTER S WITH CEDILLA | Latin-2
#x01AB | U+0164 | LATIN CAPITAL LETTER T WITH CARON | Latin-2
#x01AC | U+0179 | LATIN CAPITAL LETTER Z WITH ACUTE | Latin-2
#x01AE | U+017D | LATIN CAPITAL LETTER Z WITH CARON | Latin-2
#x01AF | U+017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE | Latin-2
#x01B1 | U+0105 | LATIN SMALL LETTER A WITH OGONEK | Latin-2
#x01B2 | U+02DB | OGONEK | Latin-2
#x01B3 | U+0142 | LATIN SMALL LETTER L WITH STROKE | Latin-2
#x01B5 | U+013E | LATIN SMALL LETTER L WITH CARON | Latin-2
#x01B6 | U+015B | LATIN SMALL LETTER S WITH ACUTE | Latin-2
#x01B7 | U+02C7 | CARON | Latin-2
#x01B9 | U+0161 | LATIN SMALL LETTER S WITH CARON | Latin-2
#x01BA | U+015F | LATIN SMALL LETTER S WITH CEDILLA | Latin-2
#x01BB | U+0165 | LATIN SMALL LETTER T WITH CARON | Latin-2
#x01BC | U+017A | LATIN SMALL LETTER Z WITH ACUTE | Latin-2
#x01BD | U+02DD | DOUBLE ACUTE ACCENT | Latin-2
#x01BE | U+017E | LATIN SMALL LETTER Z WITH CARON | Latin-2
#x01BF | U+017C | LATIN SMALL LETTER Z WITH DOT ABOVE | Latin-2
#x01C0 | U+0154 | LATIN CAPITAL LETTER R WITH ACUTE | Latin-2
#x01C3 | U+0102 | LATIN CAPITAL LETTER A WITH BREVE | Latin-2
#x01C5 | U+0139 | LATIN CAPITAL LETTER L WITH ACUTE | Latin-2
#x01C6 | U+0106 | LATIN CAPITAL LETTER C WITH ACUTE | Latin-2
#x01C8 | U+010C | LATIN CAPITAL LETTER C WITH CARON | Latin-2
#x01CA | U+0118 | LATIN CAPITAL LETTER E WITH OGONEK | Latin-2
#x01CC | U+011A | LATIN CAPITAL LETTER E WITH CARON | Latin-2
#x01CF | U+010E | LATIN CAPITAL LETTER D WITH CARON | Latin-2
#x01D0 | U+0110 | LATIN CAPITAL LETTER D WITH STROKE | Latin-2
#x01D1 | U+0143 | LATIN CAPITAL LETTER N WITH ACUTE | Latin-2
#x01D2 | U+0147 | LATIN CAPITAL LETTER N WITH CARON | Latin-2
#x01D5 | U+0150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE | Latin-2
#x01D8 | U+0158 | LATIN CAPITAL LETTER R WITH CARON | Latin-2
#x01D9 | U+016E | LATIN CAPITAL LETTER U WITH RING ABOVE | Latin-2
#x01DB | U+0170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE | Latin-2
#x01DE | U+0162 | LATIN CAPITAL LETTER T WITH CEDILLA | Latin-2
#x01E0 | U+0155 | LATIN SMALL LETTER R WITH ACUTE | Latin-2
#x01E3 | U+0103 | LATIN SMALL LETTER A WITH BREVE | Latin-2
#x01E5 | U+013A | LATIN SMALL LETTER L WITH ACUTE | Latin-2
#x01E6 | U+0107 | LATIN SMALL LETTER C WITH ACUTE | Latin-2
#x01E8 | U+010D | LATIN SMALL LETTER C WITH CARON | Latin-2
#x01EA | U+0119 | LATIN SMALL LETTER E WITH OGONEK | Latin-2
#x01EC | U+011B | LATIN SMALL LETTER E WITH CARON | Latin-2
#x01EF | U+010F | LATIN SMALL LETTER D WITH CARON | Latin-2
#x01F0 | U+0111 | LATIN SMALL LETTER D WITH STROKE | Latin-2
#x01F1 | U+0144 | LATIN SMALL LETTER N WITH ACUTE | Latin-2
#x01F2 | U+0148 | LATIN SMALL LETTER N WITH CARON | Latin-2
#x01F5 | U+0151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE | Latin-2
#x01F8 | U+0159 | LATIN SMALL LETTER R WITH CARON | Latin-2
#x01F9 | U+016F | LATIN SMALL LETTER U WITH RING ABOVE | Latin-2
#x01FB | U+0171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE | Latin-2
#x01FE | U+0163 | LATIN SMALL LETTER T WITH CEDILLA | Latin-2
#x01FF | U+02D9 | DOT ABOVE | Latin-2
#x02A1 | U+0126 | LATIN CAPITAL LETTER H WITH STROKE | Latin-3
#x02A6 | U+0124 | LATIN CAPITAL LETTER H WITH CIRCUMFLEX | Latin-3
#x02A9 | U+0130 | LATIN CAPITAL LETTER I WITH DOT ABOVE | Latin-3
#x02AB | U+011E | LATIN CAPITAL LETTER G WITH BREVE | Latin-3
#x02AC | U+0134 | LATIN CAPITAL LETTER J WITH CIRCUMFLEX | Latin-3
#x02B1 | U+0127 | LATIN SMALL LETTER H WITH STROKE | Latin-3
#x02B6 | U+0125 | LATIN SMALL LETTER H WITH CIRCUMFLEX | Latin-3
#x02B9 | U+0131 | LATIN SMALL LETTER DOTLESS I | Latin-3
#x02BB | U+011F | LATIN SMALL LETTER G WITH BREVE | Latin-3
#x02BC | U+0135 | LATIN SMALL LETTER J WITH CIRCUMFLEX | Latin-3
#x02C5 | U+010A | LATIN CAPITAL LETTER C WITH DOT ABOVE | Latin-3
#x02C6 | U+0108 | LATIN CAPITAL LETTER C WITH CIRCUMFLEX | Latin-3
#x02D5 | U+0120 | LATIN CAPITAL LETTER G WITH DOT ABOVE | Latin-3
#x02D8 | U+011C | LATIN CAPITAL LETTER G WITH CIRCUMFLEX | Latin-3
#x02DD | U+016C | LATIN CAPITAL LETTER U WITH BREVE | Latin-3
#x02DE | U+015C | LATIN CAPITAL LETTER S WITH CIRCUMFLEX | Latin-3
#x02E5 | U+010B | LATIN SMALL LETTER C WITH DOT ABOVE | Latin-3
#x02E6 | U+0109 | LATIN SMALL LETTER C WITH CIRCUMFLEX | Latin-3
#x02F5 | U+0121 | LATIN SMALL LETTER G WITH DOT ABOVE | Latin-3
#x02F8 | U+011D | LATIN SMALL LETTER G WITH CIRCUMFLEX | Latin-3
#x02FD | U+016D | LATIN SMALL LETTER U WITH BREVE | Latin-3
#x02FE | U+015D | LATIN SMALL LETTER S WITH CIRCUMFLEX | Latin-3
#x03A2 | U+0138 | LATIN SMALL LETTER KRA | Latin-4
#x03A3 | U+0156 | LATIN CAPITAL LETTER R WITH CEDILLA | Latin-4
#x03A5 | U+0128 | LATIN CAPITAL LETTER I WITH TILDE | Latin-4
#x03A6 | U+013B | LATIN CAPITAL LETTER L WITH CEDILLA | Latin-4
#x03AA | U+0112 | LATIN CAPITAL LETTER E WITH MACRON | Latin-4
#x03AB | U+0122 | LATIN CAPITAL LETTER G WITH CEDILLA | Latin-4
#x03AC | U+0166 | LATIN CAPITAL LETTER T WITH STROKE | Latin-4
#x03B3 | U+0157 | LATIN SMALL LETTER R WITH CEDILLA | Latin-4
#x03B5 | U+0129 | LATIN SMALL LETTER I WITH TILDE | Latin-4
#x03B6 | U+013C | LATIN SMALL LETTER L WITH CEDILLA | Latin-4
#x03BA | U+0113 | LATIN SMALL LETTER E WITH MACRON | Latin-4
#x03BB | U+0123 | LATIN SMALL LETTER G WITH CEDILLA | Latin-4
#x03BC | U+0167 | LATIN SMALL LETTER T WITH STROKE | Latin-4
#x03BD | U+014A | LATIN CAPITAL LETTER ENG | Latin-4
#x03BF | U+014B | LATIN SMALL LETTER ENG | Latin-4
#x03C0 | U+0100 | LATIN CAPITAL LETTER A WITH MACRON | Latin-4
#x03C7 | U+012E | LATIN CAPITAL LETTER I WITH OGONEK | Latin-4
#x03CC | U+0116 | LATIN CAPITAL LETTER E WITH DOT ABOVE | Latin-4
#x03CF | U+012A | LATIN CAPITAL LETTER I WITH MACRON | Latin-4
#x03D1 | U+0145 | LATIN CAPITAL LETTER N WITH CEDILLA | Latin-4
#x03D2 | U+014C | LATIN CAPITAL LETTER O WITH MACRON | Latin-4
#x03D3 | U+0136 | LATIN CAPITAL LETTER K WITH CEDILLA | Latin-4
#x03D9 | U+0172 | LATIN CAPITAL LETTER U WITH OGONEK | Latin-4
#x03DD | U+0168 | LATIN CAPITAL LETTER U WITH TILDE | Latin-4
#x03DE | U+016A | LATIN CAPITAL LETTER U WITH MACRON | Latin-4
#x03E0 | U+0101 | LATIN SMALL LETTER A WITH MACRON | Latin-4
#x03E7 | U+012F | LATIN SMALL LETTER I WITH OGONEK | Latin-4
#x03EC | U+0117 | LATIN SMALL LETTER E WITH DOT ABOVE | Latin-4
#x03EF | U+012B | LATIN SMALL LETTER I WITH MACRON | Latin-4
#x03F1 | U+0146 | LATIN SMALL LETTER N WITH CEDILLA | Latin-4
#x03F2 | U+014D | LATIN SMALL LETTER O WITH MACRON | Latin-4
#x03F3 | U+0137 | LATIN SMALL LETTER K WITH CEDILLA | Latin-4
#x03F9 | U+0173 | LATIN SMALL LETTER U WITH OGONEK | Latin-4
#x03FD | U+0169 | LATIN SMALL LETTER U WITH TILDE | Latin-4
#x03FE | U+016B | LATIN SMALL LETTER U WITH MACRON | Latin-4
#x047E | U+203E | OVERLINE | Kana
#x04A1 | U+3002 | KANA FULL STOP | Kana
#x04A2 | U+300C | KANA OPENING BRACKET | Kana
#x04A3 | U+300D | KANA CLOSING BRACKET | Kana
#x04A4 | U+3001 | KANA COMMA | Kana
#x04A5 | U+30FB | KANA CONJUNCTIVE | Kana
#x04A6 | U+30F2 | KANA LETTER WO | Kana
#x04A7 | U+30A1 | KANA LETTER SMALL A | Kana
#x04A8 | U+30A3 | KANA LETTER SMALL I | Kana
#x04A9 | U+30A5 | KANA LETTER SMALL U | Kana
#x04AA | U+30A7 | KANA LETTER SMALL E | Kana
#x04AB | U+30A9 | KANA LETTER SMALL O | Kana
#x04AC | U+30E3 | KANA LETTER SMALL YA | Kana
#x04AD | U+30E5 | KANA LETTER SMALL YU | Kana
#x04AE | U+30E7 | KANA LETTER SMALL YO | Kana
#x04AF | U+30C3 | KANA LETTER SMALL TSU | Kana
#x04B0 | U+30FC | PROLONGED SOUND SYMBOL | Kana
#x04B1 | U+30A2 | KANA LETTER A | Kana
#x04B2 | U+30A4 | KANA LETTER I | Kana
#x04B3 | U+30A6 | KANA LETTER U | Kana
#x04B4 | U+30A8 | KANA LETTER E | Kana
#x04B5 | U+30AA | KANA LETTER O | Kana
#x04B6 | U+30AB | KANA LETTER KA | Kana
#x04B7 | U+30AD | KANA LETTER KI | Kana
#x04B8 | U+30AF | KANA LETTER KU | Kana
#x04B9 | U+30B1 | KANA LETTER KE | Kana
#x04BA | U+30B3 | KANA LETTER KO | Kana
#x04BB | U+30B5 | KANA LETTER SA | Kana
#x04BC | U+30B7 | KANA LETTER SHI | Kana
#x04BD | U+30B9 | KANA LETTER SU | Kana
#x04BE | U+30BB | KANA LETTER SE | Kana
#x04BF | U+30BD | KANA LETTER SO | Kana
#x04C0 | U+30BF | KANA LETTER TA | Kana
#x04C1 | U+30C1 | KANA LETTER CHI | Kana
#x04C2 | U+30C4 | KANA LETTER TSU | Kana
#x04C3 | U+30C6 | KANA LETTER TE | Kana
#x04C4 | U+30C8 | KANA LETTER TO | Kana
#x04C5 | U+30CA | KANA LETTER NA | Kana
#x04C6 | U+30CB | KANA LETTER NI | Kana
#x04C7 | U+30CC | KANA LETTER NU | Kana
#x04C8 | U+30CD | KANA LETTER NE | Kana
#x04C9 | U+30CE | KANA LETTER NO | Kana
#x04CA | U+30CF | KANA LETTER HA | Kana
#x04CB | U+30D2 | KANA LETTER HI | Kana
#x04CC | U+30D5 | KANA LETTER FU | Kana
#x04CD | U+30D8 | KANA LETTER HE | Kana
#x04CE | U+30DB | KANA LETTER HO | Kana
#x04CF | U+30DE | KANA LETTER MA | Kana
#x04D0 | U+30DF | KANA LETTER MI | Kana
#x04D1 | U+30E0 | KANA LETTER MU | Kana
#x04D2 | U+30E1 | KANA LETTER ME | Kana
#x04D3 | U+30E2 | KANA LETTER MO | Kana
#x04D4 | U+30E4 | KANA LETTER YA | Kana
#x04D5 | U+30E6 | KANA LETTER YU | Kana
#x04D6 | U+30E8 | KANA LETTER YO | Kana
#x04D7 | U+30E9 | KANA LETTER RA | Kana
#x04D8 | U+30EA | KANA LETTER RI | Kana
#x04D9 | U+30EB | KANA LETTER RU | Kana
#x04DA | U+30EC | KANA LETTER RE | Kana
#x04DB | U+30ED | KANA LETTER RO | Kana
#x04DC | U+30EF | KANA LETTER WA | Kana
#x04DD | U+30F3 | KANA LETTER N | Kana
#x04DE | U+309B | VOICED SOUND SYMBOL | Kana
#x04DF | U+309C | SEMIVOICED SOUND SYMBOL | Kana
#x05AC | U+060C | ARABIC COMMA | Arabic
#x05BB | U+061B | ARABIC SEMICOLON | Arabic
#x05BF | U+061F | ARABIC QUESTION MARK | Arabic
#x05C1 | U+0621 | ARABIC LETTER HAMZA | Arabic
#x05C2 | U+0622 | ARABIC LETTER ALEF WITH MADDA ABOVE | Arabic
#x05C3 | U+0623 | ARABIC LETTER ALEF WITH HAMZA ABOVE | Arabic
#x05C4 | U+0624 | ARABIC LETTER WAW WITH HAMZA ABOVE | Arabic
#x05C5 | U+0625 | ARABIC LETTER ALEF WITH HAMZA BELOW | Arabic
#x05C6 | U+0626 | ARABIC LETTER YEH WITH HAMZA ABOVE | Arabic
#x05C7 | U+0627 | ARABIC LETTER ALEF | Arabic
#x05C8 | U+0628 | ARABIC LETTER BEH | Arabic
#x05C9 | U+0629 | ARABIC LETTER TEH MARBUTA | Arabic
#x05CA | U+062A | ARABIC LETTER TEH | Arabic
#x05CB | U+062B | ARABIC LETTER THEH | Arabic
#x05CC | U+062C | ARABIC LETTER JEEM | Arabic
#x05CD | U+062D | ARABIC LETTER HAH | Arabic
#x05CE | U+062E | ARABIC LETTER KHAH | Arabic
#x05CF | U+062F | ARABIC LETTER DAL | Arabic
#x05D0 | U+0630 | ARABIC LETTER THAL | Arabic
#x05D1 | U+0631 | ARABIC LETTER REH | Arabic
#x05D2 | U+0632 | ARABIC LETTER ZAIN | Arabic
#x05D3 | U+0633 | ARABIC LETTER SEEN | Arabic
#x05D4 | U+0634 | ARABIC LETTER SHEEN | Arabic
#x05D5 | U+0635 | ARABIC LETTER SAD | Arabic
#x05D6 | U+0636 | ARABIC LETTER DAD | Arabic
#x05D7 | U+0637 | ARABIC LETTER TAH | Arabic
#x05D8 | U+0638 | ARABIC LETTER ZAH | Arabic
#x05D9 | U+0639 | ARABIC LETTER AIN | Arabic
#x05DA | U+063A | ARABIC LETTER GHAIN | Arabic
#x05E0 | U+0640 | ARABIC TATWEEL | Arabic
#x05E1 | U+0641 | ARABIC LETTER FEH | Arabic
#x05E2 | U+0642 | ARABIC LETTER QAF | Arabic
#x05E3 | U+0643 | ARABIC LETTER KAF | Arabic
#x05E4 | U+0644 | ARABIC LETTER LAM | Arabic
#x05E5 | U+0645 | ARABIC LETTER MEEM | Arabic
#x05E6 | U+0646 | ARABIC LETTER NOON | Arabic
#x05E7 | U+0647 | ARABIC LETTER HEH | Arabic
#x05E8 | U+0648 | ARABIC LETTER WAW | Arabic
#x05E9 | U+0649 | ARABIC LETTER ALEF MAKSURA | Arabic
#x05EA | U+064A | ARABIC LETTER YEH | Arabic
#x05EB | U+064B | ARABIC FATHATAN | Arabic
#x05EC | U+064C | ARABIC DAMMATAN | Arabic
#x05ED | U+064D | ARABIC KASRATAN | Arabic
#x05EE | U+064E | ARABIC FATHA | Arabic
#x05EF | U+064F | ARABIC DAMMA | Arabic
#x05F0 | U+0650 | ARABIC KASRA | Arabic
#x05F1 | U+0651 | ARABIC SHADDA | Arabic
#x05F2 | U+0652 | ARABIC SUKUN | Arabic
#x06A1 | U+0452 | CYRILLIC SMALL LETTER DJE | Cyrillic
#x06A2 | U+0453 | CYRILLIC SMALL LETTER GJE | Cyrillic
#x06A3 | U+0451 | CYRILLIC SMALL LETTER IO | Cyrillic
#x06A4 | U+0454 | CYRILLIC SMALL LETTER UKRAINIAN IE | Cyrillic
#x06A5 | U+0455 | CYRILLIC SMALL LETTER DZE | Cyrillic
#x06A6 | U+0456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I | Cyrillic
#x06A7 | U+0457 | CYRILLIC SMALL LETTER YI | Cyrillic
#x06A8 | U+0458 | CYRILLIC SMALL LETTER JE | Cyrillic
#x06A9 | U+0459 | CYRILLIC SMALL LETTER LJE | Cyrillic
#x06AA | U+045A | CYRILLIC SMALL LETTER NJE | Cyrillic
#x06AB | U+045B | CYRILLIC SMALL LETTER TSHE | Cyrillic
#x06AC | U+045C | CYRILLIC SMALL LETTER KJE | Cyrillic
#x06AD | U+0491 | CYRILLIC SMALL LETTER GHE WITH UPTURN | Cyrillic
#x06AE | U+045E | CYRILLIC SMALL LETTER SHORT U | Cyrillic
#x06AF | U+045F | CYRILLIC SMALL LETTER DZHE | Cyrillic
#x06B0 | U+2116 | NUMERO SIGN | Cyrillic
#x06B1 | U+0402 | CYRILLIC CAPITAL LETTER DJE | Cyrillic
#x06B2 | U+0403 | CYRILLIC CAPITAL LETTER GJE | Cyrillic
#x06B3 | U+0401 | CYRILLIC CAPITAL LETTER IO | Cyrillic
#x06B4 | U+0404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE | Cyrillic
#x06B5 | U+0405 | CYRILLIC CAPITAL LETTER DZE | Cyrillic
#x06B6 | U+0406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I | Cyrillic
#x06B7 | U+0407 | CYRILLIC CAPITAL LETTER YI | Cyrillic
#x06B8 | U+0408 | CYRILLIC CAPITAL LETTER JE | Cyrillic
#x06B9 | U+0409 | CYRILLIC CAPITAL LETTER LJE | Cyrillic
#x06BA | U+040A | CYRILLIC CAPITAL LETTER NJE | Cyrillic
#x06BB | U+040B | CYRILLIC CAPITAL LETTER TSHE | Cyrillic
#x06BC | U+040C | CYRILLIC CAPITAL LETTER KJE | Cyrillic
#x06BD | U+0490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN | Cyrillic
#x06BE | U+040E | CYRILLIC CAPITAL LETTER SHORT U | Cyrillic
#x06BF | U+040F | CYRILLIC CAPITAL LETTER DZHE | Cyrillic
#x06C0 | U+044E | CYRILLIC SMALL LETTER YU | Cyrillic
#x06C1 | U+0430 | CYRILLIC SMALL LETTER A | Cyrillic
#x06C2 | U+0431 | CYRILLIC SMALL LETTER BE | Cyrillic
#x06C3 | U+0446 | CYRILLIC SMALL LETTER TSE | Cyrillic
#x06C4 | U+0434 | CYRILLIC SMALL LETTER DE | Cyrillic
#x06C5 | U+0435 | CYRILLIC SMALL LETTER IE | Cyrillic
#x06C6 | U+0444 | CYRILLIC SMALL LETTER EF | Cyrillic
#x06C7 | U+0433 | CYRILLIC SMALL LETTER GHE | Cyrillic
#x06C8 | U+0445 | CYRILLIC SMALL LETTER HA | Cyrillic
#x06C9 | U+0438 | CYRILLIC SMALL LETTER I | Cyrillic
#x06CA | U+0439 | CYRILLIC SMALL LETTER SHORT I | Cyrillic
#x06CB | U+043A | CYRILLIC SMALL LETTER KA | Cyrillic
#x06CC | U+043B | CYRILLIC SMALL LETTER EL | Cyrillic
#x06CD | U+043C | CYRILLIC SMALL LETTER EM | Cyrillic
#x06CE | U+043D | CYRILLIC SMALL LETTER EN | Cyrillic
#x06CF | U+043E | CYRILLIC SMALL LETTER O | Cyrillic
#x06D0 | U+043F | CYRILLIC SMALL LETTER PE | Cyrillic
#x06D1 | U+044F | CYRILLIC SMALL LETTER YA | Cyrillic
#x06D2 | U+0440 | CYRILLIC SMALL LETTER ER | Cyrillic
#x06D3 | U+0441 | CYRILLIC SMALL LETTER ES | Cyrillic
#x06D4 | U+0442 | CYRILLIC SMALL LETTER TE | Cyrillic
#x06D5 | U+0443 | CYRILLIC SMALL LETTER U | Cyrillic
#x06D6 | U+0436 | CYRILLIC SMALL LETTER ZHE | Cyrillic
#x06D7 | U+0432 | CYRILLIC SMALL LETTER VE | Cyrillic
#x06D8 | U+044C | CYRILLIC SMALL LETTER SOFT SIGN | Cyrillic
#x06D9 | U+044B | CYRILLIC SMALL LETTER YERU | Cyrillic
#x06DA | U+0437 | CYRILLIC SMALL LETTER ZE | Cyrillic
#x06DB | U+0448 | CYRILLIC SMALL LETTER SHA | Cyrillic
#x06DC | U+044D | CYRILLIC SMALL LETTER E | Cyrillic
#x06DD | U+0449 | CYRILLIC SMALL LETTER SHCHA | Cyrillic
#x06DE | U+0447 | CYRILLIC SMALL LETTER CHE | Cyrillic
#x06DF | U+044A | CYRILLIC SMALL LETTER HARD SIGN | Cyrillic
#x06E0 | U+042E | CYRILLIC CAPITAL LETTER YU | Cyrillic
#x06E1 | U+0410 | CYRILLIC CAPITAL LETTER A | Cyrillic
#x06E2 | U+0411 | CYRILLIC CAPITAL LETTER BE | Cyrillic
#x06E3 | U+0426 | CYRILLIC CAPITAL LETTER TSE | Cyrillic
#x06E4 | U+0414 | CYRILLIC CAPITAL LETTER DE | Cyrillic
#x06E5 | U+0415 | CYRILLIC CAPITAL LETTER IE | Cyrillic
#x06E6 | U+0424 | CYRILLIC CAPITAL LETTER EF | Cyrillic
#x06E7 | U+0413 | CYRILLIC CAPITAL LETTER GHE | Cyrillic
#x06E8 | U+0425 | CYRILLIC CAPITAL LETTER HA | Cyrillic
#x06E9 | U+0418 | CYRILLIC CAPITAL LETTER I | Cyrillic
#x06EA | U+0419 | CYRILLIC CAPITAL LETTER SHORT I | Cyrillic
#x06EB | U+041A | CYRILLIC CAPITAL LETTER KA | Cyrillic
#x06EC | U+041B | CYRILLIC CAPITAL LETTER EL | Cyrillic
#x06ED | U+041C | CYRILLIC CAPITAL LETTER EM | Cyrillic
#x06EE | U+041D | CYRILLIC CAPITAL LETTER EN | Cyrillic
#x06EF | U+041E | CYRILLIC CAPITAL LETTER O | Cyrillic
#x06F0 | U+041F | CYRILLIC CAPITAL LETTER PE | Cyrillic
#x06F1 | U+042F | CYRILLIC CAPITAL LETTER YA | Cyrillic
#x06F2 | U+0420 | CYRILLIC CAPITAL LETTER ER | Cyrillic
#x06F3 | U+0421 | CYRILLIC CAPITAL LETTER ES | Cyrillic
#x06F4 | U+0422 | CYRILLIC CAPITAL LETTER TE | Cyrillic
#x06F5 | U+0423 | CYRILLIC CAPITAL LETTER U | Cyrillic
#x06F6 | U+0416 | CYRILLIC CAPITAL LETTER ZHE | Cyrillic
#x06F7 | U+0412 | CYRILLIC CAPITAL LETTER VE | Cyrillic
#x06F8 | U+042C | CYRILLIC CAPITAL LETTER SOFT SIGN | Cyrillic
#x06F9 | U+042B | CYRILLIC CAPITAL LETTER YERU | Cyrillic
#x06FA | U+0417 | CYRILLIC CAPITAL LETTER ZE | Cyrillic
#x06FB | U+0428 | CYRILLIC CAPITAL LETTER SHA | Cyrillic
#x06FC | U+042D | CYRILLIC CAPITAL LETTER E | Cyrillic
#x06FD | U+0429 | CYRILLIC CAPITAL LETTER SHCHA | Cyrillic
#x06FE | U+0427 | CYRILLIC CAPITAL LETTER CHE | Cyrillic
#x06FF | U+042A | CYRILLIC CAPITAL LETTER HARD SIGN | Cyrillic
#x07A1 | U+0386 | GREEK CAPITAL LETTER ALPHA WITH TONOS | Greek
#x07A2 | U+0388 | GREEK CAPITAL LETTER EPSILON WITH TONOS | Greek
#x07A3 | U+0389 | GREEK CAPITAL LETTER ETA WITH TONOS | Greek
#x07A4 | U+038A | GREEK CAPITAL LETTER IOTA WITH TONOS | Greek
#x07A5 | U+03AA | GREEK CAPITAL LETTER IOTA WITH DIALYTIKA | Greek
#x07A7 | U+038C | GREEK CAPITAL LETTER OMICRON WITH TONOS | Greek
#x07A8 | U+038E | GREEK CAPITAL LETTER UPSILON WITH TONOS | Greek
#x07A9 | U+03AB | GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA | Greek
#x07AB | U+038F | GREEK CAPITAL LETTER OMEGA WITH TONOS | Greek
#x07AE | U+0385 | GREEK DIALYTIKA TONOS | Greek
#x07AF | U+2015 | HORIZONTAL BAR | Greek
#x07B1 | U+03AC | GREEK SMALL LETTER ALPHA WITH TONOS | Greek
#x07B2 | U+03AD | GREEK SMALL LETTER EPSILON WITH TONOS | Greek
#x07B3 | U+03AE | GREEK SMALL LETTER ETA WITH TONOS | Greek
#x07B4 | U+03AF | GREEK SMALL LETTER IOTA WITH TONOS | Greek
#x07B5 | U+03CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA | Greek
#x07B6 | U+0390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS | Greek
#x07B7 | U+03CC | GREEK SMALL LETTER OMICRON WITH TONOS | Greek
#x07B8 | U+03CD | GREEK SMALL LETTER UPSILON WITH TONOS | Greek
#x07B9 | U+03CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA | Greek
#x07BA | U+03B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS | Greek
#x07BB | U+03CE | GREEK SMALL LETTER OMEGA WITH TONOS | Greek
#x07C1 | U+0391 | GREEK CAPITAL LETTER ALPHA | Greek
#x07C2 | U+0392 | GREEK CAPITAL LETTER BETA | Greek
#x07C3 | U+0393 | GREEK CAPITAL LETTER GAMMA | Greek
#x07C4 | U+0394 | GREEK CAPITAL LETTER DELTA | Greek
#x07C5 | U+0395 | GREEK CAPITAL LETTER EPSILON | Greek
#x07C6 | U+0396 | GREEK CAPITAL LETTER ZETA | Greek
#x07C7 | U+0397 | GREEK CAPITAL LETTER ETA | Greek
#x07C8 | U+0398 | GREEK CAPITAL LETTER THETA | Greek
#x07C9 | U+0399 | GREEK CAPITAL LETTER IOTA | Greek
#x07CA | U+039A | GREEK CAPITAL LETTER KAPPA | Greek
#x07CB | U+039B | GREEK CAPITAL LETTER LAMDA | Greek
#x07CC | U+039C | GREEK CAPITAL LETTER MU | Greek
#x07CD | U+039D | GREEK CAPITAL LETTER NU | Greek
#x07CE | U+039E | GREEK CAPITAL LETTER XI | Greek
#x07CF | U+039F | GREEK CAPITAL LETTER OMICRON | Greek
#x07D0 | U+03A0 | GREEK CAPITAL LETTER PI | Greek
#x07D1 | U+03A1 | GREEK CAPITAL LETTER RHO | Greek
#x07D2 | U+03A3 | GREEK CAPITAL LETTER SIGMA | Greek
#x07D4 | U+03A4 | GREEK CAPITAL LETTER TAU | Greek
#x07D5 | U+03A5 | GREEK CAPITAL LETTER UPSILON | Greek
#x07D6 | U+03A6 | GREEK CAPITAL LETTER PHI | Greek
#x07D7 | U+03A7 | GREEK CAPITAL LETTER CHI | Greek
#x07D8 | U+03A8 | GREEK CAPITAL LETTER PSI | Greek
#x07D9 | U+03A9 | GREEK CAPITAL LETTER OMEGA | Greek
#x07E1 | U+03B1 | GREEK SMALL LETTER ALPHA | Greek
#x07E2 | U+03B2 | GREEK SMALL LETTER BETA | Greek
#x07E3 | U+03B3 | GREEK SMALL LETTER GAMMA | Greek
#x07E4 | U+03B4 | GREEK SMALL LETTER DELTA | Greek
#x07E5 | U+03B5 | GREEK SMALL LETTER EPSILON | Greek
#x07E6 | U+03B6 | GREEK SMALL LETTER ZETA | Greek
#x07E7 | U+03B7 | GREEK SMALL LETTER ETA | Greek
#x07E8 | U+03B8 | GREEK SMALL LETTER THETA | Greek
#x07E9 | U+03B9 | GREEK SMALL LETTER IOTA | Greek
#x07EA | U+03BA | GREEK SMALL LETTER KAPPA | Greek
#x07EB | U+03BB | GREEK SMALL LETTER LAMDA | Greek
#x07EC | U+03BC | GREEK SMALL LETTER MU | Greek
#x07ED | U+03BD | GREEK SMALL LETTER NU | Greek
#x07EE | U+03BE | GREEK SMALL LETTER XI | Greek
#x07EF | U+03BF | GREEK SMALL LETTER OMICRON | Greek
#x07F0 | U+03C0 | GREEK SMALL LETTER PI | Greek
#x07F1 | U+03C1 | GREEK SMALL LETTER RHO | Greek
#x07F2 | U+03C3 | GREEK SMALL LETTER SIGMA | Greek
#x07F3 | U+03C2 | GREEK SMALL LETTER FINAL SIGMA | Greek
#x07F4 | U+03C4 | GREEK SMALL LETTER TAU | Greek
#x07F5 | U+03C5 | GREEK SMALL LETTER UPSILON | Greek
#x07F6 | U+03C6 | GREEK SMALL LETTER PHI | Greek
#x07F7 | U+03C7 | GREEK SMALL LETTER CHI | Greek
#x07F8 | U+03C8 | GREEK SMALL LETTER PSI | Greek
#x07F9 | U+03C9 | GREEK SMALL LETTER OMEGA | Greek
#x08A1 | U+23B7 | LEFT RADICAL | Technical
#x08A2 | - | TOP LEFT RADICAL | Technical
#x08A3 | - | HORIZONTAL CONNECTOR | Technical
#x08A4 | U+2320 | TOP INTEGRAL | Technical
#x08A5 | U+2321 | BOTTOM INTEGRAL | Technical
#x08A6 | - | VERTICAL CONNECTOR | Technical
#x08A7 | U+23A1 | TOP LEFT SQUARE BRACKET | Technical
#x08A8 | U+23A3 | BOTTOM LEFT SQUARE BRACKET | Technical
#x08A9 | U+23A4 | TOP RIGHT SQUARE BRACKET | Technical
#x08AA | U+23A6 | BOTTOM RIGHT SQUARE BRACKET | Technical
#x08AB | U+239B | TOP LEFT PARENTHESIS | Technical
#x08AC | U+239D | BOTTOM LEFT PARENTHESIS | Technical
#x08AD | U+239E | TOP RIGHT PARENTHESIS | Technical
#x08AE | U+23A0 | BOTTOM RIGHT PARENTHESIS | Technical
#x08AF | U+23A8 | LEFT MIDDLE CURLY BRACE | Technical
#x08B0 | U+23AC | RIGHT MIDDLE CURLY BRACE | Technical
#x08B1 | - | TOP LEFT SUMMATION | Technical
#x08B2 | - | BOTTOM LEFT SUMMATION | Technical
#x08B3 | - | TOP VERTICAL SUMMATION CONNECTOR | Technical
#x08B4 | - | BOTTOM VERTICAL SUMMATION CONNECTOR | Technical
#x08B5 | - | TOP RIGHT SUMMATION | Technical
#x08B6 | - | BOTTOM RIGHT SUMMATION | Technical
#x08B7 | - | RIGHT MIDDLE SUMMATION | Technical
#x08BC | U+2264 | LESS THAN OR EQUAL SIGN | Technical
#x08BD | U+2260 | NOT EQUAL SIGN | Technical
#x08BE | U+2265 | GREATER THAN OR EQUAL SIGN | Technical
#x08BF | U+222B | INTEGRAL | Technical
#x08C0 | U+2234 | THEREFORE | Technical
#x08C1 | U+221D | VARIATION, PROPORTIONAL TO | Technical
#x08C2 | U+221E | INFINITY | Technical
#x08C5 | U+2207 | NABLA, DEL | Technical
#x08C8 | U+223C | IS APPROXIMATE TO | Technical
#x08C9 | U+2243 | SIMILAR OR EQUAL TO | Technical
#x08CD | U+21D4 | IF AND ONLY IF | Technical
#x08CE | U+21D2 | IMPLIES | Technical
#x08CF | U+2261 | IDENTICAL TO | Technical
#x08D6 | U+221A | RADICAL | Technical
#x08DA | U+2282 | IS INCLUDED IN | Technical
#x08DB | U+2283 | INCLUDES | Technical
#x08DC | U+2229 | INTERSECTION | Technical
#x08DD | U+222A | UNION | Technical
#x08DE | U+2227 | LOGICAL AND | Technical
#x08DF | U+2228 | LOGICAL OR | Technical
#x08EF | U+2202 | PARTIAL DERIVATIVE | Technical
#x08F6 | U+0192 | FUNCTION | Technical
#x08FB | U+2190 | LEFT ARROW | Technical
#x08FC | U+2191 | UPWARD ARROW | Technical
#x08FD | U+2192 | RIGHT ARROW | Technical
#x08FE | U+2193 | DOWNWARD ARROW | Technical
#x09DF | - | BLANK | Special
#x09E0 | U+25C6 | SOLID DIAMOND | Special
#x09E1 | U+2592 | CHECKERBOARD | Special
#x09E2 | U+2409 | "HT" | Special
#x09E3 | U+240C | "FF" | Special
#x09E4 | U+240D | "CR" | Special
#x09E5 | U+240A | "LF" | Special
#x09E8 | U+2424 | "NL" | Special
#x09E9 | U+240B | "VT" | Special
#x09EA | U+2518 | LOWER-RIGHT CORNER | Special
#x09EB | U+2510 | UPPER-RIGHT CORNER | Special
#x09EC | U+250C | UPPER-LEFT CORNER | Special
#x09ED | U+2514 | LOWER-LEFT CORNER | Special
#x09EE | U+253C | CROSSING-LINES | Special
#x09EF | U+23BA | HORIZONTAL LINE, SCAN 1 | Special
#x09F0 | U+23BB | HORIZONTAL LINE, SCAN 3 | Special
#x09F1 | U+2500 | HORIZONTAL LINE, SCAN 5 | Special
#x09F2 | U+23BC | HORIZONTAL LINE, SCAN 7 | Special
#x09F3 | U+23BD | HORIZONTAL LINE, SCAN 9 | Special
#x09F4 | U+251C | LEFT "T" | Special
#x09F5 | U+2524 | RIGHT "T" | Special
#x09F6 | U+2534 | BOTTOM "T" | Special
#x09F7 | U+252C | TOP "T" | Special
#x09F8 | U+2502 | VERTICAL BAR | Special
#x0AA1 | U+2003 | EM SPACE | Publish
#x0AA2 | U+2002 | EN SPACE | Publish
#x0AA3 | U+2004 | 3/EM SPACE | Publish
#x0AA4 | U+2005 | 4/EM SPACE | Publish
#x0AA5 | U+2007 | DIGIT SPACE | Publish
#x0AA6 | U+2008 | PUNCTUATION SPACE | Publish
#x0AA7 | U+2009 | THIN SPACE | Publish
#x0AA8 | U+200A | HAIR SPACE | Publish
#x0AA9 | U+2014 | EM DASH | Publish
#x0AAA | U+2013 | EN DASH | Publish
#x0AAC | - | SIGNIFICANT BLANK SYMBOL | Publish
#x0AAE | U+2026 | ELLIPSIS | Publish
#x0AAF | U+2025 | DOUBLE BASELINE DOT | Publish
#x0AB0 | U+2153 | VULGAR FRACTION ONE THIRD | Publish
#x0AB1 | U+2154 | VULGAR FRACTION TWO THIRDS | Publish
#x0AB2 | U+2155 | VULGAR FRACTION ONE FIFTH | Publish
#x0AB3 | U+2156 | VULGAR FRACTION TWO FIFTHS | Publish
#x0AB4 | U+2157 | VULGAR FRACTION THREE FIFTHS | Publish
#x0AB5 | U+2158 | VULGAR FRACTION FOUR FIFTHS | Publish
#x0AB6 | U+2159 | VULGAR FRACTION ONE SIXTH | Publish
#x0AB7 | U+215A | VULGAR FRACTION FIVE SIXTHS | Publish
#x0AB8 | U+2105 | CARE OF | Publish
#x0ABB | U+2012 | FIGURE DASH | Publish
#x0ABC | - | LEFT ANGLE BRACKET | Publish
#x0ABD | - | DECIMAL POINT | Publish
#x0ABE | - | RIGHT ANGLE BRACKET | Publish
#x0ABF | - | MARKER | Publish
#x0AC3 | U+215B | VULGAR FRACTION ONE EIGHTH | Publish
#x0AC4 | U+215C | VULGAR FRACTION THREE EIGHTHS | Publish
#x0AC5 | U+215D | VULGAR FRACTION FIVE EIGHTHS | Publish
#x0AC6 | U+215E | VULGAR FRACTION SEVEN EIGHTHS | Publish
#x0AC9 | U+2122 | TRADEMARK SIGN | Publish
#x0ACA | - | SIGNATURE MARK | Publish
#x0ACB | - | TRADEMARK SIGN IN CIRCLE | Publish
#x0ACC | - | LEFT OPEN TRIANGLE | Publish
#x0ACD | - | RIGHT OPEN TRIANGLE | Publish
#x0ACE | - | EM OPEN CIRCLE | Publish
#x0ACF | - | EM OPEN RECTANGLE | Publish
#x0AD0 | U+2018 | LEFT SINGLE QUOTATION MARK | Publish
#x0AD1 | U+2019 | RIGHT SINGLE QUOTATION MARK | Publish
#x0AD2 | U+201C | LEFT DOUBLE QUOTATION MARK | Publish
#x0AD3 | U+201D | RIGHT DOUBLE QUOTATION MARK | Publish
#x0AD4 | U+211E | PRESCRIPTION, TAKE, RECIPE | Publish
#x0AD5 | U+2030 | PER MILLE SIGN | Publish
#x0AD6 | U+2032 | MINUTES | Publish
#x0AD7 | U+2033 | SECONDS | Publish
#x0AD9 | U+271D | LATIN CROSS | Publish
#x0ADA | - | HEXAGRAM | Publish
#x0ADB | - | FILLED RECTANGLE BULLET | Publish
#x0ADC | - | FILLED LEFT TRIANGLE BULLET | Publish
#x0ADD | - | FILLED RIGHT TRIANGLE BULLET | Publish
#x0ADE | - | EM FILLED CIRCLE | Publish
#x0ADF | - | EM FILLED RECTANGLE | Publish
#x0AE0 | - | EN OPEN CIRCLE BULLET | Publish
#x0AE1 | - | EN OPEN SQUARE BULLET | Publish
#x0AE2 | - | OPEN RECTANGULAR BULLET | Publish
#x0AE3 | - | OPEN TRIANGULAR BULLET UP | Publish
#x0AE4 | - | OPEN TRIANGULAR BULLET DOWN | Publish
#x0AE5 | - | OPEN STAR | Publish
#x0AE6 | - | EN FILLED CIRCLE BULLET | Publish
#x0AE7 | - | EN FILLED SQUARE BULLET | Publish
#x0AE8 | - | FILLED TRIANGULAR BULLET UP | Publish
#x0AE9 | - | FILLED TRIANGULAR BULLET DOWN | Publish
#x0AEA | - | LEFT POINTER | Publish
#x0AEB | - | RIGHT POINTER | Publish
#x0AEC | U+2663 | CLUB | Publish
#x0AED | U+2666 | DIAMOND | Publish
#x0AEE | U+2665 | HEART | Publish
#x0AF0 | U+2720 | MALTESE CROSS | Publish
#x0AF1 | U+2020 | DAGGER | Publish
#x0AF2 | U+2021 | DOUBLE DAGGER | Publish
#x0AF3 | U+2713 | CHECK MARK, TICK | Publish
#x0AF4 | U+2717 | BALLOT CROSS | Publish
#x0AF5 | U+266F | MUSICAL SHARP | Publish
#x0AF6 | U+266D | MUSICAL FLAT | Publish
#x0AF7 | U+2642 | MALE SYMBOL | Publish
#x0AF8 | U+2640 | FEMALE SYMBOL | Publish
#x0AF9 | U+260E | TELEPHONE SYMBOL | Publish
#x0AFA | U+2315 | TELEPHONE RECORDER SYMBOL | Publish
#x0AFB | U+2117 | PHONOGRAPH COPYRIGHT SIGN | Publish
#x0AFC | U+2038 | CARET | Publish
#x0AFD | U+201A | SINGLE LOW QUOTATION MARK | Publish
#x0AFE | U+201E | DOUBLE LOW QUOTATION MARK | Publish
#x0AFF | - | CURSOR | Publish
#x0BA3 | - | LEFT CARET | APL
#x0BA6 | - | RIGHT CARET | APL
#x0BA8 | - | DOWN CARET | APL
#x0BA9 | - | UP CARET | APL
#x0BC0 | - | OVERBAR | APL
#x0BC2 | U+22A5 | DOWN TACK | APL
#x0BC3 | - | UP SHOE (CAP) | APL
#x0BC4 | U+230A | DOWN STILE | APL
#x0BC6 | - | UNDERBAR | APL
#x0BCA | U+2218 | JOT | APL
#x0BCC | U+2395 | QUAD | APL
#x0BCE | U+22A4 | UP TACK | APL
#x0BCF | U+25CB | CIRCLE | APL
#x0BD3 | U+2308 | UP STILE | APL
#x0BD6 | - | DOWN SHOE (CUP) | APL
#x0BD8 | - | RIGHT SHOE | APL
#x0BDA | - | LEFT SHOE | APL
#x0BDC | U+22A2 | LEFT TACK | APL
#x0BFC | U+22A3 | RIGHT TACK | APL
#x0CDF | U+2017 | DOUBLE LOW LINE | Hebrew
#x0CE0 | U+05D0 | HEBREW LETTER ALEF | Hebrew
#x0CE1 | U+05D1 | HEBREW LETTER BET | Hebrew
#x0CE2 | U+05D2 | HEBREW LETTER GIMEL | Hebrew
#x0CE3 | U+05D3 | HEBREW LETTER DALET | Hebrew
#x0CE4 | U+05D4 | HEBREW LETTER HE | Hebrew
#x0CE5 | U+05D5 | HEBREW LETTER VAV | Hebrew
#x0CE6 | U+05D6 | HEBREW LETTER ZAYIN | Hebrew
#x0CE7 | U+05D7 | HEBREW LETTER HET | Hebrew
#x0CE8 | U+05D8 | HEBREW LETTER TET | Hebrew
#x0CE9 | U+05D9 | HEBREW LETTER YOD | Hebrew
#x0CEA | U+05DA | HEBREW LETTER FINAL KAF | Hebrew
#x0CEB | U+05DB | HEBREW LETTER KAF | Hebrew
#x0CEC | U+05DC | HEBREW LETTER LAMED | Hebrew
#x0CED | U+05DD | HEBREW LETTER FINAL MEM | Hebrew
#x0CEE | U+05DE | HEBREW LETTER MEM | Hebrew
#x0CEF | U+05DF | HEBREW LETTER FINAL NUN | Hebrew
#x0CF0 | U+05E0 | HEBREW LETTER NUN | Hebrew
#x0CF1 | U+05E1 | HEBREW LETTER SAMEKH | Hebrew
#x0CF2 | U+05E2 | HEBREW LETTER AYIN | Hebrew
#x0CF3 | U+05E3 | HEBREW LETTER FINAL PE | Hebrew
#x0CF4 | U+05E4 | HEBREW LETTER PE | Hebrew
#x0CF5 | U+05E5 | HEBREW LETTER FINAL TSADI | Hebrew
#x0CF6 | U+05E6 | HEBREW LETTER TSADI | Hebrew
#x0CF7 | U+05E7 | HEBREW LETTER QOF | Hebrew
#x0CF8 | U+05E8 | HEBREW LETTER RESH | Hebrew
#x0CF9 | U+05E9 | HEBREW LETTER SHIN | Hebrew
#x0CFA | U+05EA | HEBREW LETTER TAV | Hebrew
#x0DA1 | U+0E01 | THAI CHARACTER KO KAI | Thai
#x0DA2 | U+0E02 | THAI CHARACTER KHO KHAI | Thai
#x0DA3 | U+0E03 | THAI CHARACTER KHO KHUAT | Thai
#x0DA4 | U+0E04 | THAI CHARACTER KHO KHWAI | Thai
#x0DA5 | U+0E05 | THAI CHARACTER KHO KHON | Thai
#x0DA6 | U+0E06 | THAI CHARACTER KHO RAKHANG | Thai
#x0DA7 | U+0E07 | THAI CHARACTER NGO NGU | Thai
#x0DA8 | U+0E08 | THAI CHARACTER CHO CHAN | Thai
#x0DA9 | U+0E09 | THAI CHARACTER CHO CHING | Thai
#x0DAA | U+0E0A | THAI CHARACTER CHO CHANG | Thai
#x0DAB | U+0E0B | THAI CHARACTER SO SO | Thai
#x0DAC | U+0E0C | THAI CHARACTER CHO CHOE | Thai
#x0DAD | U+0E0D | THAI CHARACTER YO YING | Thai
#x0DAE | U+0E0E | THAI CHARACTER DO CHADA | Thai
#x0DAF | U+0E0F | THAI CHARACTER TO PATAK | Thai
#x0DB0 | U+0E10 | THAI CHARACTER THO THAN | Thai
#x0DB1 | U+0E11 | THAI CHARACTER THO NANGMONTHO | Thai
#x0DB2 | U+0E12 | THAI CHARACTER THO PHUTHAO | Thai
#x0DB3 | U+0E13 | THAI CHARACTER NO NEN | Thai
#x0DB4 | U+0E14 | THAI CHARACTER DO DEK | Thai
#x0DB5 | U+0E15 | THAI CHARACTER TO TAO | Thai
#x0DB6 | U+0E16 | THAI CHARACTER THO THUNG | Thai
#x0DB7 | U+0E17 | THAI CHARACTER THO THAHAN | Thai
#x0DB8 | U+0E18 | THAI CHARACTER THO THONG | Thai
#x0DB9 | U+0E19 | THAI CHARACTER NO NU | Thai
#x0DBA | U+0E1A | THAI CHARACTER BO BAIMAI | Thai
#x0DBB | U+0E1B | THAI CHARACTER PO PLA | Thai
#x0DBC | U+0E1C | THAI CHARACTER PHO PHUNG | Thai
#x0DBD | U+0E1D | THAI CHARACTER FO FA | Thai
#x0DBE | U+0E1E | THAI CHARACTER PHO PHAN | Thai
#x0DBF | U+0E1F | THAI CHARACTER FO FAN | Thai
#x0DC0 | U+0E20 | THAI CHARACTER PHO SAMPHAO | Thai
#x0DC1 | U+0E21 | THAI CHARACTER MO MA | Thai
#x0DC2 | U+0E22 | THAI CHARACTER YO YAK | Thai
#x0DC3 | U+0E23 | THAI CHARACTER RO RUA | Thai
#x0DC4 | U+0E24 | THAI CHARACTER RU | Thai
#x0DC5 | U+0E25 | THAI CHARACTER LO LING | Thai
#x0DC6 | U+0E26 | THAI CHARACTER LU | Thai
#x0DC7 | U+0E27 | THAI CHARACTER WO WAEN | Thai
#x0DC8 | U+0E28 | THAI CHARACTER SO SALA | Thai
#x0DC9 | U+0E29 | THAI CHARACTER SO RUSI | Thai
#x0DCA | U+0E2A | THAI CHARACTER SO SUA | Thai
#x0DCB | U+0E2B | THAI CHARACTER HO HIP | Thai
#x0DCC | U+0E2C | THAI CHARACTER LO CHULA | Thai
#x0DCD | U+0E2D | THAI CHARACTER O ANG | Thai
#x0DCE | U+0E2E | THAI CHARACTER HO NOKHUK | Thai
#x0DCF | U+0E2F | THAI CHARACTER PAIYANNOI | Thai
#x0DD0 | U+0E30 | THAI CHARACTER SARA A | Thai
#x0DD1 | U+0E31 | THAI CHARACTER MAI HAN-AKAT | Thai
#x0DD2 | U+0E32 | THAI CHARACTER SARA AA | Thai
#x0DD3 | U+0E33 | THAI CHARACTER SARA AM | Thai
#x0DD4 | U+0E34 | THAI CHARACTER SARA I | Thai
#x0DD5 | U+0E35 | THAI CHARACTER SARA II | Thai
#x0DD6 | U+0E36 | THAI CHARACTER SARA UE | Thai
#x0DD7 | U+0E37 | THAI CHARACTER SARA UEE | Thai
#x0DD8 | U+0E38 | THAI CHARACTER SARA U | Thai
#x0DD9 | U+0E39 | THAI CHARACTER SARA UU | Thai
#x0DDA | U+0E3A | THAI CHARACTER PHINTHU | Thai
#x0DDF | U+0E3F | THAI CURRENCY SYMBOL BAHT | Thai
#x0DE0 | U+0E40 | THAI CHARACTER SARA E | Thai
#x0DE1 | U+0E41 | THAI CHARACTER SARA AE | Thai
#x0DE2 | U+0E42 | THAI CHARACTER SARA O | Thai
#x0DE3 | U+0E43 | THAI CHARACTER SARA AI MAIMUAN | Thai
#x0DE4 | U+0E44 | THAI CHARACTER SARA AI MAIMALAI | Thai
#x0DE5 | U+0E45 | THAI CHARACTER LAKKHANGYAO | Thai
#x0DE6 | U+0E46 | THAI CHARACTER MAIYAMOK | Thai
#x0DE7 | U+0E47 | THAI CHARACTER MAITAIKHU | Thai
#x0DE8 | U+0E48 | THAI CHARACTER MAI EK | Thai
#x0DE9 | U+0E49 | THAI CHARACTER MAI THO | Thai
#x0DEA | U+0E4A | THAI CHARACTER MAI TRI | Thai
#x0DEB | U+0E4B | THAI CHARACTER MAI CHATTAWA | Thai
#x0DEC | U+0E4C | THAI CHARACTER THANTHAKHAT | Thai
#x0DED | U+0E4D | THAI CHARACTER NIKHAHIT | Thai
#x0DF0 | U+0E50 | THAI DIGIT ZERO | Thai
#x0DF1 | U+0E51 | THAI DIGIT ONE | Thai
#x0DF2 | U+0E52 | THAI DIGIT TWO | Thai
#x0DF3 | U+0E53 | THAI DIGIT THREE | Thai
#x0DF4 | U+0E54 | THAI DIGIT FOUR | Thai
#x0DF5 | U+0E55 | THAI DIGIT FIVE | Thai
#x0DF6 | U+0E56 | THAI DIGIT SIX | Thai
#x0DF7 | U+0E57 | THAI DIGIT SEVEN | Thai
#x0DF8 | U+0E58 | THAI DIGIT EIGHT | Thai
#x0DF9 | U+0E59 | THAI DIGIT NINE | Thai
#x0EA1 | - | HANGUL KIYEOG | Korean
#x0EA2 | - | HANGUL SSANG KIYEOG | Korean
#x0EA3 | - | HANGUL KIYEOG SIOS | Korean
#x0EA4 | - | HANGUL NIEUN | Korean
#x0EA5 | - | HANGUL NIEUN JIEUJ | Korean
#x0EA6 | - | HANGUL NIEUN HIEUH | Korean
#x0EA7 | - | HANGUL DIKEUD | Korean
#x0EA8 | - | HANGUL SSANG DIKEUD | Korean
#x0EA9 | - | HANGUL RIEUL | Korean
#x0EAA | - | HANGUL RIEUL KIYEOG | Korean
#x0EAB | - | HANGUL RIEUL MIEUM | Korean
#x0EAC | - | HANGUL RIEUL PIEUB | Korean
#x0EAD | - | HANGUL RIEUL SIOS | Korean
#x0EAE | - | HANGUL RIEUL TIEUT | Korean
#x0EAF | - | HANGUL RIEUL PHIEUF | Korean
#x0EB0 | - | HANGUL RIEUL HIEUH | Korean
#x0EB1 | - | HANGUL MIEUM | Korean
#x0EB2 | - | HANGUL PIEUB | Korean
#x0EB3 | - | HANGUL SSANG PIEUB | Korean
#x0EB4 | - | HANGUL PIEUB SIOS | Korean
#x0EB5 | - | HANGUL SIOS | Korean
#x0EB6 | - | HANGUL SSANG SIOS | Korean
#x0EB7 | - | HANGUL IEUNG | Korean
#x0EB8 | - | HANGUL JIEUJ | Korean
#x0EB9 | - | HANGUL SSANG JIEUJ | Korean
#x0EBA | - | HANGUL CIEUC | Korean
#x0EBB | - | HANGUL KHIEUQ | Korean
#x0EBC | - | HANGUL TIEUT | Korean
#x0EBD | - | HANGUL PHIEUF | Korean
#x0EBE | - | HANGUL HIEUH | Korean
#x0EBF | - | HANGUL A | Korean
#x0EC0 | - | HANGUL AE | Korean
#x0EC1 | - | HANGUL YA | Korean
#x0EC2 | - | HANGUL YAE | Korean
#x0EC3 | - | HANGUL EO | Korean
#x0EC4 | - | HANGUL E | Korean
#x0EC5 | - | HANGUL YEO | Korean
#x0EC6 | - | HANGUL YE | Korean
#x0EC7 | - | HANGUL O | Korean
#x0EC8 | - | HANGUL WA | Korean
#x0EC9 | - | HANGUL WAE | Korean
#x0ECA | - | HANGUL OE | Korean
#x0ECB | - | HANGUL YO | Korean
#x0ECC | - | HANGUL U | Korean
#x0ECD | - | HANGUL WEO | Korean
#x0ECE | - | HANGUL WE | Korean
#x0ECF | - | HANGUL WI | Korean
#x0ED0 | - | HANGUL YU | Korean
#x0ED1 | - | HANGUL EU | Korean
#x0ED2 | - | HANGUL YI | Korean
#x0ED3 | - | HANGUL I | Korean
#x0ED4 | - | HANGUL JONG SEONG KIYEOG | Korean
#x0ED5 | - | HANGUL JONG SEONG SSANG KIYEOG | Korean
#x0ED6 | - | HANGUL JONG SEONG KIYEOG SIOS | Korean
#x0ED7 | - | HANGUL JONG SEONG NIEUN | Korean
#x0ED8 | - | HANGUL JONG SEONG NIEUN JIEUJ | Korean
#x0ED9 | - | HANGUL JONG SEONG NIEUN HIEUH | Korean
#x0EDA | - | HANGUL JONG SEONG DIKEUD | Korean
#x0EDB | - | HANGUL JONG SEONG RIEUL | Korean
#x0EDC | - | HANGUL JONG SEONG RIEUL KIYEOG | Korean
#x0EDD | - | HANGUL JONG SEONG RIEUL MIEUM | Korean
#x0EDE | - | HANGUL JONG SEONG RIEUL PIEUB | Korean
#x0EDF | - | HANGUL JONG SEONG RIEUL SIOS | Korean
#x0EE0 | - | HANGUL JONG SEONG RIEUL TIEUT | Korean
#x0EE1 | - | HANGUL JONG SEONG RIEUL PHIEUF | Korean
#x0EE2 | - | HANGUL JONG SEONG RIEUL HIEUH | Korean
#x0EE3 | - | HANGUL JONG SEONG MIEUM | Korean
#x0EE4 | - | HANGUL JONG SEONG PIEUB | Korean
#x0EE5 | - | HANGUL JONG SEONG PIEUB SIOS | Korean
#x0EE6 | - | HANGUL JONG SEONG SIOS | Korean
#x0EE7 | - | HANGUL JONG SEONG SSANG SIOS | Korean
#x0EE8 | - | HANGUL JONG SEONG IEUNG | Korean
#x0EE9 | - | HANGUL JONG SEONG JIEUJ | Korean
#x0EEA | - | HANGUL JONG SEONG CIEUC | Korean
#x0EEB | - | HANGUL JONG SEONG KHIEUQ | Korean
#x0EEC | - | HANGUL JONG SEONG TIEUT | Korean
#x0EED | - | HANGUL JONG SEONG PHIEUF | Korean
#x0EEE | - | HANGUL JONG SEONG HIEUH | Korean
#x0EEF | - | HANGUL RIEUL YEORIN HIEUH | Korean
#x0EF0 | - | HANGUL SUNKYEONGEUM MIEUM | Korean
#x0EF1 | - | HANGUL SUNKYEONGEUM PIEUB | Korean
#x0EF2 | - | HANGUL PAN SIOS | Korean
#x0EF3 | - | HANGUL KKOGJI DALRIN IEUNG | Korean
#x0EF4 | - | HANGUL SUNKYEONGEUM PHIEUF | Korean
#x0EF5 | - | HANGUL YEORIN HIEUH | Korean
#x0EF6 | - | HANGUL ARAE A | Korean
#x0EF7 | - | HANGUL ARAE AE | Korean
#x0EF8 | - | HANGUL JONG SEONG PAN SIOS | Korean
#x0EF9 | - | HANGUL JONG SEONG KKOGJI DALRIN IEUNG | Korean
#x0EFA | - | HANGUL JONG SEONG YEORIN HIEUH | Korean
#x0EFF | - | KOREAN WON | Korean
#x13BC | U+0152 | LATIN CAPITAL LIGATURE OE | Latin-9
#x13BD | U+0153 | LATIN SMALL LIGATURE OE | Latin-9
#x13BE | U+0178 | LATIN CAPITAL LETTER Y WITH DIAERESIS | Latin-9
#x20A0 | - | CURRENCY ECU SIGN | Currency
#x20A1 | - | CURRENCY COLON SIGN | Currency
#x20A2 | - | CURRENCY CRUZEIRO SIGN | Currency
#x20A3 | - | CURRENCY FRENCH FRANC SIGN | Currency
#x20A4 | - | CURRENCY LIRA SIGN | Currency
#x20A5 | - | CURRENCY MILL SIGN | Currency
#x20A6 | - | CURRENCY NAIRA SIGN | Currency
#x20A7 | - | CURRENCY PESETA SIGN | Currency
#x20A8 | - | CURRENCY RUPEE SIGN | Currency
#x20A9 | - | CURRENCY WON SIGN | Currency
#x20AA | - | CURRENCY NEW SHEQEL SIGN | Currency
#x20AB | - | CURRENCY DONG SIGN | Currency
#x20AC | U+20AC | CURRENCY EURO SIGN | Currency

## 附録 B、プロトコルの符号

## 構文規約

全ての数字は１０進数である。但し、頭に #x が付いているものは、１６進数である。

リクエスト、リプライ(返答)、エラー、イベント、そして複合型(compound type)を記述するのに用いる構文は、基本的には次のような形をとる。

       NameofThing
       encode-form
       ...
       encode-form

上の記法における encode-form (符号化方式)は、それぞれ単一の構成要素(component)を表す。

プロトコルに記載されている構成要素の中、

       name: TYPE

という形式で記載されている構成要素は、下に示す符号化方式で記述する。

       N     TYPE     name

ここで、N は(TYPE型の)データ・ストリームが占めるバイト数であり、TYPE はそれらのバイトの解釈である。例えば、

       depth: CARD8

この構成要素は、次のような符号化方式で記述する。

       1     CARD8     depth

固定の数値を持つ構成要素は、次の符号化方式で記述する。

       N     value     name

ここでは、value は常に N バイトの符号なし整数として解釈する。例えば、Window エラーは、第１バイトは常に 0 であり(エラーであることを表す)、第２バイトは常に 3 である(エラーの中でも特に Window エラーであることを表す)ので、次のように記述する。

       1      0      Error
       1      3      code

プロトコルに記載されている構成要素の中、

name: { Name1,..., NameI}

という形式で記載されている構成要素は、次の符号化方式で記述する。

       N          name
            value1 Name1
            ...
            valueI NameI

ここで、value (の値)は常に N バイトの符号なし整数として解釈する。N のサイズは、これらの値を符号化するのに最低限必要なサイズよりも大きいことがある。例を挙げる。

class: { InputOutput, InputOnly, CopyFromParent }

上の構成要素は、次の符号化方式で記述する。

    2               class
         0     CopyFromParent
         1     InputOutput
         2     InputOnly

プロトコルに記載されている構成要素の中、

NAME: TYPE or Alternative1 ...or AlternativeI

という形式で記載されている構成要素は、次の符号化方式で記述する。

    N     TYPE               NAME
         value1     Alternative1
         ...
         valueI     AlternativeI

Alternative の値は、TYPE の符号と矛盾しないものになっている。例を挙げる。

destination: WINDOW or PointerWindow or InputFocus

上の構成要素は、次の符号化方式で記述する。

    4     WINDOW          destination
         0     PointerWindow
         1     InputFocus

プロトコルに記載されている構成要素の中、

       value-mask: BITMASK

という形式で記載されている構成要素は、次の符号化方式で記述する。

    N     BITMASK               value-mask
         mask1     mask-name1
         ...
         maskI     mask-nameI

マスク内の個々のビットを具体的を指定し、名前を付けてある。N は 2 または 4 である。BITMASK の中の最上位ビットは予約されており、拡張機能によってコア・リクエストが増えた場合に、連鎖状ビットマスク(chained bitmask)(multiword bitmask)を定義するのに使用する。このビットの正確な解釈はここでは規定しないが、おそらく次のようなやり方で使用することになる。即ち、最上位ビットに 1 を設定することによってさらに N バイトのビットマスクが続くことを表し、N バイトの塊の並びはストリームの順番で解釈し、N バイトの塊それぞれの中では各バイトを既定のバイト順に並べ替え、N バイトの塊の中の(並び替えた)各ビットマスクは最下位ビットから最上位ビットへと順番に解釈する、という方法である。

LISTofVALUE という符号がある場合、リクエスト(の符号)の後に次の形式の符号が続く。(訳註：CreateWindow の符号化表を参照。)

       VALUEs
       encode-form
       ...
       encode-form

上のような形式で各 VALUE が含む符号(の符号化方式)を１つ１つ列挙している。各符号化方式における NAME (訳註：CreateWidnow の VALUEs でいうと、background-pixmap や background-pixel の列) は、BITMASK の中の対応するビットを表している(訳註：CreateWindow においては BITMASK を用いて VALUEs の中のどの値を設定するのかを示す)。VALUEs 中の符号１つ(a VALUE)の長さは常に４バイトであるが、実際に使用する最下位バイトのバイト数が各符号化方式(encoding-form)のバイト数として記されている。残りのバイトは使用されず、その部分の値は問題にならない。

ある構成要素が占めるバイト数を表すのに、特定の数値ではなく小文字のアルファベット１文字の変数名を用いることがある。また、これとは別の構成要素の値を表すのに、同変数を用いた単純な数式を利用することもある。このような式で記された構成要素は、常に符号なし整数として解釈する。この変数の有効範囲は常に、同変数を使っているリクエスト、リプライ、エラー、イベント、及び複合型構造体(compound type structure)の内部に留まる。例を挙げる。

    2      3+n                  リクエストの長さ
    4n     LISTofPOINT          points

未使用バイト(各バイトの値は定義されておらず、どのような値でも問題にならない)の符号化方式は次の通り。

       N               unused

未使用バイトのバイト数が可変である場合、通常は次のような符号化方式で記述する。

       p               unused, p=pad(E)

ここでは、E は何らかの式であり、pad(E) は E を４の倍数に切り上げるために必要なバイトの数である。

       pad(E) = (4 - (E mod 4)) mod 4

## 共通の型

LISTofFOO | 本文書では、「LISTofFOO」という表記は FOO という型の符号を何回か繰り返すことを表す。リスト(配列)の実際の長さは別のフィールドで規定する。
SETofFOO | 集合(set)１つは常にビットマスク１つから成る。該当するマスクが集合の中に存在するか否かを 1 ビットを使って示す。

BITMASK: CARD32
WINDOW: CARD32
PIXMAP: CARD32
CURSOR: CARD32
FONT: CARD32
GCONTEXT: CARD32
COLORMAP: CARD32
DRAWABLE: CARD32
FONTABLE: CARD32
ATOM: CARD32
VISUALID: CARD32
BYTE: ８ビットの値
INT8: ８ビットの符号あり整数
INT16: １６ビットの符号あり整数
INT32: ３２ビットの符号あり整数
CARD8: ８ビットの符号なし整数
CARD16: １６ビットの符号なし整数
CARD32: ３２ビットの符号なし整数
TIMESTAMP: CARD32

    BITGRAVITY
         0     Forget
         1     NorthWest
         2     North
         3     NorthEast
         4     West
         5     Center
         6     East
         7     SouthWest
         8     South
         9     SouthEast
         10     Static

    WINGRAVITY
         0     Unmap
         1     NorthWest
         2     North
         3     NorthEast
         4     West
         5     Center
         6     East
         7     SouthWest
         8     South
         9     SouthEast
         10     Static

    BOOL
         0     False
         1     True

    SETofEVENT
         #x00000001     KeyPress
         #x00000002     KeyRelease
         #x00000004     ButtonPress
         #x00000008     ButtonRelease
         #x00000010     EnterWindow
         #x00000020     LeaveWindow
         #x00000040     PointerMotion
         #x00000080     PointerMotionHint
         #x00000100     Button1Motion
         #x00000200     Button2Motion
         #x00000400     Button3Motion
         #x00000800     Button4Motion
         #x00001000     Button5Motion
         #x00002000     ButtonMotion
         #x00004000     KeymapState
         #x00008000     Exposure
         #x00010000     VisibilityChange
         #x00020000     StructureNotify
         #x00040000     ResizeRedirect
         #x00080000     SubstructureNotify
         #x00100000     SubstructureRedirect
         #x00200000     FocusChange
         #x00400000     PropertyChange
         #x00800000     ColormapChange
         #x01000000     OwnerGrabButton
         #xFE000000     未使用だが 0 でなければならない。

    SETofPOINTEREVENT
         符号は、次の部分を除いて、SETofEVENT と同じである。
         #xFFFF8003     未使用だが 0 でなければならない。

    SETofDEVICEEVENT
         符号は、次の部分を除いて、SETofEVENT と同じである。
         #xFFFFC0B0     未使用だが 0 でなければならない。

    KEYSYM: CARD32
    KEYCODE: CARD8
    BUTTON: CARD8

    SETofKEYBUTMASK
         #x0001     Shift
         #x0002     Lock
         #x0004     Control
         #x0008     Mod1
         #x0010     Mod2
         #x0020     Mod3
         #x0040     Mod4
         #x0080     Mod5
         #x0100     Button1
         #x0200     Button2
         #x0400     Button3
         #x0800     Button4
         #x1000     Button5
         #xE000     未使用だが 0 でなければならない。

    SETofKEYMASK
         符号は、次の部分を除いて、SETofKEYBUTMASK と同じである。
         #xFF00          未使用だが 0 でなければならない。
    STRING8: LISTofCARD8
    STRING16: LISTofCHAR2B

    CHAR2B
         1     CARD8     byte1
         1     CARD8     byte2

    POINT
         2     INT16     x
         2     INT16     y

    RECTANGLE
         2     INT16     x
         2     INT16     y
         2     CARD16    width(幅)
         2     CARD16    height(高さ)

    ARC
         2     INT16     x
         2     INT16     y
         2     CARD16    width(幅)
         2     CARD16    height(高さ)
         2     INT16     angle1
         2     INT16     angle2

    HOST
         1                         family
               0         Internet
               1         DECnet
               2         Chaos
               5         ServerInterpreted
               6         InternetV6
         1                         未使用
         2      n                  アドレスの長さ
         n      LISTofBYTE         address
         p                         未使用, p=pad(n)

    STR
         1      n                  length of name in bytes
         n      STRING8            name

## エラー

    Request
         1     0                               Error
         1     1                               code
         2     CARD16                          通し番号
         4                                     未使用
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Value
         1     0                               Error
         1     2                               code
         2     CARD16                          通し番号
         4     <32-bits>                 bad value
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Window
         1     0                               Error
         1     3                               code
         2     CARD16                          通し番号
         4     CARD32                          bad resource id
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Pixmap
         1     0                               Error
         1     4                               code
         2     CARD16                          通し番号
         4     CARD32                          bad resource id
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Atom
         1     0                               Error
         1     5                               code
         2     CARD16                          通し番号
         4     CARD32                          bad atom id
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Cursor
         1     0                               Error
         1     6                               code
         2     CARD16                          通し番号
         4     CARD32                          bad resource id
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Font
         1     0                               Error
         1     7                               code
         2     CARD16                          通し番号
         4     CARD32                          bad resource id
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Match
         1     0                               Error
         1     8                               code
         2     CARD16                          通し番号
         4                                     未使用
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Drawable
         1     0                               Error
         1     9                               code
         2     CARD16                          通し番号
         4     CARD32                          bad resource id
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Access
         1     0                               Error
         1     10                              code
         2     CARD16                          通し番号
         4                                     未使用
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Alloc
         1     0                               Error
         1     11                              code
         2     CARD16                          通し番号
         4                                     未使用
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Colormap
         1     0                               Error
         1     12                              code
         2     CARD16                          通し番号
         4     CARD32                          bad resource id
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    GContext
         1     0                               Error
         1     13                              code
         2     CARD16                          通し番号
         4     CARD32                          bad resource id
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    IDChoice
         1     0                               Error
         1     14                              code
         2     CARD16                          通し番号
         4     CARD32                          bad resource id
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Name
         1     0                               Error
         1     15                              code
         2     CARD16                          通し番号
         4                                     未使用
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Length
         1     0                               Error
         1     16                              code
         2     CARD16                          通し番号
         4                                     未使用
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

    Implementation
         1     0                               Error
         1     17                              code
         2     CARD16                          通し番号
         4                                     未使用
         2     CARD16                          minor opcode
         1     CARD8                           major opcode
         21                                    未使用

## キーボード

KEYCODE(キーコード) の値は、常に 7 より大きな値である(そして 256 より小さい)。

KEYSYM の値の中「#x10000000 」のビットが設定されているものは、企業専用(vendor-specific)のものとして予約されている。

標準の KEYSYM の値の名称と符号は、「附録 A、キーシンボルの符号」に記載してある。

## ポインタ

BUTTON の値は、1 から順に付された番号である。(訳註：ポインタ装置、マウスなどのボタン)

## 既定のアトム(Predefined Atoms)

    PRIMARY           1      WM_NORMAL_HINTS     40
    SECONDARY         2      WM_SIZE_HINTS       41
    ARC               3      WM_ZOOM_HINTS       42
    ATOM              4      MIN_SPACE           43
    BITMAP            5      NORM_SPACE          44
    CARDINAL          6      MAX_SPACE           45
    COLORMAP          7      END_SPACE           46
    CURSOR            8      SUPERSCRIPT_X       47
    CUT_BUFFER0       9      SUPERSCRIPT_Y       48
    CUT_BUFFER1       10     SUBSCRIPT_X         49
    CUT_BUFFER2       11     SUBSCRIPT_Y         50
    CUT_BUFFER3       12     UNDERLINE_POSITION  51
    CUT_BUFFER4       13     UNDERLINE_THICKNESS 52
    CUT_BUFFER5       14     STRIKEOUT_ASCENT    53
    CUT_BUFFER6       15     STRIKEOUT_DESCENT   54
    CUT_BUFFER7       16     ITALIC_ANGLE        55
    DRAWABLE          17     X_HEIGHT            56
    FONT              18     QUAD_WIDTH          57
    INTEGER           19     WEIGHT              58
    PIXMAP            20     POINT_SIZE          59
    POINT             21     RESOLUTION          60
    RECTANGLE         22     COPYRIGHT           61
    RESOURCE_MANAGER  23     NOTICE              62
    RGB_COLOR_MAP     24     FONT_NAME           63
    RGB_BEST_MAP      25     FAMILY_NAME         64
    RGB_BLUE_MAP      26     FULL_NAME           65
    RGB_DEFAULT_MAP   27     CAP_HEIGHT          66
    RGB_GRAY_MAP      28     WM_CLASS            67
    RGB_GREEN_MAP     29     WM_TRANSIENT_FOR    68
    RGB_RED_MAP       30
    STRING            31
    VISUALID          32
    WINDOW            33
    WM_COMMAND        34
    WM_HINTS          35
    WM_CLIENT_MACHINE 36
    WM_ICON_NAME      37
    WM_ICON_SIZE      38
    WM_NAME           39

## 接続の設定

TCP 接続の場合、ホスト上のディスプレイ群に 0 から順に番号を付ける。そして、N 番のディスプレイのサーバはポート番号 6000 + N で接続の待ち受けと受け入れを行う。DECnet 接続の場合、ホスト上のディスプレイ群に 0 から順に番号を付け、N 番のディスプレイのサーバは、N の１０進数表現を「X$X」の後ろに付加して得られるオブジェクト名(例えば「X$X0」「X$X1」)で接続の待ち受けと受け入れを行う。

接続設定の際にクライアントが送信する情報は次の通り。

         1                       byte-order (バイト順)
              #x42     MSB first
              #x6C     LSB first
         1                       未使用
         2     CARD16            protocol-major-version
         2     CARD16            protocol-minor-version
         2     n                 length of authorization-protocol-name
         2     d                 length of authorization-protocol-data
         2                       未使用
         n     STRING8           authorization-protocol-name
         p                       未使用, p=pad(n)
         d     STRING8           authorization-protocol-data
         q                       未使用, q=pad(d)

本プロトコルで明示的に規定されている場合を除き、クライアントが送信する１６ビット単位及び３２ビット単位のデータは全て、byte-order で指定されたバイト順で転送されなければならない。また、サーバが返す１６ビット単位及び３２ビット単位のデータも全て、このバイト順で転送されることになる。

接続が拒否された場合にクライアントが受け取る情報は次の通り。

         1     0                 Failed
         1     n                 reason (理由)の長さ(単位はバイト)
         2     CARD16            protocol-major-version
         2     CARD16            protocol-minor-version
         2     (n+p)/4           "additional data" の長さ(単位は４バイト)
         n     STRING8           reason (理由)
         p                       未使用, p=pad(n)

更なる認証が必要な場合にクライアントが受け取る情報は次の通り。

         1     2                 Authenticate
         5                       未使用
         2     (n+p)/4           length in 4-byte units of "additional data"
         n     STRING8           reason
         p                       未使用, p=pad(n)

接続が受け入れられた場合にクライアントが受け取る情報は次の通り。

         1     1                               Success
         1                                     未使用
         2     CARD16                          protocol-major-version
         2     CARD16                          protocol-minor-version
         2     8+2n+(v+p+m)/4                  "additional data" の長さ(単位は４バイト)
         4     CARD32                          release-number
         4     CARD32                          resource-id-base
         4     CARD32                          resource-id-mask
         4     CARD32                          motion-buffer-size
         2     v                               下にある「vendor」の長さ
         2     CARD16                          maximum-request-length
         1     CARD8                           number of SCREENs in roots
         1     n                               number for FORMATs in
                                               pixmap-formats
         1                                     image-byte-order
              0     LSBFirst
              1     MSBFirst
         1                                     bitmap-format-bit-order
              0     LeastSignificant
              1     MostSignificant
         1     CARD8                           bitmap-format-scanline-unit
         1     CARD8                           bitmap-format-scanline-pad
         1     KEYCODE                         min-keycode
         1     KEYCODE                         max-keycode
         4                                     未使用
         v     STRING8                         vendor
         p                                     未使用, p=pad(v)
         8n     LISTofFORMAT                   pixmap-formats
         m     LISTofSCREEN                    roots (m is always a multiple of 4)

    FORMAT
         1     CARD8                           depth
         1     CARD8                           bits-per-pixel
         1     CARD8                           scanline-pad
         5                                     未使用

    SCREEN
         4     WINDOW                          root
         4     COLORMAP                        default-colormap
         4     CARD32                          white-pixel
         4     CARD32                          black-pixel
         4     SETofEVENT                      current-input-masks
         2     CARD16                          width-in-pixels
         2     CARD16                          height-in-pixels
         2     CARD16                          width-in-millimeters
         2     CARD16                          height-in-millimeters
         2     CARD16                          min-installed-maps
         2     CARD16                          max-installed-maps
         4     VISUALID                        root-visual
         1                                     backing-stores
              0     Never
              1     WhenMapped
              2     Always
         1     BOOL                            save-unders
         1     CARD8                           root-depth
         1     CARD8                           number of DEPTHs in allowed-depths
         n     LISTofDEPTH                     allowed-depths (n is always a
                                               multiple of 4)

    DEPTH
         1     CARD8                           depth
         1                                     未使用
         2     n                               number of VISUALTYPES in visuals
         4                                     未使用
         24n     LISTofVISUALTYPE              visuals

    VISUALTYPE
         4     VISUALID                        visual-id
         1                                     class
              0     StaticGray
              1     GrayScale
              2     StaticColor
              3     PseudoColor
              4     TrueColor
              5     DirectColor
         1     CARD8                           bits-per-rgb-value
         2     CARD16                          colormap-entries
         4     CARD32                          red-mask
         4     CARD32                          green-mask
         4     CARD32                          blue-mask
         4                                     未使用

## リクエスト

    CreateWindow
         1     1                               opcode
         1     CARD8                           depth
         2     8+n                             リクエストの長さ
         4     WINDOW                          wid
         4     WINDOW                          parent
         2     INT16                           x
         2     INT16                           y
         2     CARD16                          width
         2     CARD16                          height
         2     CARD16                          border-width
         2                                     class
              0     CopyFromParent
              1     InputOutput
              2     InputOnly
         4     VISUALID                        visual
              0     CopyFromParent
         4     BITMASK                         value-mask (has n bits set to 1)
              #x00000001     background-pixmap
              #x00000002     background-pixel
              #x00000004     border-pixmap
              #x00000008     border-pixel
              #x00000010     bit-gravity
              #x00000020     win-gravity
              #x00000040     backing-store
              #x00000080     backing-planes
              #x00000100     backing-pixel
              #x00000200     override-redirect
              #x00000400     save-under
              #x00000800     event-mask
              #x00001000     do-not-propagate-mask
              #x00002000     colormap
              #x00004000     cursor
         4n     LISTofVALUE                    value-list

      VALUEs
         4     PIXMAP                          background-pixmap
              0     None
              1     ParentRelative
         4     CARD32                          background-pixel
         4     PIXMAP                          border-pixmap
              0     CopyFromParent
         4     CARD32                          border-pixel
         1     BITGRAVITY                      bit-gravity
         1     WINGRAVITY                      win-gravity
         1                                     backing-store
              0     NotUseful
              1     WhenMapped
              2     Always
         4     CARD32                          backing-planes
         4     CARD32                          backing-pixel
         1     BOOL                            override-redirect
         1     BOOL                            save-under
         4     SETofEVENT                      event-mask
         4     SETofDEVICEEVENT                do-not-propagate-mask
         4     COLORMAP                        colormap
              0     CopyFromParent
         4     CURSOR                          cursor
              0     None

    ChangeWindowAttributes
         1     2                               opcode
         1                                     未使用
         2     3+n                             リクエストの長さ
         4     WINDOW                          window
         4     BITMASK                         value-mask (has n bits set to 1)
              encodings are the same as for CreateWindow
         4n     LISTofVALUE                    value-list
              encodings are the same as for CreateWindow

    GetWindowAttributes
         1     3                               opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     WINDOW                          window

    ▶
         1     1                               Reply
         1                                     backing-store
              0     NotUseful
              1     WhenMapped
              2     Always
         2     CARD16                          通し番号
         4     3                               リプライの長さ
         4     VISUALID                        visual
         2                                     class
              1     InputOutput
              2     InputOnly
         1     BITGRAVITY                      bit-gravity
         1     WINGRAVITY                      win-gravity
         4     CARD32                          backing-planes
         4     CARD32                          backing-pixel
         1     BOOL                            save-under
         1     BOOL                            map-is-installed
         1                                     map-state
              0     Unmapped
              1     Unviewable
              2     Viewable
         1     BOOL                            override-redirect
         4     COLORMAP                        colormap
              0     None
         4     SETofEVENT                      all-event-masks
         4     SETofEVENT                      your-event-mask
         2     SETofDEVICEEVENT                do-not-propagate-mask
         2                                     未使用

    DestroyWindow
         1     4                               opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     WINDOW                          window

    DestroySubwindows
         1     5                               opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     WINDOW                          window

    ChangeSaveSet
         1     6                               opcode
         1                                     mode
              0     Insert
              1     Delete
         2     2                               リクエストの長さ
         4     WINDOW                          window

    ReparentWindow
         1     7                               opcode
         1                                     未使用
         2     4                               リクエストの長さ
         4     WINDOW                          window
         4     WINDOW                          parent
         2     INT16                           x
         2     INT16                           y

    MapWindow
         1     8                               opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     WINDOW                          window

    MapSubwindows
         1     9                               opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     WINDOW                          window

    UnmapWindow
         1     10                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     WINDOW                          window

    UnmapSubwindows
         1     11                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     WINDOW                          window

    ConfigureWindow
         1     12                              opcode
         1                                     未使用
         2     3+n                             リクエストの長さ
         4     WINDOW                          window
         2     BITMASK                         value-mask (has n bits set to 1)
              #x0001     x
              #x0002     y
              #x0004     width
              #x0008     height
              #x0010     border-width
              #x0020     sibling
              #x0040     stack-mode
         2               未使用
         4n     LISTofVALUE                    value-list

      VALUEs
         2     INT16                           x
         2     INT16                           y
         2     CARD16                          width
         2     CARD16                          height
         2     CARD16                          border-width
         4     WINDOW                          sibling
         1                                     stack-mode
              0     Above
              1     Below
              2     TopIf
              3     BottomIf
              4     Opposite

    CirculateWindow
         1     13                              opcode
         1                                     direction
              0     RaiseLowest
              1     LowerHighest
         2     2                               リクエストの長さ
         4     WINDOW                          window

    GetGeometry
         1     14                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     DRAWABLE                        drawable

    ▶
         1     1                               Reply
         1     CARD8                           depth
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         4     WINDOW                          root
         2     INT16                           x
         2     INT16                           y
         2     CARD16                          width
         2     CARD16                          height
         2     CARD16                          border-width
         10                                    未使用

    QueryTree
         1     15                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     WINDOW                          window

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     n                               リプライの長さ
         4     WINDOW                          root
         4     WINDOW                          parent
              0     None
         2     n                               number of WINDOWs in children
         14                                    未使用
         4n     LISTofWINDOW                   children

    InternAtom
         1     16                              opcode
         1     BOOL                            only-if-exists
         2     2+(n+p)/4                       リクエストの長さ
         2     n                               length of name
         2                                     未使用
         n     STRING8                         name
         p                                     未使用, p=pad(n)

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         4     ATOM                            atom
               0     None
         20                                    未使用

    GetAtomName
         1     17                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     ATOM                            atom

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     (n+p)/4                         リプライの長さ
         2     n                               length of name
         22                                    未使用
         n     STRING8                         name
         p                                     未使用, p=pad(n)

    ChangeProperty
         1     18                              opcode
         1                                     mode
              0     Replace
              1     Prepend
              2     Append
         2     6+(n+p)/4                       リクエストの長さ
         4     WINDOW                          window
         4     ATOM                            property
         4     ATOM                            type
         1     CARD8                           format
         3                                     未使用
         4     CARD32                          length of data in format units
                        (= n for format = 8)
                        (= n/2 for format = 16)
                        (= n/4 for format = 32)
         n     LISTofBYTE                      data
                        (n is a multiple of 2 for format = 16)
                        (n is a multiple of 4 for format = 32)
         p                                     未使用, p=pad(n)

    DeleteProperty
         1     19                              opcode
         1                                     未使用
         2     3                               リクエストの長さ
         4     WINDOW                          window
         4     ATOM                            property

    GetProperty
         1     20                              opcode
         1     BOOL                            delete
         2     6                               リクエストの長さ
         4     WINDOW                          window
         4     ATOM                            property
         4     ATOM                            type
              0     AnyPropertyType
         4     CARD32                          long-offset
         4     CARD32                          long-length

    ▶
         1     1                               Reply
         1     CARD8                           format
         2     CARD16                          通し番号
         4     (n+p)/4                         リプライの長さ
         4     ATOM                            type
              0     None
         4     CARD32                          bytes-after
         4     CARD32                          length of value in format units
                        (= 0 for format = 0)
                        (= n for format = 8)
                        (= n/2 for format = 16)
                        (= n/4 for format = 32)
         12                                    未使用
         n     LISTofBYTE                      value
                        (n is zero for format = 0)
                        (n is a multiple of 2 for format = 16)
                        (n is a multiple of 4 for format = 32)
         p                                     未使用, p=pad(n)

    ListProperties
         1     21                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     WINDOW                          window

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     n                               リプライの長さ
         2     n                               number of ATOMs in atoms
         22                                    未使用
         4n     LISTofATOM                     atoms

    SetSelectionOwner
         1     22                              opcode
         1                                     未使用
         2     4                               リクエストの長さ
         4     WINDOW                          owner
              0     None
         4     ATOM                            selection
         4     TIMESTAMP                       time
              0     CurrentTime

    GetSelectionOwner
         1     23                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     ATOM                            selection

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         4     WINDOW                          owner
              0     None
         20                                    未使用

    ConvertSelection
         1     24                              opcode
         1                                     未使用
         2     6                               リクエストの長さ
         4     WINDOW                          requestor
         4     ATOM                            selection
         4     ATOM                            target
         4     ATOM                            property
              0     None
         4     TIMESTAMP                       time
              0     CurrentTime

    SendEvent
         1     25                              opcode
         1     BOOL                            propagate
         2     11                              requestlength
         4     WINDOW                          destination
              0     PointerWindow
              1     InputFocus
         4     SETofEVENT                      event-mask
         32                                    event
              standard event format (see the Events section)

    GrabPointer
         1     26                              opcode
         1     BOOL                            owner-events
         2     6                               リクエストの長さ
         4     WINDOW                          grab-window
         2     SETofPOINTEREVENT               event-mask
         1                                     pointer-mode
              0     Synchronous
              1     Asynchronous
         1                                     keyboard-mode
              0     Synchronous
              1     Asynchronous
         4     WINDOW                          confine-to
              0     None
         4     CURSOR                          cursor
              0     None
         4     TIMESTAMP                       time
              0     CurrentTime

    ▶
         1     1                               Reply
         1                                     status
              0     Success
              1     AlreadyGrabbed
              2     InvalidTime
              3     NotViewable
              4     Frozen
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         24                                    未使用

    UngrabPointer
         1     27                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     TIMESTAMP                       time
              0     CurrentTime

    GrabButton
         1     28                              opcode
         1     BOOL                            owner-events
         2     6                               リクエストの長さ
         4     WINDOW                          grab-window
         2     SETofPOINTEREVENT               event-mask
         1                                     pointer-mode
              0     Synchronous
              1     Asynchronous
         1                                     keyboard-mode
              0     Synchronous
              1     Asynchronous
         4     WINDOW                          confine-to
              0     None
         4     CURSOR                          cursor
              0     None
         1     BUTTON                          button
              0     AnyButton
         1                                     未使用
         2     SETofKEYMASK                    modifiers
              #x8000                           AnyModifier

    UngrabButton
         1     29                              opcode
         1     BUTTON                          button
              0     AnyButton
         2     3                               リクエストの長さ
         4     WINDOW                          grab-window
         2     SETofKEYMASK                    modifiers
              #x8000                           AnyModifier
         2                                     未使用

    ChangeActivePointerGrab
         1     30                              opcode
         1                                     未使用
         2     4                               リクエストの長さ
         4     CURSOR                          cursor
              0     None
         4     TIMESTAMP                       time
              0     CurrentTime
         2     SETofPOINTEREVENT               event-mask
         2                                     未使用

    GrabKeyboard
         1     31                              opcode
         1     BOOL                            owner-events
         2     4                               リクエストの長さ
         4     WINDOW                          grab-window
         4     TIMESTAMP                       time
              0     CurrentTime
         1                                     pointer-mode
              0     Synchronous
              1     Asynchronous
         1                                     keyboard-mode
              0     Synchronous
              1     Asynchronous
         2                                     未使用

    ▶
         1     1                               Reply
         1                                     status
              0     Success
              1     AlreadyGrabbed
              2     InvalidTime
              3     NotViewable
              4     Frozen
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         24                                    未使用

    UngrabKeyboard
         1     32                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     TIMESTAMP                       time
              0     CurrentTime

    GrabKey
         1     33                              opcode
         1     BOOL                            owner-events
         2     4                               リクエストの長さ
         4     WINDOW                          grab-window
         2     SETofKEYMASK                    modifiers
              #x8000     AnyModifier
         1     KEYCODE                         key
              0     AnyKey
         1                                     pointer-mode
              0     Synchronous
              1     Asynchronous
         1                                     keyboard-mode
              0     Synchronous
              1     Asynchronous
         3                                     未使用

    UngrabKey
         1     34                              opcode
         1     KEYCODE                         key
              0     AnyKey
         2     3                               リクエストの長さ
         4     WINDOW                          grab-window
         2     SETofKEYMASK                    modifiers
              #x8000     AnyModifier
         2                                     未使用

    AllowEvents
         1     35                              opcode
         1                                     mode
              0     AsyncPointer
              1     SyncPointer
              2     ReplayPointer
              3     AsyncKeyboard
              4     SyncKeyboard
              5     ReplayKeyboard
              6     AsyncBoth
              7     SyncBoth
         2     2                               リクエストの長さ
         4     TIMESTAMP                       time
              0     CurrentTime

    GrabServer
         1     36                              opcode
         1                                     未使用
         2     1                               リクエストの長さ

    UngrabServer
         1     37                              opcode
         1                                     未使用
         2     1                               リクエストの長さ

    QueryPointer
         1     38                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     WINDOW                          window

    ▶
         1     1                               Reply
         1     BOOL                            same-screen
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         4     WINDOW                          root
         4     WINDOW                          child
              0     None
         2     INT16                           root-x
         2     INT16                           root-y
         2     INT16                           win-x
         2     INT16                           win-y
         2     SETofKEYBUTMASK                 mask
         6                                     未使用

    GetMotionEvents
         1     39                              opcode
         1                                     未使用
         2     4                               リクエストの長さ
         4     WINDOW                          window
         4     TIMESTAMP                       start
              0     CurrentTime
         4     TIMESTAMP                       stop
              0     CurrentTime

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     2n                              リプライの長さ
         4     n                               number of TIMECOORDs in events
         20                                    未使用
         8n     LISTofTIMECOORD                events

      TIMECOORD
         4     TIMESTAMP                       time
         2     INT16                           x
         2     INT16                           y

    TranslateCoordinates
         1     40                              opcode
         1                                     未使用
         2     4                               リクエストの長さ
         4     WINDOW                          src-window
         4     WINDOW                          dst-window
         2     INT16                           src-x
         2     INT16                           src-y
    ▶
         1     1                               Reply
         1     BOOL                            same-screen
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         4     WINDOW                          child
              0     None
         2     INT16                           dst-x
         2     INT16                           dst-y
         16                                    未使用

    WarpPointer
         1     41                              opcode
         1                                     未使用
         2     6                               リクエストの長さ
         4     WINDOW                          src-window
              0     None
         4     WINDOW                          dst-window
              0     None
         2     INT16                           src-x
         2     INT16                           src-y
         2     CARD16                          src-width
         2     CARD16                          src-height
         2     INT16                           dst-x
         2     INT16                           dst-y

    SetInputFocus
         1     42                              opcode
         1                                     revert-to
              0     None
              1     PointerRoot
              2     Parent
         2     3                               リクエストの長さ
         4     WINDOW                          focus
              0     None
              1     PointerRoot
         4     TIMESTAMP                       time
              0     CurrentTime

    GetInputFocus
         1     43                              opcode
         1                                     未使用
         2     1                               リクエストの長さ

    ▶
         1     1                               Reply
         1                                     revert-to
              0     None
              1     PointerRoot
              2     Parent
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         4     WINDOW                          focus
              0     None
              1     PointerRoot
         20                                    未使用

    QueryKeymap
         1     44                              opcode
         1                                     未使用
         2     1                               リクエストの長さ

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     2                               リプライの長さ
         32     LISTofCARD8                    keys

    OpenFont
         1     45                              opcode
         1                                     未使用
         2     3+(n+p)/4                       リクエストの長さ
         4     FONT                            fid
         2     n                               length of name
         2                                     未使用
         n     STRING8                         name
         p                                     未使用, p=pad(n)

    CloseFont
         1     46                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     FONT                            font

    QueryFont
         1     47                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     FONTABLE                        font

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     7+2n+3m                         リプライの長さ
         12     CHARINFO                       min-bounds
         4                                     未使用
         12     CHARINFO                       max-bounds
         4                                     未使用
         2     CARD16                          min-char-or-byte2
         2     CARD16                          max-char-or-byte2
         2     CARD16                          default-char
         2     n                               number of FONTPROPs in properties
         1                                     draw-direction
              0     LeftToRight
              1     RightToLeft
         1     CARD8                           min-byte1
         1     CARD8                           max-byte1
         1     BOOL                            all-chars-exist
         2     INT16                           font-ascent
         2     INT16                           font-descent
         4     m                               number of CHARINFOs in char-infos
         8n     LISTofFONTPROP                 properties
         12m     LISTofCHARINFO                char-infos

      FONTPROP
         4     ATOM                            name
         4     <32-bits>                 value

      CHARINFO
         2     INT16                           left-side-bearing (文字全体の原点から文字本体の左端まで)
         2     INT16                           right-side-bearing (文字全体の原点から文字本体の右端まで)
         2     INT16                           character-width (文字全体の原点から次の文字の原点まで)
         2     INT16                           ascent (ベース・ラインの上の高さ)
         2     INT16                           descent (ベース・ラインの下の高さ)
         2     CARD16                          attributes

    QueryTextExtents
         1     48                              opcode
         1     BOOL                            odd length, True if p = 2
         2     2+(2n+p)/4                      リクエストの長さ
         4     FONTABLE                        font
         2n     STRING16                       string
         p                                     未使用, p=pad(2n)

    ▶
         1     1                               Reply
         1                                     draw-direction
              0     LeftToRight
              1     RightToLeft
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         2     INT16                           font-ascent
         2     INT16                           font-descent
         2     INT16                           overall-ascent
         2     INT16                           overall-descent
         4     INT32                           overall-width
         4     INT32                           overall-left
         4     INT32                           overall-right
         4                                     未使用

    ListFonts
         1     49                              opcode
         1                                     未使用
         2     2+(n+p)/4                       リクエストの長さ
         2     CARD16                          max-names
         2     n                               length of pattern
         n     STRING8                         pattern
         p                                     未使用, p=pad(n)

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     (n+p)/4                         リプライの長さ
         2     CARD16                          number of STRs in names
         22                                    未使用
         n     LISTofSTR                       names
         p                                     未使用, p=pad(n)

    ListFontsWithInfo
         1     50                              opcode
         1                                     未使用
         2     2+(n+p)/4                       リクエストの長さ
         2     CARD16                          max-names
         2     n                               length of pattern
         n     STRING8                         pattern
         p                                     未使用, p=pad(n)

    ▶ (except for last in series)
         1     1                               Reply
         1     n                               length of name in bytes
         2     CARD16                          通し番号
         4     7+2m+(n+p)/4                    リプライの長さ
         12     CHARINFO                       min-bounds
         4                                     未使用
         12     CHARINFO                       max-bounds
         4                                     未使用
         2     CARD16                          min-char-or-byte2
         2     CARD16                          max-char-or-byte2
         2     CARD16                          default-char
         2     m                               number of FONTPROPs in properties
         1                                     draw-direction
              0     LeftToRight
              1     RightToLeft
         1     CARD8                           min-byte1
         1     CARD8                           max-byte1
         1     BOOL                            all-chars-exist
         2     INT16                           font-ascent
         2     INT16                           font-descent
         4     CARD32                          replies-hint
         8m     LISTofFONTPROP                 properties
         n     STRING8                         name
         p                                     未使用, p=pad(n)

      FONTPROP
         encodings are the same as for QueryFont

      CHARINFO
         encodings are the same as for QueryFont

    ▶ (last in series)
         1     1                               Reply
         1     0                               last-reply indicator
         2     CARD16                          通し番号
         4     7                               リプライの長さ
         52                                    未使用

    SetFontPath
         1     51                              opcode
         1                                     未使用
         2     2+(n+p)/4                       リクエストの長さ
         2     CARD16                          number of STRs in path
         2                                     未使用
         n     LISTofSTR                       path
         p                                     未使用, p=pad(n)

    GetFontPath
         1     52                              opcode
         1                                     未使用
         2     1                               request list

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     (n+p)/4                         リプライの長さ
         2     CARD16                          number of STRs in path
         22                                    未使用
         n     LISTofSTR                       path
         p                                     未使用, p=pad(n)

    CreatePixmap
         1     53                              opcode
         1     CARD8                           depth
         2     4                               リクエストの長さ
         4     PIXMAP                          pid
         4     DRAWABLE                        drawable
         2     CARD16                          width
         2     CARD16                          height

    FreePixmap
         1     54                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     PIXMAP                          pixmap

    CreateGC
         1     55                              opcode
         1                                     未使用
         2     4+n                             リクエストの長さ
         4     GCONTEXT                        cid
         4     DRAWABLE                        drawable
         4     BITMASK                         value-mask (has n bits set to 1)
              #x00000001     function
              #x00000002     plane-mask
              #x00000004     foreground
              #x00000008     background
              #x00000010     line-width
              #x00000020     line-style
              #x00000040     cap-style
              #x00000080     join-style
              #x00000100     fill-style
              #x00000200     fill-rule
              #x00000400     tile
              #x00000800     stipple
              #x00001000     tile-stipple-x-origin
              #x00002000     tile-stipple-y-origin
              #x00004000     font
              #x00008000     subwindow-mode
              #x00010000     graphics-exposures
              #x00020000     clip-x-origin
              #x00040000     clip-y-origin
              #x00080000     clip-mask
              #x00100000     dash-offset
              #x00200000     dashes
              #x00400000     arc-mode
         4n     LISTofVALUE                    value-list

      VALUEs
         1                                     function
               0     Clear
               1     And
               2     AndReverse
               3     Copy
               4     AndInverted
               5     NoOp
               6     Xor
               7     Or
               8     Nor
               9     Equiv
              10     Invert
              11     OrReverse
              12     CopyInverted
              13     OrInverted
              14     Nand
              15     Set
         4     CARD32                          plane-mask
         4     CARD32                          foreground
         4     CARD32                          background
         2     CARD16                          line-width
         1                                     line-style
              0     Solid
              1     OnOffDash
              2     DoubleDash
         1                                     cap-style
              0     NotLast
              1     Butt
              2     Round
              3     Projecting
         1                                     join-style
              0     Miter
              1     Round
              2     Bevel
         1                                     fill-style
              0     Solid
              1     Tiled
              2     Stippled
              3     OpaqueStippled
         1                                     fill-rule
              0     EvenOdd
              1     Winding
         4     PIXMAP                          tile
         4     PIXMAP                          stipple
         2     INT16                           tile-stipple-x-origin
         2     INT16                           tile-stipple-y-origin
         4     FONT                            font
         1                                     subwindow-mode
              0     ClipByChildren
              1     IncludeInferiors
         1     BOOL                            graphics-exposures
         2     INT16                           clip-x-origin
         2     INT16                           clip-y-origin
         4     PIXMAP                          clip-mask
              0     None
         2     CARD16                          dash-offset
         1     CARD8                           dashes
         1                                     arc-mode
              0     Chord
              1     PieSlice

    ChangeGC
         1     56                              opcode
         1                                     未使用
         2     3+n                             リクエストの長さ
         4     GCONTEXT                        gc
         4     BITMASK                         value-mask (has n bits set to 1)
              encodings are the same as for CreateGC
         4n     LISTofVALUE                    value-list
              encodings are the same as for CreateGC

    CopyGC
         1     57                              opcode
         1                                     未使用
         2     4                               リクエストの長さ
         4     GCONTEXT                        src-gc
         4     GCONTEXT                        dst-gc
         4     BITMASK                         value-mask
              encodings are the same as for CreateGC

    SetDashes
         1     58                              opcode
         1                                     未使用
         2     3+(n+p)/4                       リクエストの長さ
         4     GCONTEXT                        gc
         2     CARD16                          dash-offset
         2     n                               length of dashes
         n     LISTofCARD8                     dashes
         p                                     未使用, p=pad(n)

    SetClipRectangles
         1     59                              opcode
         1                                     ordering
              0     UnSorted
              1     YSorted
              2     YXSorted
              3     YXBanded
         2     3+2n                            リクエストの長さ
         4     GCONTEXT                        gc
         2     INT16                           clip-x-origin
         2     INT16                           clip-y-origin
         8n     LISTofRECTANGLE                rectangles

    FreeGC
         1     60                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     GCONTEXT                        gc

    ClearArea
         1     61                              opcode
         1     BOOL                            exposures
         2     4                               リクエストの長さ
         4     WINDOW                          window
         2     INT16                           x
         2     INT16                           y
         2     CARD16                          width
         2     CARD16                          height

    CopyArea
         1     62                              opcode
         1                                     未使用
         2     7                               リクエストの長さ
         4     DRAWABLE                        src-drawable
         4     DRAWABLE                        dst-drawable
         4     GCONTEXT                        gc
         2     INT16                           src-x
         2     INT16                           src-y
         2     INT16                           dst-x
         2     INT16                           dst-y
         2     CARD16                          width
         2     CARD16                          height

    CopyPlane
         1     63                              opcode
         1                                     未使用
         2     8                               リクエストの長さ
         4     DRAWABLE                        src-drawable
         4     DRAWABLE                        dst-drawable
         4     GCONTEXT                        gc
         2     INT16                           src-x
         2     INT16                           src-y
         2     INT16                           dst-x
         2     INT16                           dst-y
         2     CARD16                          width
         2     CARD16                          height
         4     CARD32                          bit-plane

    PolyPoint
         1     64                              opcode
         1                                     coordinate-mode
              0     Origin
              1     Previous
         2     3+n                             リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         4n     LISTofPOINT                    points

    PolyLine
         1     65                              opcode
         1                                     coordinate-mode
              0     Origin
              1     Previous
         2     3+n                             リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         4n     LISTofPOINT                    points

    PolySegment
         1     66                              opcode
         1                                     未使用
         2     3+2n                            リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         8n     LISTofSEGMENT                  segments

      SEGMENT
         2     INT16                           x1
         2     INT16                           y1
         2     INT16                           x2
         2     INT16                           y2

    PolyRectangle
         1     67                              opcode
         1                                     未使用
         2     3+2n                            リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         8n     LISTofRECTANGLE                rectangles

    PolyArc
         1     68                              opcode
         1                                     未使用
         2     3+3n                            リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         12n     LISTofARC                     arcs

    FillPoly
         1     69                              opcode
         1                                     未使用
         2     4+n                             リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         1                                     shape
              0     Complex
              1     Nonconvex
              2     Convex
         1                                     coordinate-mode
              0     Origin
              1     Previous
         2                                     未使用
         4n     LISTofPOINT                    points

    PolyFillRectangle
         1     70                              opcode
         1                                     未使用
         2     3+2n                            リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         8n     LISTofRECTANGLE                rectangles

    PolyFillArc
         1     71                              opcode
         1                                     未使用
         2     3+3n                            リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         12n     LISTofARC                     arcs

    PutImage
         1     72                              opcode
         1                                     format
              0     Bitmap
              1     XYPixmap
              2     ZPixmap
         2     6+(n+p)/4                       リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         2     CARD16                          width
         2     CARD16                          height
         2     INT16                           dst-x
         2     INT16                           dst-y
         1     CARD8                           left-pad
         1     CARD8                           depth
         2                                     未使用
         n     LISTofBYTE                      data
         p                                     未使用, p=pad(n)

    GetImage
         1     73                              opcode
         1                                     format
              1     XYPixmap
              2     ZPixmap
         2     5                               リクエストの長さ
         4     DRAWABLE                        drawable
         2     INT16                           x
         2     INT16                           y
         2     CARD16                          width
         2     CARD16                          height
         4     CARD32                          plane-mask

    ▶
         1     1                               Reply
         1     CARD8                           depth
         2     CARD16                          通し番号
         4     (n+p)/4                         リプライの長さ
         4     VISUALID                        visual
              0     None
         20                                    未使用
         n     LISTofBYTE                      data
         p                                     未使用, p=pad(n)

    PolyText8
         1     74                              opcode
         1                                     未使用
         2     4+(n+p)/4                       リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         2     INT16                           x
         2     INT16                           y
         n     LISTofTEXTITEM8                 items
         p                                     未使用, p=pad(n)  (p is always 0
                                               or 1)

      TEXTITEM8
         1     m                               length of string (cannot be 255)
         1     INT8                            delta
         m     STRING8                         string
      or
         1     255                             font-shift indicator
         1                                     font byte 3 (most-significant)
         1                                     font byte 2
         1                                     font byte 1
         1                                     font byte 0 (least-significant)

    PolyText16
         1     75                              opcode
         1                                     未使用
         2     4+(n+p)/4                       リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         2     INT16                           x
         2     INT16                           y
         n     LISTofTEXTITEM16                items
         p                                     未使用, p=pad(n)  (p must be 0 or
                                               1)

      TEXTITEM16
         1     m                               number of CHAR2Bs in string
                                               (cannot be 255)
         1     INT8                            delta
         2m     STRING16                       string
      or
         1     255                             font-shift indicator
         1                                     font byte 3 (most-significant)
         1                                     font byte 2
         1                                     font byte 1
         1                                     font byte 0 (least-significant)

    ImageText8
         1     76                              opcode
         1     n                               length of string
         2     4+(n+p)/4                       リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         2     INT16                           x
         2     INT16                           y
         n     STRING8                         string
         p                                     未使用, p=pad(n)

    ImageText16
         1     77                              opcode
         1     n                               number of CHAR2Bs in string
         2     4+(2n+p)/4                      リクエストの長さ
         4     DRAWABLE                        drawable
         4     GCONTEXT                        gc
         2     INT16                           x
         2     INT16                           y
         2n     STRING16                       string
         p                                     未使用, p=pad(2n)

    CreateColormap
         1     78                              opcode
         1                                     alloc
              0     None
              1     All
         2     4                               リクエストの長さ
         4     COLORMAP                        mid
         4     WINDOW                          window
         4     VISUALID                        visual

    FreeColormap
         1     79                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     COLORMAP                        cmap

    CopyColormapAndFree
         1     80                              opcode
         1                                     未使用
         2     3                               リクエストの長さ
         4     COLORMAP                        mid
         4     COLORMAP                        src-cmap

    InstallColormap
         1     81                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     COLORMAP                        cmap

    UninstallColormap
         1     82                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     COLORMAP                        cmap

    ListInstalledColormaps
         1     83                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     WINDOW                          window

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     n                               リプライの長さ
         2     n                               number of COLORMAPs in cmaps
         22                                    未使用
         4n     LISTofCOLORMAP                 cmaps

    AllocColor
         1     84                              opcode
         1                                     未使用
         2     4                               リクエストの長さ
         4     COLORMAP                        cmap
         2     CARD16                          red
         2     CARD16                          green
         2     CARD16                          blue
         2                                     未使用

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         2     CARD16                          red
         2     CARD16                          green
         2     CARD16                          blue
         2                                     未使用
         4     CARD32                          pixel
         12                                    未使用

    AllocNamedColor
         1     85                              opcode
         1                                     未使用
         2     3+(n+p)/4                       リクエストの長さ
         4     COLORMAP                        cmap
         2     n                               length of name
         2                                     未使用
         n     STRING8                         name
         p                                     未使用, p=pad(n)

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         4     CARD32                          pixel
         2     CARD16                          exact-red
         2     CARD16                          exact-green
         2     CARD16                          exact-blue
         2     CARD16                          visual-red
         2     CARD16                          visual-green
         2     CARD16                          visual-blue
         8                                     未使用

    AllocColorCells
         1     86                              opcode
         1     BOOL                            contiguous
         2     3                               リクエストの長さ
         4     COLORMAP                        cmap
         2     CARD16                          colors
         2     CARD16                          planes

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     n+m                             リプライの長さ
         2     n                               number of CARD32s in pixels
         2     m                               number of CARD32s in masks
         20                                    未使用
         4n     LISTofCARD32                   pixels
         4m     LISTofCARD32                   masks

    AllocColorPlanes
         1     87                              opcode
         1     BOOL                            contiguous
         2     4                               リクエストの長さ
         4     COLORMAP                        cmap
         2     CARD16                          colors
         2     CARD16                          reds
         2     CARD16                          greens
         2     CARD16                          blues

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     n                               リプライの長さ
         2     n                               number of CARD32s in pixels
         2                                     未使用
         4     CARD32                          red-mask
         4     CARD32                          green-mask
         4     CARD32                          blue-mask
         8                                     未使用
         4n     LISTofCARD32                   pixels

    FreeColors
         1     88                              opcode
         1                                     未使用
         2     3+n                             リクエストの長さ
         4     COLORMAP                        cmap
         4     CARD32                          plane-mask
         4n     LISTofCARD32                   pixels

    StoreColors
         1     89                              opcode
         1                                     未使用
         2     2+3n                            リクエストの長さ
         4     COLORMAP                        cmap
         12n     LISTofCOLORITEM               items

      COLORITEM
         4     CARD32                          pixel
         2     CARD16                          red
         2     CARD16                          green
         2     CARD16                          blue
         1                                     do-red, do-green, do-blue
              #x01     do-red (1 is True, 0 is False)
              #x02     do-green (1 is True, 0 is False)
              #x04     do-blue (1 is True, 0 is False)
              #xF8     未使用
         1                                     未使用

    StoreNamedColor
         1     90                              opcode
         1                                     do-red, do-green, do-blue
              #x01     do-red (1 is True, 0 is False)
              #x02     do-green (1 is True, 0 is False)
              #x04     do-blue (1 is True, 0 is False)
              #xF8     未使用
         2     4+(n+p)/4                       リクエストの長さ
         4     COLORMAP                        cmap
         4     CARD32                          pixel
         2     n                               length of name
         2                                     未使用
         n     STRING8                         name
         p                                     未使用, p=pad(n)

    QueryColors
         1     91                              opcode
         1                                     未使用
         2     2+n                             リクエストの長さ
         4     COLORMAP                        cmap
         4n     LISTofCARD32                   pixels

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     2n                              リプライの長さ
         2     n                               number of RGBs in colors
         22                                    未使用
         8n     LISTofRGB                      colors

      RGB
         2     CARD16                          red
         2     CARD16                          green
         2     CARD16                          blue
         2                                     未使用

    LookupColor
         1     92                              opcode
         1                                     未使用
         2     3+(n+p)/4                       リクエストの長さ
         4     COLORMAP                        cmap
         2     n                               length of name
         2                                     未使用
         n     STRING8                         name
         p                                     未使用, p=pad(n)

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         2     CARD16                          exact-red
         2     CARD16                          exact-green
         2     CARD16                          exact-blue
         2     CARD16                          visual-red
         2     CARD16                          visual-green
         2     CARD16                          visual-blue
         12                                    未使用

    CreateCursor
         1     93                              opcode
         1                                     未使用
         2     8                               リクエストの長さ
         4     CURSOR                          cid
         4     PIXMAP                          source
         4     PIXMAP                          mask
              0     None
         2     CARD16                          fore-red
         2     CARD16                          fore-green
         2     CARD16                          fore-blue
         2     CARD16                          back-red
         2     CARD16                          back-green
         2     CARD16                          back-blue
         2     CARD16                          x
         2     CARD16                          y

    CreateGlyphCursor
         1     94                              opcode
         1                                     未使用
         2     8                               リクエストの長さ
         4     CURSOR                          cid
         4     FONT                            source-font
         4     FONT                            mask-font
              0     None
         2     CARD16                          source-char
         2     CARD16                          mask-char
         2     CARD16                          fore-red
         2     CARD16                          fore-green
         2     CARD16                          fore-blue
         2     CARD16                          back-red
         2     CARD16                          back-green
         2     CARD16                          back-blue

    FreeCursor
         1     95                              opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     CURSOR                          cursor

    RecolorCursor
         1     96                              opcode
         1                                     未使用
         2     5                               リクエストの長さ
         4     CURSOR                          cursor
         2     CARD16                          fore-red
         2     CARD16                          fore-green
         2     CARD16                          fore-blue
         2     CARD16                          back-red
         2     CARD16                          back-green
         2     CARD16                          back-blue

    QueryBestSize
         1     97                              opcode
         1                                     class
              0     Cursor
              1     Tile
              2     Stipple
         2     3                               リクエストの長さ
         4     DRAWABLE                        drawable
         2     CARD16                          width
         2     CARD16                          height

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         2     CARD16                          width
         2     CARD16                          height
         20                                    未使用

    QueryExtension
         1     98                              opcode
         1                                     未使用
         2     2+(n+p)/4                       リクエストの長さ
         2     n                               length of name
         2                                     未使用
         n     STRING8                         name
         p                                     未使用, p=pad(n)

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         1     BOOL                            present
         1     CARD8                           major-opcode
         1     CARD8                           first-event
         1     CARD8                           first-error
         20                                    未使用

    ListExtensions
         1     99                              opcode
         1                                     未使用
         2     1                               リクエストの長さ

    ▶
         1     1                               Reply
         1     CARD8                           number of STRs in names
         2     CARD16                          通し番号
         4     (n+p)/4                         リプライの長さ
         24                                    未使用
         n     LISTofSTR                       names
         p                                     未使用, p=pad(n)

    ChangeKeyboardMapping
         1     100                             opcode
         1     n                               keycode-count
         2     2+nm                            リクエストの長さ
         1     KEYCODE                         first-keycode
         1     m                               keysyms-per-keycode
         2                                     未使用
         4nm     LISTofKEYSYM                  keysyms

    GetKeyboardMapping
         1     101                             opcode
         1                                     未使用
         2     2                               リクエストの長さ
         1     KEYCODE                         first-keycode
         1     m                               count
         2                                     未使用

    ▶
         1     1                               Reply
         1     n                               keysyms-per-keycode
         2     CARD16                          通し番号
         4     nm                              リプライの長さ (m = count field
                                               from the request)
         24                                    未使用
         4nm     LISTofKEYSYM                  keysyms

    ChangeKeyboardControl
         1     102                             opcode
         1                                     未使用
         2     2+n                             リクエストの長さ
         4     BITMASK                         value-mask (has n bits set to 1)
              #x0001     key-click-percent
              #x0002     bell-percent
              #x0004     bell-pitch
              #x0008     bell-duration
              #x0010     led
              #x0020     led-mode
              #x0040     key
              #x0080     auto-repeat-mode
         4n     LISTofVALUE                    value-list

      VALUEs
         1     INT8                            key-click-percent
         1     INT8                            bell-percent
         2     INT16                           bell-pitch
         2     INT16                           bell-duration
         1     CARD8                           led
         1                                     led-mode
              0     Off
              1     On
         1     KEYCODE                         key
         1                                     auto-repeat-mode
              0     Off
              1     On
              2     Default

    GetKeyboardControl
         1     103                             opcode
         1                                     未使用
         2     1                               リクエストの長さ

    ▶
         1     1                               Reply
         1                                     global-auto-repeat
              0     Off
              1     On
         2     CARD16                          通し番号
         4     5                               リプライの長さ
         4     CARD32                          led-mask
         1     CARD8                           key-click-percent
         1     CARD8                           bell-percent
         2     CARD16                          bell-pitch
         2     CARD16                          bell-duration
         2                                     未使用
         32     LISTofCARD8                    auto-repeats

    Bell
         1     104                             opcode
         1     INT8                            percent
         2     1                               リクエストの長さ

    ChangePointerControl
         1     105                             opcode
         1                                     未使用
         2     3                               リクエストの長さ
         2     INT16                           acceleration-numerator
         2     INT16                           acceleration-denominator
         2     INT16                           threshold
         1     BOOL                            do-acceleration
         1     BOOL                            do-threshold

    GetPointerControl
         1     106                             opcode
         1                                     未使用
         2     1                               リクエストの長さ

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         2     CARD16                          acceleration-numerator
         2     CARD16                          acceleration-denominator
         2     CARD16                          threshold
         18                                    未使用

    SetScreenSaver
         1     107                             opcode
         1                                     未使用
         2     3                               リクエストの長さ
         2     INT16                           timeout
         2     INT16                           interval
         1                                     prefer-blanking
              0     No
              1     Yes
              2     Default
         1                                     allow-exposures
              0     No
              1     Yes
              2     Default
         2                                     未使用

    GetScreenSaver
         1     108                             opcode
         1                                     未使用
         2     1                               リクエストの長さ

    ▶
         1     1                               Reply
         1                                     未使用
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         2     CARD16                          timeout
         2     CARD16                          interval
         1                                     prefer-blanking
              0     No
              1     Yes
         1                                     allow-exposures
              0     No
              1     Yes
         18                                    未使用

    ChangeHosts
         1     109                             opcode
         1                                     mode
              0     Insert
              1     Delete
         2     2+(n+p)/4                       リクエストの長さ
         1                                     family
              0     Internet
              1     DECnet
              2     Chaos
         1                                     未使用
         2     n                               アドレスの長さ
         n     LISTofCARD8                     address
         p                                     未使用, p=pad(n)

    ListHosts
         1     110                             opcode
         1                                     未使用
         2     1                               リクエストの長さ

    ▶
         1     1                               Reply
         1                                     mode
              0     Disabled
              1     Enabled
         2     CARD16                          通し番号
         4     n/4                             リプライの長さ
         2     CARD16                          number of HOSTs in hosts
         22                                    未使用
         n     LISTofHOST                      hosts (n always a multiple of 4)

    SetAccessControl
         1     111                             opcode
         1                                     mode
              0     Disable
              1     Enable
         2     1                               リクエストの長さ

    SetCloseDownMode
         1     112                             opcode
         1                                     mode
              0     Destroy
              1     RetainPermanent
              2     RetainTemporary
         2     1                               リクエストの長さ

    KillClient
         1     113                             opcode
         1                                     未使用
         2     2                               リクエストの長さ
         4     CARD32                          resource
              0     AllTemporary

    RotateProperties
         1     114                             opcode
         1                                     未使用
         2     3+n                             リクエストの長さ
         4     WINDOW                          window
         2     n                               number of properties
         2     INT16                           delta
         4n    LISTofATOM                      properties

    ForceScreenSaver
         1     115                             opcode
         1                                     mode
              0     Reset
              1     Activate
         2     1                               リクエストの長さ

    SetPointerMapping
         1     116                             opcode
         1     n                               length of map
         2     1+(n+p)/4                       リクエストの長さ
         n     LISTofCARD8                     map
         p                                     未使用, p=pad(n)

    ▶
         1     1                               Reply
         1                                     status
              0     Success
              1     Busy
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         24                                    未使用

    GetPointerMapping
         1     117                             opcode
         1                                     未使用
         2     1                               リクエストの長さ

    ▶
         1     1                               Reply
         1     n                               length of map
         2     CARD16                          通し番号
         4     (n+p)/4                         リプライの長さ
         24                                    未使用
         n     LISTofCARD8                     map
         p                                     未使用, p=pad(n)

    SetModifierMapping
         1     118                             opcode
         1     n                               keycodes-per-modifier
         2     1+2n                            リクエストの長さ
         8n    LISTofKEYCODE                   keycodes

    ▶
         1     1                               Reply
         1                                     status
              0     Success
              1     Busy
              2     Failed
         2     CARD16                          通し番号
         4     0                               リプライの長さ
         24                                    未使用

    GetModifierMapping
         1     119                             opcode
         1                                     未使用
         2     1                               リクエストの長さ

    ▶
         1     1                               Reply
         1     n                               keycodes-per-modifier
         2     CARD16                          通し番号
         4     2n                              リプライの長さ
         24                                    未使用
         8n     LISTofKEYCODE                  keycodes

    NoOperation
         1     127                             opcode
         1                                     未使用
         2     1+n                             リクエストの長さ
         4n                                    未使用

## イベント

    KeyPress
         1     2                               code
         1     KEYCODE                         detail
         2     CARD16                          通し番号
         4     TIMESTAMP                       time
         4     WINDOW                          root
         4     WINDOW                          event
         4     WINDOW                          child
              0     None
         2     INT16                           root-x
         2     INT16                           root-y
         2     INT16                           event-x
         2     INT16                           event-y
         2     SETofKEYBUTMASK                 state
         1     BOOL                            same-screen
         1                                     未使用

    KeyRelease
         1     3                               code
         1     KEYCODE                         detail
         2     CARD16                          通し番号
         4     TIMESTAMP                       time
         4     WINDOW                          root
         4     WINDOW                          event
         4     WINDOW                          child
              0     None
         2     INT16                           root-x
         2     INT16                           root-y
         2     INT16                           event-x
         2     INT16                           event-y
         2     SETofKEYBUTMASK                 state
         1     BOOL                            same-screen
         1                                     未使用

    ButtonPress
         1     4                               code
         1     BUTTON                          detail
         2     CARD16                          通し番号
         4     TIMESTAMP                       time
         4     WINDOW                          root
         4     WINDOW                          event
         4     WINDOW                          child
              0     None
         2     INT16                           root-x
         2     INT16                           root-y
         2     INT16                           event-x
         2     INT16                           event-y
         2     SETofKEYBUTMASK                 state
         1     BOOL                            same-screen
         1                                     未使用

    ButtonRelease
         1     5                               code
         1     BUTTON                          detail
         2     CARD16                          通し番号
         4     TIMESTAMP                       time
         4     WINDOW                          root
         4     WINDOW                          event
         4     WINDOW                          child
              0     None
         2     INT16                           root-x
         2     INT16                           root-y
         2     INT16                           event-x
         2     INT16                           event-y
         2     SETofKEYBUTMASK                 state
         1     BOOL                            same-screen
         1                                     未使用

    MotionNotify
         1     6                               code
         1                                     detail
              0     Normal
              1     Hint
         2     CARD16                          通し番号
         4     TIMESTAMP                       time
         4     WINDOW                          root
         4     WINDOW                          event
         4     WINDOW                          child
               0     None
         2     INT16                           root-x
         2     INT16                           root-y
         2     INT16                           event-x
         2     INT16                           event-y
         2     SETofKEYBUTMASK                 state
         1     BOOL                            same-screen
         1                                     未使用

    EnterNotify
         1     7                               code
         1                                     detail
              0     Ancestor
              1     Virtual
              2     Inferior
              3     Nonlinear
              4     NonlinearVirtual
         2     CARD16                          通し番号
         4     TIMESTAMP                       time
         4     WINDOW                          root
         4     WINDOW                          event
         4     WINDOW                          child
              0     None
         2     INT16                           root-x
         2     INT16                           root-y
         2     INT16                           event-x
         2     INT16                           event-y
         2     SETofKEYBUTMASK                 state
         1                                     mode
              0     Normal
              1     Grab
              2     Ungrab
         1                                     same-screen, focus
              #x01     focus (1 is True, 0 is False)
              #x02     same-screen (1 is True, 0 is False)
              #xFC     未使用

    LeaveNotify
         1     8                               code
         1                                     detail
              0     Ancestor
              1     Virtual
              2     Inferior
              3     Nonlinear
              4     NonlinearVirtual
         2     CARD16                          通し番号
         4     TIMESTAMP                       time
         4     WINDOW                          root
         4     WINDOW                          event
         4     WINDOW                          child
              0     None
         2     INT16                           root-x
         2     INT16                           root-y
         2     INT16                           event-x
         2     INT16                           event-y
         2     SETofKEYBUTMASK                 state
         1                                     mode
              0     Normal
              1     Grab
              2     Ungrab
         1                                     same-screen, focus
              #x01     focus (1 is True, 0 is False)
              #x02     same-screen (1 is True, 0 is False)
              #xFC     未使用

    FocusIn
         1     9                               code
         1                                     detail
              0     Ancestor
              1     Virtual
              2     Inferior
              3     Nonlinear
              4     NonlinearVirtual
              5     Pointer
              6     PointerRoot
              7     None
         2     CARD16                          通し番号
         4     WINDOW                          event
         1                                     mode
              0     Normal
              1     Grab
              2     Ungrab
              3     WhileGrabbed
         23                                    未使用

    FocusOut
         1     10                              code
         1                                     detail
              0     Ancestor
              1     Virtual
              2     Inferior
              3     Nonlinear
              4     NonlinearVirtual
              5     Pointer
              6     PointerRoot
              7     None
         2     CARD16                          通し番号
         4     WINDOW                          event
         1                                     mode
              0     Normal
              1     Grab
              2     Ungrab
              3     WhileGrabbed
         23                                    未使用

    KeymapNotify
         1     11                              code
         31    LISTofCARD8                     keys (byte for keycodes 0-7 is
                                               omitted)

    Expose
         1     12                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          window
         2     CARD16                          x
         2     CARD16                          y
         2     CARD16                          width
         2     CARD16                          height
         2     CARD16                          count
         14                                    未使用

    GraphicsExposure
         1     13                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     DRAWABLE                        drawable
         2     CARD16                          x
         2     CARD16                          y
         2     CARD16                          width
         2     CARD16                          height
         2     CARD16                          minor-opcode
         2     CARD16                          count
         1     CARD8                           major-opcode
         11                                    未使用

    NoExposure
         1     14                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     DRAWABLE                        drawable
         2     CARD16                          minor-opcode
         1     CARD8                           major-opcode
         21                                    未使用

    VisibilityNotify
         1     15                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          window
         1                                     state
              0     Unobscured
              1     PartiallyObscured
              2     FullyObscured
         23                                    未使用

    CreateNotify
         1     16                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          parent
         4     WINDOW                          window
         2     INT16                           x
         2     INT16                           y
         2     CARD16                          width
         2     CARD16                          height
         2     CARD16                          border-width
         1     BOOL                            override-redirect
         9                                     未使用

    DestroyNotify
         1     17                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          event
         4     WINDOW                          window
         20                                    未使用

    UnmapNotify
         1     18                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          event
         4     WINDOW                          window
         1     BOOL                            from-configure
         19                                    未使用

    MapNotify
         1     19                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          event
         4     WINDOW                          window
         1     BOOL                            override-redirect
         19                                    未使用

    MapRequest
         1     20                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          parent
         4     WINDOW                          window
         20                                    未使用

    ReparentNotify
         1     21                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          event
         4     WINDOW                          window
         4     WINDOW                          parent
         2     INT16                           x
         2     INT16                           y
         1     BOOL                            override-redirect
         11                                    未使用

    ConfigureNotify
         1     22                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          event
         4     WINDOW                          window
         4     WINDOW                          above-sibling
              0     None
         2     INT16                           x
         2     INT16                           y
         2     CARD16                          width
         2     CARD16                          height
         2     CARD16                          border-width
         1     BOOL                            override-redirect
         5                                     未使用

    ConfigureRequest
         1     23                              code
         1                                     stack-mode
              0     Above
              1     Below
              2     TopIf
              3     BottomIf
              4     Opposite
         2     CARD16                          通し番号
         4     WINDOW                          parent
         4     WINDOW                          window
         4     WINDOW                          sibling
              0     None
         2     INT16                           x
         2     INT16                           y
         2     CARD16                          width
         2     CARD16                          height
         2     CARD16                          border-width
         2     BITMASK                         value-mask
              #x0001     x
              #x0002     y
              #x0004     width
              #x0008     height
              #x0010     border-width
              #x0020     sibling
              #x0040     stack-mode
         4                                     未使用

    GravityNotify
         1     24                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          event
         4     WINDOW                          window
         2     INT16                           x
         2     INT16                           y
         16                                    未使用

    ResizeRequest
         1     25                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          window
         2     CARD16                          width
         2     CARD16                          height
         20                                    未使用

    CirculateNotify
         1     26                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          event
         4     WINDOW                          window
         4     WINDOW                          未使用
         1                                     place
              0     Top
              1     Bottom
         15                                    未使用

    CirculateRequest
         1     27                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          parent
         4     WINDOW                          window
         4                                     未使用
         1                                     place
              0     Top
              1     Bottom
         15                                    未使用

    PropertyNotify
         1     28                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          window
         4     ATOM                            atom
         4     TIMESTAMP                       time
         1                                     state
              0     NewValue
              1     Deleted
         15                                    未使用

    SelectionClear
         1     29                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     TIMESTAMP                       time
         4     WINDOW                          owner
         4     ATOM                            selection
         16                                    未使用

    SelectionRequest
         1     30                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     TIMESTAMP                       time
              0     CurrentTime
         4     WINDOW                          owner
         4     WINDOW                          requestor
         4     ATOM                            selection
         4     ATOM                            target
         4     ATOM                            property
              0     None
         4                                     未使用

    SelectionNotify
         1     31                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     TIMESTAMP                       time
              0     CurrentTime
         4     WINDOW                          requestor
         4     ATOM                            selection
         4     ATOM                            target
         4     ATOM                            property
              0     None
         8                                     未使用

    ColormapNotify
         1     32                              code
         1                                     未使用
         2     CARD16                          通し番号
         4     WINDOW                          window
         4     COLORMAP                        colormap
              0     None
         1     BOOL                            new
         1                                     state
              0     Uninstalled
              1     Installed
         18                                    未使用

    ClientMessage
         1     33                              code
         1     CARD8                           format
         2     CARD16                          通し番号
         4     WINDOW                          window
         4     ATOM                            type
         20                                    data

    MappingNotify
         1     34                              code
         1                                     未使用
         2     CARD16                          通し番号
         1                                     request
              0     Modifier
              1     Keyboard
              2     Pointer
         1     KEYCODE                         first-keycode
         1     CARD8                           count
         25                                    未使用

## 用語集

Access control list(アクセス制御リスト)

  X は、クライアント・プログラムを実行することができるホストのリスト(目録)を保持している。デフォルトの場合、ディスプレイを使用できるのは、ローカル・ホスト上のプログラム、及びサーバが読み込む初期リストで指定されているホストの上で動くプログラムだけである。ローカル・ホスト上のクライアントは、このアクセス制御リストを変更することができる。サーバを実装する時に別の認証機構を実装し、この機構(アクセス制御リスト)と併用したり、この機構の代用としたりすることもできる。この機構の動作は、サーバが接続開設時に受け取った認証プロトコルの名前とデータとに基いて、切り替えることができる。

Active grab(能動的占有、アクティブ占有)

  ポインタやキーボードを実際に所有しているのが単一の占有クライアントである場合に「占有が能動的である」という。

Ancestors(祖先、祖先ウィンドウ)

  W が A の子孫(子孫ウィンドウ)である場合、A は W の祖先(祖先ウィンドウ)である。

Atom(アトム)

  アトムは文字列名に与えられた ID であり、１つの文字列名に１つのアトムが対応し、被りは無い。アトムを使ってプロパティ、型、セレクションを識別する。

Background(背景)

  InputOutput は背景を持つことができる。この背景は１枚のピクスマップとして定義されている。ウィンドウの領域の内容が失われたり無効になったりした場合、サーバは自動的に同領域を「背景」でタイルする(訳註：用語集「タイル」を参照)。

Backing store(バッキング・ストア)

  サーバがウィンドウの内容を保持しているとき、スクリーンのピクセル情報とは別に保存してある(saved off screen)ピクセル情報のことをバッキング・ストアという。

Bit gravity(ビット・グラヴィティ)

  ウィンドウのサイズを変更しても、同ウィンドウの内容は必ずしも破棄されるわけではない。変更前の内容をウィンドウの特定の領域に再配置するよう、サーバに要求することができる(但し、実施される保証は無い)。このようにウィンドウの内容を特定の位置に引き寄せることを「ビット・グラヴィティ」と呼ぶ。

Bit plane(ビット・プレーン)

  ピクスマップやウィンドウを「ビットマップの積み重なったもの」と考えるとき、１枚１枚のビットマップを「ビット・プレーン」あるいは単に「プレーン」と呼ぶ。

Bitmap(ビットマップ)

  ビットマップとは、深さ(depth)が 1 のピクスマップのことである。

Border(ボーダ、枠)

  InputOutput ウィンドウは、４辺とも同じ太さの枠(ボーダ)を持つことができる。ボーダの内容はピクスマップ１つで定義され、サーバが自動的にボーダの内容を管理する。ボーダの領域に対して露出イベント(Exposure event)が発生することはない。

Button grabbing(ボタンの占有)

  ポインタのボタンは、クライアントによって受動的に(passively)占有され得る。受動的に占有されているボタンが押されると、ポインタは以後クライアントによって能動的に(actively)占有される。

Byte order(バイト順)

  画像(ピクスマップ/ビットマップ)データの場合、サーバがバイト順を定めるので、バイト順の異なるクライアントは、必要に応じてバイトを並び替えなければならない。それ以外のプロトコル全部においては、クライアントがバイト順を定めるので、サーバが必要に応じてバイトを並び替えることになる。

Children(子)

  ウィンドウの子とは、同ウィンドウの下位ウィンドウであって、且つ最初の層に属するもののことである。

Class(クラス)(訳者追加)

  X では、クラスという用語は、ウィンドウのクラスとヴィジュアルのクラスの２つがある。ウィンドウのクラスは、ウィンドウが InputOnly であるか InputOutput であるかを表すもの。ヴィジュアルのクラスは、ウィンドウが使用するカラーモデルを表すものであり、DirectColor、GrayScale、PseudoColor、StaticColor、StaticGray、TrueColor のいづれかである。

Client(クライアント)

  アプリケーション・プログラムは、TCP 接続や共有メモリ・バッファなどのプロセス間通信経路を通してウィンドウ・システム・サーバに接続する。このようなプログラムがウィンドウ・システム・サーバのクライアントである。より正確に言うと、クライアントとは通信経路そのもののことである。例えば、サーバに対して複数の経路を開いているプログラム(１個のプログラム)は、プロトコル上は、複数のクライアントと見做される。リソース(資源)の寿命は、プログラムの寿命ではなく接続の寿命によって定まる。

Clipping region(クリップ領域)

  グラフィクス・コンテクストにおいては、出力をウィンドウの特定の領域に限定するために、ビットマップや矩形のリスト(配列)を指定することができる。このビットマップや矩形のリストで定義された画像領域(image)のことを「クリップ領域」と呼ぶ。

Colormap(カラーマップ)

  １つのカラーマップは、色の値を定義したエントリ(entry)の集合１つから成る。あるウィンドウの内容は、同ウィンドウに紐付けられたカラーマップを用いて表示される。各ピクセル値はカラーマップ内の索引として機能し、この索引によってモニターの電子銃の動きを決める RGB 値をカラーマップから取り出す。ハードウェアの制限次第ではあるが、１つ以上のカラーマップを１度に組み込むことができる。このようにして、組み込んだカラーマップと紐付けられているウィンドウを正しい色で表示することができるようになる。

Connection(接続)

  サーバとクライアント・プログラムとの間のプロセス間通信経路のことを「接続」と呼ぶ。クライアント・プログラムは通常(但し必ずではない)、サーバに対する接続を１つ持っており、この接続を通じてリクエストとイベントを送受信する。

Containment(含んでいる、包含関係)

  あるウィンドウが表示可能状態であり、且つ同ウィンドウの可視領域の内部または同ウィンドウの子孫のいづれかの可視領域の内部にカーソルのホットスポットが存在する場合、このウィンドウはポインタを「含んでいる」という。ウィンドウのボーダ(枠)は、包含関係に関する限り、ウィンドウの一部であると考える。あるウィンドウがポインタを含んでおり、且つその子孫がポインタを含んでいないとき、ポインタは前者のウィンドウの「内部にある」(is “in”)という。

Coordinate system(座標系)

  座標系は、水平方向の X 軸と垂直方向の Y 軸を持っており、左上が原点 [0, 0] である。座標は、整数の値で表現され、単位はピクセルであり、ピクセルの中心の位置を表す。各ウィンドウも各ピクスマップも、すべて自分自身の座標系を持つ。ウィンドウの原点は、ボーダの内側の左上隅である。

Cursor(カーソル)

  カーソルは、ポインタが見える形でスクリーン上に現れたものである。カーソルを構成するのは、ホットスポット、ソース・ビットマップ、形状ビットマップ、及び対になる２つの色である。あるウィンドウのためにカーソルを定義した場合、そのウィンドウの内部にポインタがあるときは、ポインタの見た目が「定義されたカーソル」に従って変化する。

Depth(深さ、深度)

  ウィンドウやピクスマップの深度とは、ウィンドウやピクスマップの１ピクセル当たりのビット数のことである。グラフィクス・コンテクストの深度とは、グラフィクスの出力の際にそのグラフィクス・コンテクストと組み合わせて使うことができるドローアブルの深度のことである。

Device(デバイス、装置)

  キーボード、マウス、タブレット、トラック・ボール、ボタン・ボックスなどを総称して「入力デバイス」と呼ぶ。コア・プロトコル(本体のプロトコル)で扱うデバイスは、「キーボード」と「ポインタ」の２つだけである。

DirectColor

  DirectColor は、カラーマップのクラスの１つである。このクラスの場合、ピクセル値は３つのサブフィールド(subfield)に分割され、それぞれのサブフィールドが(RGB 値を得るための)索引として機能する。第１のサブフィールドに入っている配列は、赤の強度の値を得るための索引として機能する。第２のサブフィールドに入っている配列は、青の強度の値を得るための索引として機能する。第３のサブフィールドに入っている配列は、緑の強度の値を得るための索引として機能する。RGB 値は動的に変更することができる。

Display(ディスプレイ)

  サーバとそのスクリーンとその入力デバイスを合わせたものを「ディスプレイ」と呼ぶ。

Drawable(ドローアブル)

  ウィンドウとピクスマップはどちらも、グラフィクス操作(演算)の２種類の操作対象(演算対象)「ソース」(source)及び「デスティネーション」(destination)として使用することができる。こうしたウィンドウとピクスマップを総称して「ドローアブル」と呼ぶ。但し、InputOnly のウィンドウは、グラフィクス操作ではソースとしてもデスティネーションとしても使用することができない。

Event(イベント)

  クライアントへの情報通知は、イベントを使って非同期的に行われる。イベントには、デバイスから非同期的に生成されるものと、クライアントのリクエストの副作用として生成されるものがある。イベントは「型」によって分類される。クライアントが(型を指定した上で)同型のイベントの通知を受けることを明示的に要求しない限り、その型のイベントがサーバからクライアントへ送られることはない。一方、クライアントは他のクライアントへ強制的にイベントを送りつけることができる。報告されるイベントは大抵、あるウィンドウ(で起きたこと)に関するものである。

Event mask(イベント・マスク)

  イベントの要求は、(常に)各ウィンドウに関するものとして行われる。あるウィンドウに関してクライアントが要求するイベントの型の集合を示すには、イベント・マスクを用いる。

Event synchronization(イベントの同期)

  多重伝送されているデバイス・イベントを逆多重化(多重分離、選り分け)してクライアントへ送信するとき(特にウィンドウ管理の操作の過程でポインタ・イベントとキーボード・イベントの送信先を決めるとき)、ある種の競合状態(race condition)が起こり得る。イベント同期機構を使うと、(このような場合でも)デバイス・イベントを同期処理することができる。

Event propagation(イベントの伝播)

  デバイス関連のイベントは、同イベントの発生元ウィンドウから祖先ウィンドウへと伝播していく。この伝播は、そのイベント型を処理する旨を表明していたクライアントが現れるか、または同イベントが明示的に破棄されるかするまで止まらない。

Event source(イベント・ソース、イベントの発生元)

  ポインタが内部にあるウィンドウがデバイス関連イベントの発生元(source)となる。(訳註：「the pointer is in」･･･「Containment」(含んでいる)を参照。)

Event window(イベント・ウィンドウ、訳者追加)

  あるウィンドウを対象としてイベントが報告される場合、そのウィンドウのことをイベント・ウィンドウと呼ぶ。

Exposure event(露出イベント)

  ウィンドウが隠れたり再構成(位置と大きさを変更)したりした場合、サーバがウィンドウの内容を保存しているとは限らない。ウィンドウ内の領域の内容が失われてしまった時、それを知らせるために露出イベントをクライアントへ送信する。

Extension(拡張、拡張機能)

  コア・プロトコルに対する拡張機能を定義して、システムの機能を拡張することができる。拡張機能の定義では拡張の名前も定める。出力リクエスト、リソース、及びイベント型の拡張は、全て実装可能であり且つ望ましいものでもある。

Focus window(フォーカス・ウィンドウ)

  「フォーカス・ウィンドウ」は、「入力フォーカス」と同じ意味である。

Font(フォント)

  フォントは、グリフ(glyph：字形)(文字が典型)の一覧表(matrix)である。X プロトコルは、文字集合の変換や解釈は一切行わない。クライアントは、グリフの配列の要素番号として機能する値を指定するだけでよい。フォントには付加的な寸法情報が含まれており、これによってグリフの間隔(文字の間隔)と行の間隔が定まる。

GC、GContext

  「GC」と「gcontext」は、「グラフィクス・コンテクスト」(graphics context)を略したものである。

Glyph(グリフ、字形)

  グリフはイメージ(典型的には文字のイメージ)であり、フォントの中に入っている。

Grab(占有)

  クライアントは、キーボード・キー、キーボード、ポインタ・ボタン、ポインタ、及びサーバを排他的に占有することができる。基本的には、これらの各種占有機能は、通常のアプリケーションが使用することを想定したものではなく、さまざまな入力マネージャ及びウィンドウ・マネージャがさまざまな様式のユーザ・インターフェイスを実装するために使用すべきものである。

Graphics context(グラフィクス・コンテクスト)

  グラフィクスの出力に関するさまざまな情報をグラフィクス・コンテクストに格納する。たとえば、前景ピクセル、背景ピクセル、直線の幅、クリップ領域などである。あるグラフィクス・コンテクストを使う際には、同グラフィクス・コンテクストと同じルート、同じ深さ(depth)を持つドローアブルと組み合わせなければならない。

Graphics primitive(グラフィクス・プリミティブ)(訳者追加)

  グラフィクスを描画する X 関数をグラフィクス・プリミティブと呼ぶ。X には描画プリミティブとして、点や折れ線、点線の折れ線、矩形、円、楕円、円弧を描くことができる関数群が用意されている。塗りつぶしを行う関数群も「プリミティブ」である。X に備わっているグラフィクス・プリミティブは、グラフィクス作成に必要な情報全てを含んでおらず、グラフィクス・コンテクストというリソースを併用して不足している変数を補うことになる。グラフィクス・プリミティブで描画する形状の全体を指定し、グラフィクス・コンテクストで描画の方法を指定する、と考えることができる。

Gravity(グラヴィティ)

  「ビット・グラヴィティ」及び「ウィンドウ・グラヴィティ」を見よ。

GrayScale

  GrayScale は、PseudoColor の特別な場合(退化した場合)と考えることができる。GrayScale ではカラーマップの全てのエントリにおいて赤、緑、青の値が等しく、結果として灰色の色調となる。灰色の値は動的に変更できる。

Hotspot(ホットスポット)

  カーソルにはホットスポットがある。ホットスポットとは、カーソル内部の点の中、ポインタの座標として報告される点のことである。

Identifier(識別子)

  識別子はリソースに紐付けられた固有の値であり、１つの識別子に１つのリソースが対応し、値の被りは無い。クライアントはこの値を使ってリソース(同値に紐付けられたもの)を指定する。識別子は、どのような接続においても使用することができる。

Inferiors(子孫、子孫ウィンドウ)

  あるウィンドウの子孫とは、同ウィンドウの下に入れ籠状になって属している下位ウィンドウ全てのことである。子ウィンドウ、子ウィンドウの子ウィンドウなど。

Input focus(入力フォーカス)

  入力フォーカスとは、通常、キーボードの入力を処理する範囲を定めるウィンドウのことである。生成されたキーボード・イベントが通常であればこのウィンドウもしくはその子孫のいづれかに対して報告されるであろう場合、同イベントは通常通りに(このウィンドウもしくはその子孫のいづれかに)報告される。そうでない場合、同イベントは(強制的に)フォーカス・ウィンドウを対象としたイベントとして報告される。入力フォーカスの設定によっては、全てのキーボード入力を破棄することもできるし、フォーカス・ウィンドウを動的に変更して、各キーボード・イベントが発生した時にポインタが存在するスクリーンのルート・ウィンドウをフォーカス・ウィンドウにすることもできる。

Input manager(入力マネージャ)

  キーボード入力の制御は通常、入力マネージャ・クライアントが行う。

InputOnly window(InputOnly ウィンドウ)

  InputOnly ウィンドウは、グラフィクスのリクエストの対象として使うことができないウィンドウである。InputOnly ウィンドウは不可視であり、カーソル、入力イベントの生成、占有などの制御に用いることができる。InputOnly ウィンドウは、InputOutput ウィンドウを子孫として持つことができない。

InputOutput window(InputOutput ウィンドウ)

  InputOutput ウィンドウは、不透明なウィンドウの普通種であり、入力にも出力にも使える。InputOutput ウィンドウは、InputOutput ウィンドウも InputOnly ウィンドウも子孫として持つことができる。

Key grabbing(キーの占有)

  クライントは、キーボード上のキーを受動的に(passively)占有することができる。受動的に占有されていたキーが押された場合、キーボードは、件のクライアントによって能動的に(actively)占有された状態へと移る。

Keyboard grabbing(キーボードの占有)

  クライアントは、キーボードの制御を能動的に(actively)占有することができる。この場合キー・イベントは、通常送られるはずのクライアントではなく、占有を行っているクライアントへ送られることになる。

Keysym(キー・シンボル)

  キーボード上の各キーに描いてある記号を符号化したものである。

Mapped(マップされている)

  あるウィンドウに対するマップ命令(a map call)の実行が完了している場合、そのウィンドウは「マップされている」という。アンマップされている(unpmapped)(マップされていない)ウィンドウとその子孫は、表示可能状態にも可視状態にもなり得ない。

Modifier keys(モディファイア・キー、修飾キー)

  Shift、Control、Meta、Super、Hyper、Alt、Compose、Apple、CapsLock、ShiftLock 及びこれらに類するキーを修飾キーと呼ぶ。

Monochrome(モノクロ)

  Monochrome (モノクロ)は、StaticGray の特殊な場合であり、カラーマップのエントリが２つしかない。

Obscure(隠す)

  あるウィンドウが他のウィンドウを「隠している」とき、後者のウィンドウは「隠されている」という。次のような条件が満たされたとき、「ウィンドウ A がウィンドウ B を隠している」という。即ち、両ウィンドウが表示可能な(viewable) InputOutput ウィンドウであり、グローバルな重ね順(ウィンドウの重ね順)に関して A の方が上(前面)にあり、且つ A の外縁によって定まる矩形が B の外縁によって定まる矩形と交差している(intersect)場合である。「隠す」(obscure)と「覆う」(occlude)の違いに注意。ウィンドウのボーダ(枠)も計算に含めること、また、ウィンドウは隠されていても依然として可視領域(visible regions)を持つことができることにも注意。

Occlude(覆う)

  あるウィンドウが他のウィンドウを「覆っている」とき、後者のウィンドウは「覆われている」という。次のような条件が満たされたとき、「ウィンドウ A がウィンドウ B を覆っている」という。即ち、両ウィンドウがマップされており、グローバルな重ね順(ウィンドウの重ね順)に関して A の方が上(前面)にあり、且つ A の外縁によって定まる矩形が B の外縁によって定まる矩形と交差している(intersect)場合である。「覆う」(occlude)と「隠す」(obscure)の違いに注意。ウィンドウのボーダ(枠)も計算に含めることにも注意。(訳註：InputOnly ウィンドウは、他のウィンドウを「隠す」ことはできないが「覆う」ことは可能。)

Padding(パディング)

  プロトコル・リクエストの中のバイトの位置を自然な境界に揃えるため、データ・ストリームの中に埋め合わせ(padding)のバイトを挿入することがある。これによって、さまざまな構成(architecture)のマシンに移植しやすくなる。

Parent window(親ウィンドウ)

  C が P の子(child)であれば、P は C の親(parent)である。

Passive grab(受動的占有)

  あるキーやボタンを占有しても、その占有は受動的占有にすぎない。占有が能動的になる(activate)のは、実際に同キーや同ボタンが押されたときである。

Pixel value(ピクセル値)

  ピクセル１つは、N ビットの値１つから成る。N は、対象のウィンドウやピクスマップで使われているビット・プレーンの数である(即ち、N は同ウィンドウや同ピクスマップの深さ(depth)である)。ウィンドウのピクセル値は、カラーマップ内の索引として機能し、実際に表示する色を取り出すのに使われる。

Pixmap(ピクスマップ)

  ピクスマップは３次元のビット配列である。けれども、通常はピクスマップを「ピクセルの２次元の配列」と見做し、「各ピクセルは 0 から 2N - 1 までの値を取ることができる」ものと考える。ここでの N は同ピクスマップの深さ(z 軸)である。また、ピクスマップは、ビットマップが N 枚積み重なったものと考えることもできる。

Plane(プレーン)

  「ピクスマップやウィンドウはビットマップが積み重なったものである」と考えるとき、１枚１枚のビットマップをプレーンあるいはビット・プレーン(bit plane)と呼ぶ。

Plane mask(プレーン・マスク)

  グラフィクス操作においては、デスティネーション(destination)のビット・プレーンの一部にしか影響を与えないように制限をかけることができる。プレーン・マスクは、どのプレーンを変更するべきなのかを示すビット・マスクである。プレーン・マスクはグラフィクス・コンテクストに格納される。

Pointer(ポインタ)

  ポインタとは、カーソルに結び付けられ、スクリーン上の位置を追跡されるポインティング・デバイスのことである。

Pointer grabbing(ポインタの占有)

  クライアントは、ポインタの制御を能動的に(actively)占有することができる。その場合、ボタン・イベントとモーション・イベント(移動のイベント)は、通常であれば同イベントが送られるはずであったクライアントではなく、ポインタ制御を能動的に占有しているクライントへ送られることになる。

Pointing device(ポインティング・デバイス)

  ポインティング・デバイスとは、一般的には、マウスやタブレットなど、面の移動を効率的に行えるデバイスのことである。コア・プロトコルでは可視のカーソルは１つしか定義していない。このカーソルは、ポインタとして接続されたポインティング・デバイスであれば何であれ、その位置を追跡する。

Primitive(プリミティブ)(訳者追加)

  グラフィクス・プリミティブに同じ。

Property(プロパティ)

  ウィンドウは、自身に紐付けられたプロパティを持つことができる。プロパティは、名前、型、データ形式(format)、及びデータで構成される。本プロトコルにおいては、プロパティの解釈は一切行わない。プロパティは、クライアントのための汎用の命名機構として作られた。例えば、クライアントはプロパティを用いてサイズ変更に関するヒントやプログラム名、アイコンの形式などの情報をウィンドウ・マネージャと共有することができるであろう。

Property list(プロパティ・リスト、プロパティの目録)

  あるウィンドウのプロパティ・リストとは、同ウィンドウに紐付けて定義されているプロパティ群の目録のことである。

PseudoColor

  PseudoColor は、カラーマップのクラスの１つである。このクラスにおいては、ピクセル値はカラーマップ内の索引として機能し、赤、緑、青の値を取り出すのに使われるのだが、この赤、緑、青の値は互いに独立している。言い換えると、このカラーマップは３つの値の組(triple)の配列と見ることができる。RGB 値は動的に変更することができる。

Redirecting control(リダイレクト制御、相手先変更)

  ウィンドウ・マネージャ(あるいはクライアント・プログラム)は、さまざまな様式のウィンドウ配置方針を実施しようとするであろう。クライアントがウィンドウのサイズや位置の変更を試みる場合、その操作は実際には行われず、同操作命令はリダイレクト制御によって指定されたクライント(訳註：大抵はウィンドウ・マネージャ)へリダイレクト(宛て先変更)される可能性がある。

Reply(リプライ、返答)

  クライアント・プログラムが要求した情報は、リプライ(返答)によって同クライアントへ送り返される。イベントもリプライも同一接続上を多重送信(multiplex)される。大抵のリクエストはリプライを生成しないが、複数のリプライを生成するリクエストも存在する。

Request(リクエスト、要求)

  サーバに対する命令のことをリクエストと呼ぶ。リクエストは、接続を通して送られる際には、単一のデータ・ブロック(データ塊)の形をとる。

Resource(リソース、資源)

  ウィンドウ、ピクスマップ、カーソル、フォント、グラフィクス・コンテクスト、及びカラーマップのことをリソースと呼ぶ。これらのリソースは全て、自身に紐付けられた一意の識別子を持つ。この識別子はリソースを特定するためのものである。あるリソースの寿命は、通常、同リソースの作成時に使用された接続の寿命を超えないものである。

RGB values(RGB 値)

  赤、緑、青(RGB)の強度値を使って色を定義する。これらの値は常に 16 ビットの符号なしの数値で表され、最小強度が 0、最大強度が 65535 である。サーバは、この値をディスプレイ・ハードウェアに合うように調整(scale)する。

Root(ルート)

  あるピクスマップ、カラーマップ、グラフィクス・コンテクストのルートは、同ピクスマップ、同カラーマップ、同グラフィクス・コンテクストを作成する時に使用したドローアブル(種類は問わない)のルートと同じである。あるウィンドウのルートは、同ウィンドウを作成する際に上位者として指定したルート・ウィンドウである。

Root window(ルート・ウィンドウ)

  各スクリーンは、自身を残さず覆う(cover)ルート・ウィンドウを１つ持つ。ルート・ウィンドウは、再構成(位置や大きさの変更)できず、アンマップもできないが、他の機能については普通のウィンドウと変わらない振る舞いをする。ルート・ウィンドウは親を持たない。

Save set(セーブ・セット、保存集合)

  あるクライアントのセーブ・セットとは、他のクライント群のウィンドウ群のリスト(目録)のことである。但し、ここにいう「他のクライント群のウィンドウ群」とは、セーブ・セットを持つクライアントが接続を閉じる時点において、同クライアントが持つウィンドウ群のいづれかの子孫であったならば(この時点では)破棄するべきではないウィンドウ群であって、且つ現在アンマップされているならば(この時点で)再びマップするべきであるようなウィンドウ群のことをいう。セーブ・セットは通常、ウィンドウ・マネージャが異常終了した場合にウィンドウ群が消失するのを避けるため、ウィンドウ・マネージャによって使用される。

Scanline(スキャンライン、走査線)

  走査線とは、ピクセル値やビット値のリスト(配列)であって、画像中の水平の１行(全ての値の y 座標が等しい)と見做すことができるもののことである。このリスト(配列)においては、各値は x 座標に関して昇順(小さいものが前)に並んでいる。

Scanline order(走査線順、スキャンライン順)

  ある画像が y 座標に関して昇順(小さいものが先)に並んだ複数の走査線によって構成されている場合、その画像は「走査線順」で表されているという。

Screen(スクリーン)

  サーバは、複数の独立したスクリーンを備えることができ、通常、そのようなスクリーンは物理的に独立したモニターを持つ。１つのキーボードと１つのポインタを複数のスクリーンで共有する場合、実際、そうした構成になるであろう。

Selection(セレクション)

  セレクションは、動的な型を持つ間接的なプロパティであると考えることができる。すなわち、プロパティは、サーバに格納されるのではなく、あるクライント(「所有者」)によって保持される。セレクションは、グローバルな(大域的な)性質を持ち、ユーザに属するものと見做される(実際はクライアントが保持しているのであるが)。特定のウィンドウ階層や特定のクライアント群の私物(being private)ではない。クライアントは、セレクションの内容を取得しようとする時は、セレクションの「ターゲット型」(target type)を指定する。このターゲット型を使えば、セレクションの内容をどのような表現形式で伝送するのかを制御することができる。例えば、セレクションが「ユーザが最後にクリックしたもの」であり、現在それが画像である場合、画像の内容を XY フォーマットで送信するのかそれとも Z フォーマットで送信するのかを、ターゲット型を使って指定することができる。また、ターゲット型を使えば、伝送する内容のクラス(class、種類)を制御することもできる。例えば、文章の一段落を内容として持つセレクションに関して、そのテキストではなく「見た目」(looks)(フォント、行間、行頭の字下げ等)を要求することができる。ターゲット型はその他の目的にも使用できる。本プロトコルでは、ターゲット型の意味(semantics)に制約を設けていない。

Server(サーバ)

  サーバは、基本的なウィンドウ機構を提供する。サーバは、クライアントからの「接続」を管理し、グラフィクス出力を各スクリーンへ向けて多重送信し、入力を逆多重化(多重分離、選り分け)して適切なクライアントへ送り返す。

Server grabbing(サーバの占有)

  サーバは、単一のクライアントがこれを占有し排他的に使用することができる。この占有によって、同占有が終了するまでの間、他のクライアント接続からのリクエストの処理は止められる。これは通常、ラバー・バンディング(rubber-banding：訳註：ウィンドウ・マネージャはラバー・バンディングという技法を使って、移動中あるいはサイズ変更中のウィンドウの輪郭(の軌跡)を表示することができる)、ポップアップ・メニュー、あるいは不可分のリクエストの処理などのための一時的な状態にすぎない。

Sibling(兄弟)

  親ウィンドウを同じくする子供のことを兄弟ウィンドウと呼ぶ。

Stacking order(重ね順)

  兄弟ウィンドウは、互いの上に重なることができる。他のウィンドウの上にあるウィンドウは、下にあるウィンドウを隠す(obscure)と同時に覆う(occlude)。これは机の上の(重なっている)紙に似ている。兄弟ウィンドウ間のこのような関係のことを「重ね順」と呼ぶ。

StaticColor

  StaticColor は、PseudoColor の特別な場合(退化した場合)と考えることができる。StaticColor では、各 RGB 値は既定であり読み込み専用である。

StaticGray

  StaticGray は、GrayScale の特別な場合(退化した場合)と考えることができる。StaticGray では、灰色の各値は既定であり読み込み専用である。灰色の各値は通常、線型もしくは線型に近い傾斜で増減する。

Stipple(スティプル)

  スティプル・パターンとは、クリップ・マスクとして機能する領域をタイルする(タイルして作成する)のに使うビットマップのことである。このクリップ・マスクは、「前景色」を使って塗りつぶす操作において、追加のクリップ・マスクとして使用する。

String Equivalence(文字列の等値性)

  ２つの ISO Latin-1 STRING8 の値は、次の場合に等しいと見做す。即ち、両者の長さが同じで、且つ対応するバイト群の値が等しいか若しくは以下のように等価である場合である。バイト値が等価のものを挙げていくと、１０進値 65 から 90 (境界を含む：文字「A」から「Z」)はそれぞれ、１０進値 97 から 122 (境界を含む：文字「a」から「z」)と等価であり、１０進値 192 から 214 (境界を含む：「A grave」(À)から「O diaeresis」(Ö))はそれぞれ、１０進値 224 から 246 (境界を含む：「a grave」(à)から「o diaeresis」(ö))と等価であり、そして１０進値 216 から 222 (境界を含む：文字「O oblique」(Ø)から「THORN」(Þ))はそれぞれ、１０進値 246 から 254 (境界を含む：文字「o oblique」(ø)から「thorn」(þ))と等価である。

Tile(タイル)

  ピクスマップを平面に敷き詰めるように複製描画することで、領域をタイルすることができる。この時に用いるピクスマップそのものをタイルと呼ぶこともある。

Timestamp(タイムスタンプ)

  タイムスタンプは、ミリ秒で表される時間値である。これは通常、サーバが最後にリセットした時からの時間である。タイムスタンプの値は周期的であり、49.7 日で元に戻る。サーバの現在の時刻をタイムスタンプ T で表すとすると、サーバは、クライアントから受け取ったタイムスタンプを解釈するにあたっては常に、タイムスタンプ空間の半分を T より早い時刻として扱い、もう半分を T より遅い時刻として扱う。１つだけサーバが生成するのではないタイムスタンプ値(定数 CurrentTime)が存在する。この値は、リクエストにおいてサーバの現在の時刻を指定するのに使用するため、予約されている。

TrueColor

  TrueColor は、DirectColor の特別な場合(退化した場合)と考えることができる。TrueColor では、ピクセル値の各サブフィールドの符号は、それぞれ対応する RGB 値を直接表す。つまり、この場合のカラーマップの RGB 値は、既定であり読み込み専用である。この RGB 値は通常、線型もしくは線型に近い傾斜で増減する。

Type(型)

  型とは、プロパティのデータの解釈を一意に定めるために使用する任意のアトムのことである。サーバは型の解釈は一切行わない。型は、専らクライアントのためのものである。

Viewable(表示可能)

  あるウィンドウとその祖先すべてがマップされている場合、同ウィンドウは「表示可能」であるという。これは、ウィンドウのどこかの部分が実際に可視(visible)であることを意味しない。表示可能でないウィンドウに対してもグラフィクス・リクエストを実行することはできる。けれども、サーバがバッキング・ストアを持っている場合を除いて、出力は保存されない。

Visible(可視、可視状態である)

  あるウィンドウのある領域は、スクリーンを見る人が実際にその領域を目にすることができる場合に、「可視状態である」という。これは、同ウィンドウが表示可能(viewable)であり、且つ同領域が他のウィンドウに覆われていない(not occluded)場合にあたる。

Window gravity(ウィンドウ・グラヴィティ)

  ウィンドウのサイズを変更する場合、同ウィンドウの特定の位置を基準として、自動的に下位ウィンドウの再配置が行われることがある。下位ウィンドウをその親の特定部分に引き寄せるこの力のことを「ウィンドウ・グラヴィティ」と呼ぶ。

Window manager(ウィンドウ・マネージャ)

  スクリーン上のウィンドウの操作とユーザ・インターフェイス(の方針の実施)は、通常、その大半はウィンドウ・マネージャ・クライアントが行う。

XYFormat(XY フォーマット、XY 形式)

  あるピクスマップのデータは、次の場合に XY 形式であるという。即ち、同データが「ビット・プレーンの１つ１つを表すビットマップの集合」という形で構成されており、各プレーンが最上位ビットから最下位ビットへ順番に姿を現す形式である場合である。

ZFormat(Z 形式、Z フォーマット)

  あるピクスマップのデータは、同データが走査線順に並んだピクセル値の集合として構成されている場合、Z 形式であるという。

## 索引

### A

Access control list(アクセス制御リスト)： ChangeHosts、用語集
Active grab(アクティブ・グラブ、能動的占有) 用語集
  keyboard(キーボード)： GrabKeyboard
  pointer(ポインタ)： GrabPointer、ChangeActivePointerGrab
AllocColor： AllocColor
AllocColorCells： AllocColorCells
AllocColorPlanes： AllocColorPlanes
AllocNamedColor： AllocNamedColor
AllowEvents： AllowEvents
Ancestors(祖先)： 用語集
Atom(アトム)： InternAtom、用語集
  predefined(既定)： 既定のアトム(第７章)、既定のアトム(プロトコルの符号)
Authorization(認証)： 接続の開始

### B

Background(背景)： CreateWindow、ClearArea、用語集
Backing store(バッキング・ストア)： スクリーンの情報、用語集
Bell： Bell
Bit(ビット)
  gravity(グラヴィティ)： ConfigureWindow、用語集
  plane(プレーン)： 用語集
Bitmap(ビットマップ)： 用語集
  format(形式)： サーバの情報
Border(ボーダ)： 用語集
Button(ボタン)
  grabbing(占有)： GrabButton、用語集
  number(番号)： ポインタ(マウスなど)
ButtonPress： 入力デバイスのイベント
ButtonRelease： 入力デバイスのイベント
Byte order(バイト順)： 接続の開始、 用語集

### C

ChangeActivePointerGrab： ChangeActivePointerGrab
ChangeGC： ChangeGC
ChangeHosts： ChangeHosts
ChangeKeyboardControl： ChangeKeyboardControl
ChangeKeyboardMapping： ChangeKeyboardMapping
ChangePointerControl： ChangePointerControl
ChangeProperty： ChangeProperty
ChangeSaveSet： ChangeSaveSet
ChangeWindowAttributes： ChangeWindowAttributes
Children(子)： QueryTree、用語集
CirculateNotify： CirculateNotify
CirculateRequest： CirculateRequest
CirculateWindow： CirculateWindow
ClearArea： ClearArea
Client(クライアント)： 用語集
ClientMessage： ClientMessage
Clipping region(クリップ領域)： CreateGC、用語集
CloseFont： CloseFont
Colormap(カラーマップ)： CreateColormap、用語集
  types(カラーマップの型)： ヴィジュアルの情報
ColormapNotify： ColormapNotify
ConfigureNotify： ConfigureNotify
ConfigureRequest： ConfigureRequest
ConfigureWindow： ConfigureWindow
Connection(接続)： 接続の設定、用語集
  closing： 接続の切断
  opening： 接続の開始
Containment： 用語集
ConvertSelection： ConvertSelection
Coordinate system： 用語集
  translating： 用語集
CopyArea： CopyArea
CopyColormapAndFree： CopyColormapAndFree
CopyGC： CopyGC
CopyPlane： CopyPlane
CreateColormap： CreateColormap
CreateCursor： CreateCursor
CreateGC： CreateGC
CreateGlyphCursor： CreateGlyphCursor
CreateNotify： CreateNotify
CreatePixmap： CreatePixmap
CreateWindow： CreateWindow
CurrentTime： 用語集
Cursor： CreateCursor、用語集

### D

DeleteProperty： DeleteProperty
Depth： 用語集
DestroyNotify： DestroyNotify
DestroySubwindows： DestroySubwindows
DestroyWindow： DestroyWindow
Device： 用語集
DirectColor： 用語集
Display： 用語集
Drawable： 用語集

### E

EnterNotify： Pointer Window events
Error Codes
  Access： エラー
  Alloc： エラー
  Atom： エラー
  Colormap： エラー
  Cursor： エラー
  Drawable： エラー
  extensions： エラーの書式
  Font： エラー
  GContext： エラー
  IDChoice： エラー
  Implementation： エラー
  Length： エラー
  Match： エラー
  Name： エラー
  Pixmap： エラー
  Request： エラー
  Value： エラー
  Window： エラー
Error report
  encoding： エラー
  format： エラーの書式
Event： イベント、用語集
  encoding： イベント
  Exposure： Expose、用語集
  extension： Event Format
  format： Event Format
  mask： CreateWindow、用語集
  propagation： CreateWindow、用語集
  sending： SendEvent
  source： 入力デバイスのイベント、用語集
  synchronization： 用語集
Expose： Expose
Extension： リクエストの書式、用語集
  error codes： エラーの書式
  event： Event Format
  listing： ListExtensions
  querying： QueryExtension

### F

Fill rule： CreateGC
FillPoly： FillPoly
Focus window： 用語集
FocusIn： 入力フォーカスのイベント
FocusOut： 入力フォーカスのイベント
Font： OpenFont、用語集
ForceScreenSaver： ForceScreenSaver
FreeColormap： FreeColormap
FreeColors： FreeColors
FreeCursor： FreeCursor
FreeGC： FreeGC
FreePixmap： FreePixmap

### G

GC： 用語集
  (「Graphics context」も参照)
GContext： 用語集
  (「Graphics context」も参照)
GetAtomName： GetAtomName
GetFontPath： GetFontPath
GetGeometry： GetGeometry
GetImage： GetImage
GetInputFocus： GetInputFocus
GetKeyboardControl： GetKeyboardControl
GetKeyboardMapping： GetKeyboardMapping
GetModifierMapping： GetModifierMapping
GetMotionEvents： GetMotionEvents
GetPointerControl： GetPointerControl
GetPointerMapping： GetPointerMapping
GetProperty： GetProperty
GetScreenSaver： GetScreenSaver
GetSelectionOwner： GetSelectionOwner
GetWindowAttributes： GetWindowAttributes
Glyph： 用語集
Grab： 用語集
  (「Active grab」も参照)
  (「Passive grab」も参照)
GrabButton： GrabButton
GrabKey： GrabKey
GrabKeyboard： GrabKeyboard
GrabPointer： GrabPointer
GrabServer： GrabServer
Graphics context(グラフィクス・コンテクスト)： CreateGC、用語集
GraphicsExposure： GraphicsExposure
Gravity： ConfigureWindow、用語集
GravityNotify： GravityNotify
GrayScale： 用語集

### H

Hotspot： 用語集

### I

Identifier： 用語集
ImageText16： ImageText16
ImageText8： ImageText8
Inferiors： 用語集
Input device
  events： 入力デバイスのイベント
Input focus： SetInputFocus、用語集
  events： 入力フォーカスのイベント
Input manager： 用語集
InstallColormap： InstallColormap
InternAtom： InternAtom

### K

Key
  grabbing： GrabKey、用語集
  modifier (「Modifier keys」も参照)
Keyboard： キーボード
  grabbing： GrabKeyboard、用語集
Keycode： キーボード、サーバの情報
KeymapNotify： KeymapNotify
KeyPress： キーボード、入力デバイスのイベント
KeyRelease： 入力デバイスのイベント
Keysym： キーボード、ChangeKeyboardMapping、GetKeyboardMapping、KEYSYM の符号、用語集
  Unicode： Unicode KEYSYMs
KillClient： KillClient

### L

LeaveNotify： Pointer Window events
Line
  drawing： CreateGC、PolyLine
ListExtensions： ListExtensions
ListFonts： ListFonts
ListFontsWithInfo： ListFontsWithInfo
ListHosts： ListHosts
ListInstalledColormaps： ListInstalledColormaps
ListProperties： ListProperties
LookupColor： LookupColor

### M

MapNotify： MapNotify
Mapped window： MapWindow、MapNotify、用語集
MappingNotify： MappingNotify
MapRequest： MapRequest
MapSubwindows： MapSubwindows
MapWindow： MapWindow
modifier
  group： キーボード
  Lock： キーボード
  NumLock： キーボード
Modifier keys(モディファイア・キー、修飾キー)： SetModifierMapping、GetModifierMapping、用語集
Monochrome： 用語集
MotionNotify： 入力デバイスのイベント

### N

NoExposure： NoExposure
NoOperation： NoOperation

### O

Obscure： 用語集
Occlude： 用語集
Opcode
  major： リクエストの書式
  minor： リクエストの書式
OpenFont： OpenFont

### P

Padding： 構文規約、用語集
Passive grab(パッシブ・グラブ、受動的占有)： 用語集
  keyboard： GrabKey
  pointer： GrabButton
Pixel value： ヴィジュアルの情報、用語集
Pixmap： 用語集
  format： サーバの情報
Plane： 用語集
  mask： CreateGC、用語集
Pointer： 用語集
  grabbing： GrabPointer、用語集
Pointing device： 用語集
PolyArc： PolyArc
PolyFillArc： PolyFillArc
PolyFillRectangle： PolyFillRectangle
PolyLine： PolyLine
PolyPoint： PolyPoint
PolyRectangle： PolyRectangle
PolySegment： PolySegment
PolyText16： PolyText16
PolyText8： PolyText8
Property： ChangeProperty、用語集
Property list： 用語集
PropertyNotify： PropertyNotify
PseudoColor： 用語集
PutImage： PutImage

### Q

QueryBestSize： QueryBestSize
QueryColors： QueryColors
QueryExtension： QueryExtension
QueryFont： QueryFont
QueryKeymap： QueryKeymap
QueryPointer： QueryPointer
QueryTextExtents： QueryTextExtents
QueryTree： QueryTree

### R

RecolorCursor： RecolorCursor
Redirecting control： 用語集
ReparentNotify： ReparentNotify
ReparentWindow： ReparentWindow
Reply： 用語集
  format： リプライの書式
Request： 用語集
  encoding： リクエスト
  format： リクエストの書式
  length： リクエストの書式、サーバの情報
ResizeRequest： ResizeRequest
Resource： 用語集
  ID： サーバの情報
RGB values： 用語集
Root： 用語集
RotateProperties： RotateProperties

### S

Save set： 用語集
Scanline： 用語集
Scanline order： 用語集
Screen： スクリーンの情報、用語集
Selection： SetSelectionOwner、用語集
SelectionClear： SelectionClear
SelectionNotify： SelectionNotify
SelectionRequest： SelectionRequest
SendEvent： SendEvent
Sequence number： リクエストの書式
Server： 用語集
  grabbing： GrabServer、用語集
SetAccessControl： SetAccessControl
SetClipRectangles： SetClipRectangles
SetCloseDownMode： SetCloseDownMode
SetDashes： SetDashes
SetFontPath： SetFontPath
SetInputFocus： SetInputFocus
SetModifierMapping： SetModifierMapping
SetPointerMapping： SetPointerMapping
SetScreenSaver： SetScreenSaver
SetSelectionOwner： SetSelectionOwner
Sibling： 用語集
Stacking order： 用語集
StaticColor： 用語集
StaticGray： 用語集
Stipple： 用語集
StoreColors： StoreColors
StoreNamedColor： StoreNamedColor
String Equivalence： 用語集

### T

Tile： 用語集
Timestamp： 用語集
TranslateCoordinates： TranslateCoordinates
TrueColor： 用語集
Type： 用語集
Types
  ARC： 共通の型
  ATOM： 共通の型
  BITGRAVITY： 共通の型
  BITMASK： 共通の型
  BOOL： 共通の型
  BUTMASK： 共通の型
  BUTTON： 共通の型
  BYTE： 共通の型
  CARD16： 共通の型
  CARD32： 共通の型
  CARD8： 共通の型
  CHAR2B： 共通の型
  COLORMAP： 共通の型
  CURSOR： 共通の型
  DEVICEEVENT： 共通の型
  DRAWABLE： 共通の型
  encoding： 共通の型
  EVENT： 共通の型
  FONT： 共通の型
  FONTABLE： 共通の型
  GCONTEXT： 共通の型
  HOST： 共通の型、ChangeHosts
  INT16： 共通の型
  INT32： 共通の型
  INT8： 共通の型
  KEYBUTMASK： 共通の型
  KEYCODE： 共通の型、キーボード、サーバの情報
  KEYMASK： 共通の型
  KEYSYM： 共通の型、キーボード、KEYSYM の符号
  LISTofFOO： 共通の型
  LISTofVALUE： 共通の型
  OR： 共通の型
  PIXMAP： 共通の型
  POINT： 共通の型
  POINTEREVENT： 共通の型
  RECTANGLE： 共通の型
  STRING16： 共通の型
  STRING8： 共通の型
  TIMESTAMP： 共通の型
  VALUE： 共通の型
  VISUALID： 共通の型
  WINDOW： 共通の型
  WINGRAVITY： 共通の型

### U

UngrabButton： UngrabButton
UngrabKey： UngrabKey
UngrabKeyboard： UngrabKeyboard
UngrabPointer： UngrabPointer
UngrabServer： UngrabServer
UninstallColormap： UninstallColormap
UnmapNotify： UnmapNotify
UnmapSubwindows： UnmapSubwindows
UnmapWindow： UnmapWindow

### V

Viewable： 用語集
VisibilityNotify： VisibilityNotify
Visible： 用語集
Visual
  information： ヴィジュアルの情報

### W

WarpPointer： WarpPointer
Winding rule： CreateGC
Window
  children： 用語集
  gravity： ConfigureWindow、用語集
  InputOnly： 用語集
  InputOutput： 用語集
  manager： 用語集
  parent： 用語集
  root： 用語集

### X

XYFormat： サーバの情報、用語集

### Z

ZFormat： サーバの情報、用語集

入り口に戻る