原文はこちら。
翻訳にあたって、オープンソースグループ・ジャパンの MIT ライセンスの訳、X Japanese Documentation Project のXlib - C Language X Interfaceの日本語訳、及び「X プロトコル リファレンス・マニュアル」(Adrian Nye著、石川和也訳、ソフトバンク発行、1993年5月20日第3刷)を参考にした。
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.
(訳)
(以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル(以下「ソフトウェア」)の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可する。これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、サブライセンス、および/または販売する権利、およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれる。)
(上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載するものとする。)
(ソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、何らの保証もなく提供される。ここでいう保証には、商品性、特定の目的への適合性、および権利非侵害についての保証も含まれるが、それに限定されるものではない。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:設計理由)や実用法を提供するものではないし、完全なシステムの中でプロトコルを大局的に捉えようとしたものでもない。
このプロトコルには多くの管理機構が含まれているが、それらは通常のアプリケーションには不要なものである。特定のユーザ・インタフェイス1つを構築するために全ての機構が必要になるわけではない。本プロトコルは機構(mechanism)を提供するものであって方針(policy)を提供するものではない、という点は重要である。
Robert W. Scheifler
X Consortium, Inc.
全てのリクエストには、8ビットの major opcode (主たる命令コード)と16ビットの length フィールドが入っており、length フィールドの数値の単位は4バイトである。全てのリクエストは4バイトのヘッダ(主命令コード、length フィールド、及びデータ・バイト1つが入る)を持っており、このヘッダの後に0個以上のデータ・バイトが続く。length フィールドは、そのリクエスト全体(ヘッダを含む)の長さを表す。リクエストの length フィールドは、同リクエストを収容するのに要する最小の長さと等しくなければならない。length フィールドで指定された長さが必要な長さよりも長かったり短かったりすると、エラーが発生する。リクエスト中の「未使用」(unused)バイトは、0 でなくてもかまわない。主命令コード(major opcode)の 128 から 255 は、extensions (拡張機能)のために予約されている。1つの拡張が複数のリクエストを持つことを想定しているので、拡張のリクエストは通常(typically)、リクエストのヘッダの第2バイトに minor opcode (従たる命令コード)を追加で持つ。但し、この従命令コードは元より、拡張リクエストにおける他の全てのフィールドの並び順と解釈は、コア・プロトコル(本体のプロトコル)では定めない(訳註:通常(typically)、従命令コードがある場合、その位置はヘッダの2番目のバイトである)。ある接続におけるリクエストには全て、暗黙の中に 1 から順に sequence number (通し番号)が振られており、この通し番号はリプライ、エラー、イベントで使用される。
全てのリプライ(返答)には、32ビットの length フィールド(訳註:リプライの長さを表す)が入っており、length フィールドの数値の単位は4バイトである。全てのリプライは、32バイト(の基本部分)と、その後に続く0個以上のデータ・バイトから成る(個数は length フィールドで指定)。リプライ中の「未使用」バイトは、0 であるとは限らない。全てのリプライには、対応するリクエストの通し番号の下位16ビットも入っている。
エラー報告(いわゆるエラー)のデータ長は32バイトである。全てのエラーには、エラーの種類を表す8ビットのコードが入っている。エラー・コードの 128 から 255 は、拡張機能のために予約されている。全てのエラーには、蹉跌したリクエストの主命令コード(major opcode)と従命令コード(minor opcode)、及び同リクエストの通し番号(sequence number)の下位16ビットも入っている。次に挙げるエラー(第4章を参照)では、エラーの原因となったリソースの ID も返る。リソース ID を返すのは、Colormap、Cursor、Drawable、Font、GContext、IDChoice、Pixmap、及び Window のエラーである。Atom エラーでは、エラーの原因となったアトムが返る。Value エラーでは、エラーの原因となった値が返る。コア・プロトコルの他のエラーは、このような追加データは返さない。エラー中の「未使用」のバイトは、0 であるとは限らない。
イベントのデータ長は32バイトである。イベント中の「未使用」のバイトは、0 であるとは限らない。全てのイベントには、イベントの型を表す8ビットのコードが入っている。あるイベントが SendEvent リクエストによって生じたものである場合、このコードの最上位ビットが設定される。64 から 127 のイベント・コードは拡張機能のために予約されているが、コア・プロトコルでは、そのようなコードを持つイベントを選択する(関心があることを表明する)ための機構は規定していない。コア・プロトコルのイベント(KeymapNotify を除く)には全て、クライアントが発行してサーバが処理した(あるいは現在処理している)リクエストの中の最後のものの通し番号の下位16ビットも入っている。
本文書では、これ以降、下記の構文規約を使用する。
{...} という構文は、選択肢の集合(1つ)を表す。
[...] という構文は、構造体の構成要素の集合(1つ)を表す。
原則として、型(TYPE)は大文字で表し、各選択肢(AlternativeValues)は語頭だけ大文字にして表す。
第9章においては、リクエストは次の書式で記述する。
RequestName arg1: type1 ... argN: typeN ▶ result1: type1 ... resultM: typeM Errors: kind1, ..., kindK 説明。
上記の書式に従った記述の中に「▶」が存在しない場合、そのリクエストは「リプライ」(返答)(これは非同期である)を持たない。但し、その場合もエラーが返る可能性は依然としてある。「▶+」が使われている場合、1つのリクエストに対して1つ以上のリプライが発生する可能性がある。(訳註:「▶+」は本プロトコルでは使われていない。X Font Service Protocol に使用例あり。)
第11章においては、イベントは次の書式で記述する。
EventName value1: type1 ... valueN: typeN 説明。
RECTANGLE の座標 [x,y] は、左上隅の座標である。
STRING16 の大きな文字(2バイトの文字)は、2次元の表(matrix)の索引として機能する2つのバイトから成っているものと解釈する。CARD16 ではなく CHAR2B を使っているのは、そのためである。これは、JIS/ISO の2バイト文字の索引方式(method of indexing)に対応している。この方式は、文字数の多いフォントのほとんどが2バイトの索引表で定義できることを想定している。文字数の多いフォントを線型索引で構成する場合、CHAR2B は、byte1 を最上位バイトとして扱うことにより、16ビットの数値として解釈することができる。この場合、サーバは CHAR2B (の中身)のバイト交換(byte-swap)を行わないので、クライアントは、そのような16ビット文字を送信する際は、常に最上位バイトを先に転送すべきことになる。
HOST アドレスの長さ、形式、解釈は、アドレスの種類(family)ごとに異なる(ChangeHosts リクエストの項を参照)。
原則として、リクエストがエラーで終わった場合、同リクエストは副作用を齎さない(つまり、一部だけ実行されるということはない)。この原則の例外は、次のリクエストである。即ち、ChangeWindowAttributes、ChangeGC、PolyText8、PolyText16、FreeColors、StoreColors 及び ChangeKeyboardControl である。
各種リクエストの結果として、以下に挙げるエラー・コードが以下に挙げる理由によって発生する。
引数の型を決まった数の選択肢の集合で拡張してある場合(例えば <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 など)の集合がある。最上位ビット(29番目のビット)が設定されている KEYSYM は、企業専用のものとして予約されている。
各 KEYCODE には、KEYSYM のリスト(配列)1つが結び付けられている。このリストは、 (KEYCODE に)対応するキーの上に描かれている記号の集合を保持するものである。 このリストが(後ろに続く NoSymbol (訳註で後述)のエントリは無視して)「K」という1つの KEYSYM から成る場合、同リストはあたかも「K NoSymbol K NoSymbol」というリストであるかのように扱われる。同リストが(後ろに続く NoSymbol のエントリは無視して)「K1 K2」という KEYSYM の対1つから成る場合、同リストはあたかも「K1 K2 K1 K2」というリストであるかのように扱われる。同リストが(後ろに続く NoSymbol のエントリは無視して)「K1 K2 K3」という3つの KEYSYM の組から成る場合、同リストはあたかも「K1 K2 K3 NoSymbol」というリストであるかのように扱われる。このリストに本物の「void」要素(空の要素)を入れたい場合、VoidSymbol という値を使用することができる。
(訳註:Xlib - C Language X Interface によると、「NoSymbol」という KEYSYM の特別な値は、個々のキーコードの中の使用されない要素を埋めるために使用する、とのこと。)
このリストの最初の4つの要素は、2つの KEYSYM グループに分割される(訳註:後の記述等を見ると、各 KEYCODE の KEYSYM リストには5つ以上の要素を入れることができるようだ)。第1グループには1番目と2番目の KEYSYM が入り、第2グループには3番目と4番目の KEYSYM が入る。各グループの中の2番目の要素が NoSymbol である場合、そのグループは、あたかも2番目の要素が1番目の要素と同じであるかのように扱われる。但し、1番目の要素がアルファベットの KEYSYM 「K」であって、同アルファベットに対して大文字と小文字の両方が定義されている場合は、その限りでない。この場合、そのグループは、あたかも1番目の要素が小文字の「K」であり、2番目の要素が大文字の「K」であるかのように扱われる。
KeyPress イベントから KEYSYM を取り出すにあたっての標準規則では、第1グループと第2グループの KEYSYM しか使わないことになっている。そのため、リスト中の他の KEYSYM の解釈は、本文書では定義しない。修飾キー(modifier)の状態によって、どちらのグループを使うのかを決定する。グループ間の切り替えは、MODE SWITCH という名前の KEYSYM を使って行う。具体的には、この KEYSYM をある KEYCODE に結び付け、同 KEYCODE を Mod1 から Mod5 までの修飾キーのいづれかに結びつけるという方法によって行う。この修飾キーのことを「グループ修飾キー」(group modifier)と呼ぶ。いづれの KEYCODE の場合でも、グループ修飾キーが off の時は第1グループを使用し、グループ修飾キーが on の時は第2グループを使用する。
修飾キー 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 までの範囲(両端を含む)の16進数の数値を持つ。また、16進数 #x11000000 から #x1100FFFF までの範囲にある企業専用の KEYSYM もキーパッド KEYSYM である。
各グループの中のどの KEYSYM を使うべきかについては、以下に挙げる規則の中、最初に当てはまったものによって決定する。
まず、numlock 修飾キーが on であり、且つ2番目の KEYSYM がキーパッド KEYSYM である場合について。この場合、もし修飾キー Shift が on であるか、または修飾キー Lock が on であって且つ同修飾キーが ShiftLock と解釈されるのであれば、1番目の KEYSYM が使用される。さもなければ、2番目の KEYSYM が使用される。
次に、修飾キー Shift と Lock の両方が off の場合について。この場合、1番目の KEYSYM が使用される。
その次に、修飾キー Shift が off であり、且つ修飾キー Lock が on であってしかも同修飾キーが CapsLock と解釈される場合について。この場合、原則として1番目の KEYSYM が使用されるが、この KEYSYM がアルファベットの小文字である場合はそれに対応する大文字の KEYSYM が代わりに使用される。
さらにその次に、修飾キー Shift が on であり、且つ修飾キー Lock が on であってしかも同修飾キーが CapsLock と解釈される場合について。この場合、原則として2番目の KEYSYM が使用されるが、この KEYSYM がアルファベットの小文字である場合はそれに対応する大文字の KEYSYM が代わりに使用される。
最後に、修飾キー Shift が on であるか、または修飾キー Lock が on であり且つ同修飾キーが ShiftLock と解釈されるか、あるいはその両方である場合について。この場合、2番目の KEYSYM が使用される。
KEYCODE と KEYSYM との対応関係をサーバが直接利用することはない。クライアントが読み込んだり書き込んだりできるように記録しているだけである。
既定のアトム(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 |
今後作られる名前(プロトコルの次元で、あるいはより高次のユーザ・インタフェイス・モデルの次元で意味・役割を持つもの)と衝突しないように、特定の企業や組織のための私的なアトムには、アンダースコア(_)から始まる名前を使用するものとする。企業や組織の間で名前の衝突が起きないように、接頭辞を追加する必要がある。しかしながら、本プロトコルではそのような接頭辞の選定方法は定めていない。1つのアプリケーションや1人のエンド・ユーザのための私的な名前でありながら大域的に(全体からglobally)アクセスできる場所に保存されるものは、他の名前と衝突しないよう、先頭に2つのアンダースコアを使用するとよい。
遠隔のクライアント(remote client)と通信するにあたって、X プロトコルは、信頼できるバイト・ストリームであればどのようなものでもプロトコルの基盤として使用することができる。
クライアントは、使用するバイト順(byte order)を指定するデータ・バイトを最初に送らなければならない。同データ・バイトの値は、8進数の 102 もしくは 154 でなければならない。8進数値 102 (ASCII 大文字 B)は最上位バイトから順に値を転送することを表し、8進数値 154 (ASCII 小文字 l)は最下位バイトから順に値を転送することを表す。このプロトコルで明示的に規定されている場合を除き、クライアントが送信する16ビットと32ビットのデータは全てこのバイト順で転送されなければならず、また、サーバが返す16ビットと32ビットのデータも全てこのバイト順で転送されることになる。
接続設定において、クライアントは、バイト順を示すバイトに続けて下記の情報を送信する。
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 には、連続したビット(少なくとも18ビット)の集合1つが入る。クライアントが WINDOW、PIXMAP、CURSOR、FONT、GCONTEXT、及び COLORMAP の各型に対するリソース ID を確保する(allocate)にあたっては、先のビット集合の部分集合にすぎないビット群を設定した値を選び、それと resource-id-base との論理和を取る、という方法を用いる。この方法で構成された値でなければ、この接続において新たに作成されたリソースの ID として使用することはできない。リソース ID の上位3ビットが設定されることはない。クライアントは、線型に、あるいは連続でリソース ID を確保しなければいけないわけではない。一度解放された ID を再利用することができる。ID は、同じ型の他のリソースだけではなく、他の全てのリソースの ID と異なるものでなければならない。しかしながら、リソース識別子、アトム、ヴィジュアルの ID(visualid)、キーシンボル(keysym)の値空間(value space)は文脈によって区別されるので、それらの値空間は必ずしも共通部分を持ってはいけないわけではない。例えば、ある1つの数値が同時に有効なウィンドウ 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)は1枚のビットマップで表され、このプレーン群は最上位から最下位へというビット順で並べられ、プレーン間に詰め物は入らない。
pixmap-formats には、depth (深さ)の値それぞれに対して1つづつエントリが入っている。このエントリには、該当する深さ(depth)の画像の表現形式として使用する「Z フォーマット」(Z format)の情報が入っている。ある depth (深さ)に対するエントリが pixmap-formats の中に入れられるのは次の場合である。即ち、その depth に対応するスクリーンが存在し、且つその depth に対応する全てのスクリーンは同 depth に関する限り当該 Z フォーマットだけを使用しなければならない(must support)場合である。Z フォーマットにおいては、ピクセルは走査線順に並んでおり、1つの走査線の内部ではピクセルは左から右へ並んでいる。各ピクセルを保持するのに使うビットの数は bits-per-pixel で与えられる。bits-per-pixel は、depth で与えられた深さ(の画像を表すの)に最低限必要なビット数より大きくてもよい。その場合、最下位ビットを使ってピクスマップ・データを保持し、高位の未使用ビットの値は未定義である。bits-per-pixel の値が 4 である場合、各バイトの中の半バイト(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 は、サーバが受け入れられるリクエストの長さの最大値を表し、単位は4バイトである。この長さの値は、各リクエストの中の length フィールド(長さを表す)に指定できる値の最大値と同じものである。この最大値より大きいリクエストは Length エラーを引き起こす。この場合、サーバはリクエスト全体を読み、そして単に破棄する。maximum-request-length の値は常に 4096 以上である(つまり、16384バイト以下の長さのリクエストであれば、全てのサーバが受け入れる)。
min-keycode と max-keycode は、サーバが送り出すキーコードの最小値と最大値を表す。min-keycode は 8 未満の値となることはなく、max-keycode は 255 より大きな値となることはない。この範囲のキーコード全て対して漏れなく対応するキーが存在しなければならないわけではない。
各スクリーンに関する情報として、以下のものがある。
allowed-depths は、ピクスマップとウィンドウの深さ(depth)の中、いづれのものに対応しているのかを表す。ピクスマップは allowed-depths で挙げられている各深度(each depth)のものを使用することができる。allowed-depths で挙げられている深度を持つウィンドウは、その深さに対してヴィジュアル型(visual type)が(DEPTH の visuals で)1つ以上挙げられていれば、使用することができる。深さが 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 は、白黒のアプリケーションを実装するのに使用することができる。この2つのピクセル値は、デフォルト・カラーマップ(default-colormap)の中に恒久的に確保されているエントリを指している。一部のスクリーンでは RGB の実値を設定することができ、その場合、実際には白と黒ではない色になる可能性がある。この2つの名前は、色の相対的な強度(期待されるもの)を伝えるためのものである。
ルート・ウィンドウのボーダ(枠)は、初期状態では black-pixel で塗りつぶされたピクスマップ(1枚)である。ルート・ウィンドウの背景(background)は、初期状態では black-pixel と white-pixel を用いた2色のパターン(柄)で塗りつぶされたピクスマップ(1枚)であるが、この2色のパターンの模様は定められていない。
min-installed-maps は、InstallColormap によって同時に組み込むことができる(組み込むことを保証され得る)カラーマップの数を表す。各カラーマップの中に確保されているエントリの数とは関係ない。max-installed-maps は、同時に組み込むことができる可能性があるカラーマップの最大数を表す。実際に組み込める数は、カラーマップの割り当て(allocation領域確保)次第である。同一の内容を持つ複数の読み込み専用カラーマップ(static-visual colormaps)は、この最大数・最小数の観点からは、リソース ID が異なっていても1つのカラーマップと見做す。ハードウェア・カラーマップが1つしかない場合、通常、どちらの値も 1 になる。
backing-stores は、サーバがこのスクリーンのバッキング・ストアを使用するのはどのような場合なのかを表す。但し、バッキング・ストアは、サーバが一度に対応できる数のウィンドウ全てを賄うには足りないものである可能性がある。save-unders が True である場合、サーバはリクエスト CreateWindow 及び ChangeWindowAttributes において save-under モードに対応することができる。但し、この場合も容量が足りない可能性がある。
current-input-masks は、リクエスト GetWindowAttributes でルート・ウィンドウを指定した場合に all-event-masks に返るイベント・マスクである。
各 visual-type (ウィジュアル型)に関する情報として、以下のものがある。
1つのヴィジュアル型が複数の 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 と同じように扱われる。2つしかエントリがないカラーマップから成る StaticGray は、白黒(モノクローム)と考えることができる。
red-mask、green-mask、及び blue-mask は、DirectColor と TrueColor の場合に限って意味を持つ(その2つのために定義されている)。 各マスクは、1 に設定された連続ビットの集合1つから成り、互いに重なる部分(共通部分)は無い。大抵は、各マスクの 1 に設定されている部分のビット数は同じである。
bits-per-rgb-value は、赤・緑・青それぞれの色強度の離散値の個数を、2 を底とする対数で表現したものである。この数は、カラーマップのエントリの数と関係の無い数でもよい。実際の RGB 値は常に、プロトコルの中で、16ビットのスペクトル(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 を累乗した値である。
目次
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 イベントを発生させる。
背景(背景ピクスマップ)とボーダ・ピクスマップとカーソルは、今後それらを明示的に参照する予定がない場合、直ちに解放することができる。
解放後に背景(背景ピクスマップ)やボーダ・ピクスマップに描画を行った場合にウィンドウの状態に齎す影響は、定められていない。サーバは、これらのピクスマップの複製を作ることもあるし、作らないこともある。
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 を同時に選択できるのは1つのクライアントだけであり、ResizeRedirect を同時に選択できるのは1つのクライアントだけであり、ButtonPress を同時に選択できるのも1つのクライアントだけである。これらの制約に違反しようとすると、Access エラーとなる。
do-not-propagate-mask は1つのウィンドウにつき1つしか存在しない。クライアント毎に1つづつ存在するわけではない。
ウィンドウのカラーマップを変更する(既存のカラーマップの内容を変更するのではなく、新たなカラーマップを定義する)と、ColormapNotify イベントが発生する。可視状態(visible)のウィンドウのカラーマップを変更しても、その結果がすぐにはスクリーン上に反映されないことがある(InstallColormap リクエストの項を参照)。
ルート・ウィンドウの cursor を None に変更すると、デフォルトのカーソルが設定されている状態に戻る。
指定した属性の検証と変更の順序は、サーバ依存である。エラーが発生した場合でも、指定した属性群の一部は変更されてしまっている可能性がある。
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 は、このリクエストを発行したクライアントが選択しているイベント・マスクである。
window: WINDOW |
Errors: Window |
引数 window のウィンドウがマップされている場合、自動的にリクエスト UnmapWindow が実行される。その後、同ウィンドウとその子孫全てを破棄し、破棄されたウィンドウそれぞれに関して DestroyNotify イベントを発生させる。DestroyNotify イベントの発生順序について述べると、各ウィンドウにおいて、先ずそのウィンドウの全ての子孫に関するイベントが発生し、その後に同ウィンドウ自身に関するものが発生する。兄弟間や、下位階層を跨いだ(訳註:従兄弟・再従兄弟のような)ウィンドウの間には、イベントの発生順序に対してこれ以外の制約は無い。
それまで隠れていた(obscured)ウィンドウに対して、通常の露出処理(exposure processing)が行われる。
window で指定されたウィンドウがルート・ウィンドウである場合、このリクエストでは何も起こらない。
window: WINDOW |
Errors: Window |
このリクエストは、window で指定されたウィンドウの全ての子供に対して、ウィンドウの重ね順の下から上へという順番で、リクエスト DestroyWindow を実施するものである。
window: WINDOW |
mode: { Insert, Delete} |
Errors: Match, Value, Window |
このリクエストは、(このリクエストを発行した)クライアントのセーブ・セットに対して、window で指定したウィンドウを追加あるいは削除するものである。このウィンドウは、リクエストを発行したクライアントとは別のクライアントが作成したものでなければならない(さもなくば Match エラーを生ずる)。セーブ・セットの使い方については、第10章にも情報がある。
ウィンドウが破棄された場合、サーバは自動的に同ウィンドウをセーブ・セットから削除する。
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)を持たない場合である。
window: WINDOW |
Errors: Window |
window で指定されたウィンドウが既にマップされている場合、このリクエストは何も行わない。
指定されたウィンドウの override-redirect 属性が False であり且つこのリクエストを発行したクライアントとは別のクライアントが同ウィンドウの親に対して SubstructureRedirect を選択していた場合、MapRequest イベントが発生するものの、指定されたウィンドウは依然としてアンマップされたままである。そうでない場合は、同ウィンドウはマップされ、MapNotify イベントが発生する。
ウィンドウが表示可能になった時にその内容が捨てられてしまっている場合、同ウィンドウは自身の背景によってタイルされ(背景が定義されてない場合はスクリーンの既存の内容は変更されない)、0個以上の露出イベントが発生する。ウィンドウがアンマップされていた間 backing-store が保持されていた場合、露出イベントは発生しない。新たに backing-store を保持するようになったときは、常にウィンドウ全体の露出イベントが発生する。さもなければ、可視領域(のイベント)だけが報告される。新たに表示可能となった子孫にも、同様のタイル処理(tiling)と露出処理が行われる。
window: WINDOW |
Errors: Window |
このリクエストは、window で指定されたウィンドウのアンマップ状態にある子供全てに対して、重ね順の上から下へ向かう順番で、MapWindow リクエストを実施するものである。
window: WINDOW |
Errors: Window |
window で指定されたウィンドウが既にアンマップされている場合、このリクエストは何も行わない。そうでない場合、同ウィンドウはアンマップされ、UnmapNotify イベントが発生する。それまで隠れていたウィンドウ群に対しては、通常の露出処理が行われる。
window: WINDOW |
Errors: Window |
このリクエストは、window で指定されたウィンドウのマップ状態にある子供全てに対して、重ね順の下から上へ向かう順番で、UnmapWindow リクエストを実施するものである。
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 属性による要求がある場合でも、サイズ変更の後は常にウィンドウの内容を棄てることを表す。ウィンドウはその背景によってタイルされ(但し、背景が定義されてない場合、スクリーンの既存の内容は変更されない)、0個以上の露出イベントが発生する。
子孫の内容とボーダは、その親の 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 のウィンドウの最終的なジオメトリ(このリクエストの他の引数で変更されたもの)を用いて行われるのであって、同ウィンドウの初期ジオメトリを用いて行われるのではない。
ルート・ウィンドウの構成を変更しようとする試みは、無効である。
window: WINDOW |
direction: { RaiseLowest, LowerHighest} |
Errors: Value, Window |
このリクエストを呼び出すクライアントとは別のクライアント(訳註:通常はウィンドウ・マネージャ)が window のウィンドウに対して SubstructureRedirect を選択していた場合、CirculateRequest イベントが発生するだけで、それ以上の処理は何も行われない。それ以外の場合は、下記の処理が行われ、実際にウィンドウの重ね順が変更されると CirculateNotify イベントが発生する。
RaiseLowest が指定された場合、CirculateWindow は、マップされていて且つ一番下にある子であって、別の子によって覆われている者が存在すれば、その子を重ね順の一番上に持ってくる。LowerHighest が指定された場合、CirculateWindow は、マップされていて且つ一番上にある子であって、別の子を覆っている者が存在すれば、その子を重ね順の一番下に持っていく。それまで隠されていたウィンドウに対して、露出処理(exposure processing)が行われる。
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 に渡すのは合法である。
window: WINDOW |
▶ |
root: WINDOW |
parent: WINDOW or None |
children: LISTofWINDOW |
Errors: Window |
このリクエストは、window のウィンドウのルート、親、及び子供を返すものである。children のリスト中の子供は、重ね順に関して下から上の順番で並べられている。
name: STRING8 |
only-if-exists: BOOL |
▶ |
atom: ATOM or None |
Errors: Alloc, Value |
このリクエストは、name で指定された名前に対応するアトムを返すものである。only-if-exists に False を指定した場合、そのアトムが存在しなければ新たに作成される。name の文字列には ISO Latin-1 の符号化方式を用いる。大文字・小文字は区別される。
アトムの寿命は、これを定義した(intern)クライアントとは無関係である。サーバがリセットするまで、アトムは定義されたままである(第10章を見よ)。
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 を8ビットのデータのリスト(配列)として見るべきなのか、それとも16ビットあるいは32ビットのデータのリストとして見るべきなのかを指定する。この指定によって、サーバは必要に応じて正しくバイト順の交換(byte-swap)を行えるようになる。
mode の値が Replace である場合、以前のプロパティの値は破棄される。mode の値が Prepend あるいは Append である場合、type と format は既存のプロパティ値のものと一致していなければならない(さもなくば Match エラーを生ずる)。property のプロパティが定義されてない場合(プロパティがまだ存在しない場合)、データ長が 0 で適切な type と format を持つプロパティが定義されている(存在している)ものと考える。data のデータは、Prepend では既存のデータの頭の位置に添加され、Append では既存のデータの末尾に添加される。
このリクエストは、window のウィンドウに関する PropertyNotify イベントを発生させる。
プロパティの寿命は、それを設定した(格納した)クライアントとは無関係である。プロパティは、明示的に削除されるまで、あるいは(プロパティの設置されている)ウィンドウが破壊されるまで、あるいはサーバがリセットするまで(第10章を参照)、存在し続ける。
プロパティの最大サイズは、サーバ次第であり、動的に変更できる。
window: WINDOW |
property: ATOM |
Errors: Atom, Window |
このリクエストは、property で指定されたプロパティが存在する場合に、 同プロパティを window で指定されたウィンドウから削除するものである。同プロパティが存在しなかった場合を除き、window のウィンドウに関する PropertyNotify イベントを発生させる。
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 イベントが発生する。
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 のプロパティ群は変更されない。
window: WINDOW |
▶ |
atoms: LISTofATOM |
Errors: Window |
このリクエストは、window で指定されたウィンドウに現在設定されているプロパティ群のアトム(のリスト)を返すものである。
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)である。(訳註:同一サーバを用いているクライアント全てからアクセスできる。)
selection: ATOM |
▶ |
owner: WINDOW or None |
Errors: Atom |
このリクエストは、selection で指定したセレクションを現在所有しているウィンドウがあれば、そのウィンドウを返すものである。owner に None が返った場合、指定したセレクションには所有者が存在しないことを表す。
selection, target: ATOM |
property: ATOM or None |
requestor: WINDOW |
time: TIMESTAMP or CurrentTime |
Errors: Atom, Window |
selection で指定されたセレクションに所有者が存在する場合、サーバはその所有者に SelectionRequest イベントを送信する。指定されたセレクションに所有者が存在しない場合、サーバは、property フィールドが None である SelectionNotify イベントを生成して requestor のウィンドウに送る。どちらのイベントでも、引数は変更せずそのまま渡される(上記の property の場合は例外)。
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 にすること及びイベントの中の通し番号を正しく設定することを除いて、サーバはイベントの内容を変更したり検査したりしない。
このリクエストでは、能動的占有は無視される。
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 を指定した場合、この値は現在のサーバ時刻で置き換えられる。
time: TIMESTAMP or CurrentTime |
このリクエストを発行したクライアントが(GrabPointer もしくは GrabButton もしくは通常のボタン押下により)ポインタを能動的に占有している場合、このリクエストは同ポインタを解放し、キューに入っているイベントがあればそれを解放する。time で指定された時刻が最終ポインタ占有時刻より早い場合、あるいは現在のサーバ時刻より遅い場合、このリクエストは何も行わない。
このリクエストでは、EnterNotify イベントと LeaveNotify イベントが発生する。
能動的ポインタ占有のイベント発生ウィンドウや能動的ポインタ占有の confine-to のウィンドウ(GrabPointer参照)が表示可能でなくなった場合、あるいはウィンドウの再構成によって confine-to のウィンドウが完全にルート・ウィンドウの境界の外側に行ってしまった場合、UngrabPointer リクエストが自動的に実行される。
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 エラーが発生する。このリクエストは、能動的な占有には影響を与えない。
modifiers: SETofKEYMASK or AnyModifier |
button: BUTTON or AnyButton |
grab-window: WINDOW |
Errors: Value, Window |
このリクエストは、指定されたウィンドウにおける指定されたボタン/キーの受動的な組み合わせがこのリクエストを発行したクライアントによって占有されているものである場合に、その組み合わせを解放するものである。引数 modifiers に AnyModifier を指定すると、修飾キーのあらゆる組み合わせ(修飾キー無しの組み合わせも含む)に対してこのリクエストを発行するのと同じことになる。button に AnyButton を指定すると、あらゆるボタンに対してこのリクエストを発行するのと同じことになる。このリクエストは、能動的占有には影響を与えない。
event-mask: SETofPOINTEREVENT |
cursor: CURSOR or None |
time: TIMESTAMP or CurrentTime |
Errors: Cursor, Value |
このリクエストは、このリクエストを発行したクライアントがポインタを動的に占有しており、且つ time で指定された時刻が最終ポインタ占有時刻の前でなく現在のサーバ時刻の後でない場合に、指定された動的変数(event-mask と cursor)を変更するものである。event-mask と cursor の解釈は GrabPointer の場合と同じである。このリクエストは、GrabButton によって確立された受動的占有の変数群には影響を与えない。
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 を指定した場合、この値は現在のサーバ時刻で置き換えられる。
time: TIMESTAMP or CurrentTime |
このリクエストを発行したクライアントが(GrabKeyboard もしくは GrabKey により)キーボードを能動的に占有している場合、このリクエストは同キーボードを解放し、キューに入っているイベントがあればそれも解放する。time で指定された時刻が最終キーボード占有時刻より早い場合、あるいは現在のサーバ時刻より遅い場合、このリクエストは何も行わない。
このリクエストでは、FocusIn イベントと FocusOut イベントが発生する。
能動的キーボード占有のイベント発生ウィンドウが表示可能状態でなくなった場合、UngrabKeyboard リクエストが自動的に実行される。
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 エラーが発生する。
key: KEYCODE or AnyKey |
modifiers: SETofKEYMASK or AnyModifier |
grab-window: WINDOW |
Errors: Value, Window |
このリクエストは、指定されたウィンドウにおける指定されたキーの組み合わせがこのリクエストを発行したクライアントによって占有されているものである場合に、その組み合わせを解放するものである。引数 modifiers に AnyModifier を指定すると、修飾キーのあらゆる組み合わせ(修飾キー無しの組み合わせも含む)に対してこのリクエストを発行するのと同じことになる。key に AnyKey を指定すると、あらゆるキーコードに対してこのリクエストを発行するのと同じことになる。このリクエストは、能動的占有には影響を与えない。
mode: { AsyncPointer, SyncPointer, ReplayPointer, AsyncKeyboard, |
SyncKeyboard, ReplayKeyboard, AsyncBoth, SyncBoth} |
time: TIMESTAMP or CurrentTime |
Errors: Value |
このリクエストは、このリクエストを発行するクライアントがデバイスを凍結していた場合に、キューに入れられていたイベントを解放するものである。time で指定された時刻が同クライアントによる直近の能動的占有の最終占有時刻より早い場合、あるいは time の時刻が現在のサーバ時刻より遅い場合、このリクエストは何も行わない。
AsyncPointer を指定すると、ポインタがこのリクエストを発行するクライアントによって凍結されている場合、ポインタ・イベントの処理は再開され平常通りに続行される。同クライアントが2つの異なる占有を行ってポインタを2回凍結している場合、AsyncPointer はその両方を解凍する。ポインタの凍結がリクエスト発行クライアントによるものでない場合、AsyncPointer モードでは何も行われないが、ポインタの占有までリクエスト発行クライアントによるものでなければいけないわけではない。
SyncPointer を指定すると、ポインタがこのリクエストを発行したクライアントによって凍結され能動的に占有されている場合、次の ButtonPress イベントあるいは次の ButtonRelease イベントが同クライアントへ報告されるまでの間、ポインタ・イベントの処理は再開され平常通りに続行される。この場合、それらのイベントが届いた時にポインタは再び凍結されているように見える状態となる。但し、報告されたイベントがポインタの占有を解除するものである場合、ポインタは凍結されない。ポインタの凍結がリクエスト発行クライントによるものでない場合、あるいはポインタを占有しているのがリクエスト発行クライントでない場合、SyncPointer モードでは何も行われない。
ReplayPointer を指定した場合、ポインタがこのリクエストを発行したクライアントによって能動的に占有されていて且つポインタが同クライアントへ送られたイベントの結果として凍結されていれば(GrabButton による受動的占有が(条件成就により)能動化した結果、あるいは先に実行されていた SyncPointer モードの AllowEvents リクエストの結果による場合であって、GrabPointer によるものは含まない)、ポインタの占有は解除され、凍結を齎した先のイベントはそっくり再処理される。この時、解除された占有の grab-window のウィンドウの受動的な占有や、同ウィンドウの上位の(ルート方向の)ウィンドウの受動的占有は無視される。リクエスト発行クライアントがポインタを占有してない場合、あるいはポインタの凍結がイベントの結果として生じたものでない場合、このリクエストは何も行わない。
AsyncKeyboard を指定すると、キーボードがこのリクエストを発行したクライアントによって凍結されている場合、キーボード・イベントの処理は再開され平常通りに続行される。同クライアントが異なる2つの占有を行って同キーボードを2回凍結している場合、AsyncKeyboard はその両方を解凍する。キーボードの凍結がリクエスト発行クライアントによるものでない場合、AsyncKeyboard では何も行われないが、キーボードの占有まで同クライアントによるものでなければいけないわけではない。
SyncKeyboard を指定すると、キーボードがこのリクエストを発行したクライアントによって凍結され能動的に占有されている場合、次の KeyPress イベントあるいは次の KeyRelease イベントが同クライアントへ報告されるまでの間、キーボード・イベントの処理は再開され平常通りに続行される。この場合、それらのイベントが届いた時にキーボードは再び凍結されているように見える状態となる。但し、報告されたイベントがキーボードの占有を解除するものである場合、キーボードは凍結されない。キーボードの凍結がリクエスト発行クライアントによるものでない場合、あるいはキーボードを占有しているのが同クライアントでない場合、SyncKeyboard では何も行われない。
ReplayKeyboard を指定した場合、キーボードがこのリクエストを発行したクライアントによって能動的に占有されていて且つキーボードが同クライアントへ送られたイベントの結果として凍結されていれば(GrabKey による受動的占有が(条件成就により)能動化された結果、あるいは先に実行されていた SyncKeyboard モードの AllowEvents リクエストの結果による場合であって、GrabKeyboard によるものは含まない)、キーボードの占有は解除され、凍結を齎した先のイベントはそっくり再処理される。この時、解除された占有の grab-window のウィンドウの受動的な占有や、同ウィンドウの上位の(ルート方向の)ウィンドウの受動的占有は無視される。リクエスト発行クライアントがキーボードを占有していない場合、あるいはキーボードの凍結がイベントの結果として生じたものでない場合、このリクエストは何も行わない。
SyncBoth を指定すると、ポインタとキーボードの両方がこのリクエストを発行したクライアントによって凍結されている場合、占有しているデバイスに関する新たなイベント ButtonPress、 ButtonRelease、KeyPress、あるいは KeyRelease (ポインタに対してはボタン・イベント、キーボードに対してはキー・イベント)が同クライアントへ報告されるまでの間、(両方のデバイスの)イベントの処理が再開され平常通りに続行されるようになる。この場合、それらのイベントが届いた時にデバイスは再び凍結されているように見える状態となる。但し、報告されたイベントが占有を解除するものである場合、デバイスは凍結されない(けれども、もう一方のデバイスが依然として占有されている場合、こちらのデバイスに関する後続のイベントによって両方のデバイスが凍結される)。リクエスト発行クライアントがポインタとキーボードの両方を凍結しているのでない限り、SyncBoth では何も行われない。同クライアントが異なる2つの占有を行ってポインタもしくはキーボードを2回凍結している場合、SyncBoth は2回分の解凍を行う(一方、(上記のイベントの受信による) SyncBoth の後続の再凍結は各デバイスを1回凍結するだけである)。
AsyncBoth を指定すると、ポインタとキーボードがこのリクエストを発行したクライアントによって凍結されている場合、両方のデバイスのイベント処理が再開され平常通りに続行される。同クライアントが異なる2つの占有を行って1つのデバイスを2回凍結している場合、AsyncBoth は2回分の解凍を行う。リクエスト発行クライアントがポインタとキーボードの両方を凍結しているのでない限り、AsyncBoth では何も行われない。
AsyncPointer、SyncPointer、及び ReplayPointer は、キーボード・イベントの処理には作用しない。AsyncKeyboard、SyncKeyboard、及び ReplayKeyboard は、ポインタ・イベントの処理には作用しない。
ポインタの占有とキーボードの占有の両方が同時に能動的になることは可能である(同一のクライントによる場合もあるし、異なるクライアントによる場合もある)。この場合、どちらかの占有によって一方のデバイスが凍結されると、そのデバイスに関するイベントの処理は行われなくなる。両方の占有によって一方のデバイスだけが凍結されることがある。この場合、両方の占有に関して凍結を解除しなければ、イベントの処理は再開することができない。1つのデバイスが同一のクライアントによって2回凍結された場合、1回の AllowEvents でその両方を解凍する。
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 は同ウィンドウの子の中のポインタを含んでいるものである(そのような子が存在する場合のみ)。修飾キーとボタンの現在の論理的な状態も返る。(プロトコル経由で見た)デバイスの論理的な状態は、デバイスのイベントの処理が凍結されている場合、物理な状態より遅れている可能性がある。
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 を指定したのと同じことになる。
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 に返る。
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 ウィンドウの最も近い縁(移動させようとした場所に最も近い縁)までしか移動しない。
このリクエストは、まるでユーザが瞬時にポインタを移動させたかのようにイベントを発生させる。
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 イベントが発生するが、最終フォーカス変更時刻は変わらない。
▶ |
focus: WINDOW or PointerRoot or None |
revert-to: { Parent, PointerRoot, None} |
このリクエストは、現在のフォーカス(focus)の状態を返すものである。
▶ |
keys: LISTofCARD8 |
このリクエストは、キーボードの論理的な状態を表すビット・ベクトル(bit vector)を返すものである。1 に設定されているビットは、対応するキーが現在押されていることを示す。ベクトルの長さは32バイトである。N 番目(0 から数える)のバイトには 8N から 8N + 7 のキーに対応するビットが入り、このバイトの最下位ビットが 8N のキーに対応する。(プロトコル経由で見た)デバイスの論理的な状態は、デバイスのイベントの処理が凍結されている場合、物理的な状態よりも遅れている可能性がある。
fid: FONT |
name: STRING8 |
Errors: Alloc, IDChoice, Name |
このリクエストは、必要であれば指定されたフォントを読み込み、同フォントに識別子 fid を与えるものである。フォント名 name には ISO Latin-1 符号化方式を用い、大文字と小文字は区別しない。フォント名 name の中で「“?”」及び「“*” 」の文字を使用した場合、パターン・マッチ(パターン照合)が行われ、マッチしたフォントが使用される。このパターン(型)においては、「“?”」という文字(8進数値は 77)は何らかの文字1つとマッチし、「“*” 」という文字(8進数値は 52)は任意の数の文字とマッチする。フォント名を表すための書式(特別な構造を持つ)は、X.Org の規格 X Logical Font Description Conventions で規定してある。
フォントは、特定のスクリーンと結び付いたものではなく、どのグラフィクス・コンテクストの構成要素としても使用(格納)することができる。
font: FONT |
Errors: Font |
このリクエストは、リソース ID とフォントとの繋がりを削除するものである。フォント自体は、同フォントを参照する他のリソースが存在しなくなったときに解放される。
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 の場合)を示す。コア・プロトコル(本プロトコル)では、縦書きテキストの機能は定義していない。
(訳註:2バイトのフォントは、定義された文字の2次元の表(matrix)と見ることができる。byte1 (第1バイト)は行を定めるものであり、min_byte1 と max_byte1 で行の範囲を定める。byte2 (第2バイト)は列を定めるものであり、min_char_or_byte2 と max_char_or_byte2 で列の範囲を定める。1バイトの文字は1行のみから成り、byte2 (第2バイト)で文字を定める。そして、min_char_or_byte2 と max_char_or_byte2 が文字の範囲を定める。1バイトは1行なので、min_byte1 と max_byte1 の両方の値が 0 (1行目)となる。訳註ここまで。)
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 番から始まる)の要素に対応する2バイトの文字索引値は次のように計算される。
byte1 = N/D + min-byte1 /* 訳註:行のオフセット */ byte2 = N\\D + min-char-or-byte2 /* 訳註:列のオフセット */
ここで、
D = max-char-or-byte2 - min-char-or-byte2 + 1 /* 訳註: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 でないことに注意。2バイトの行列形式を用いるフォントにおいては、default-char の最上位バイトが第1バイト(byte1)、最下位バイトが第2バイト(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 フィールドの解釈は、サーバ依存である。
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 である。
2バイトの行列の索引ではなく線型索引(1行の索引)で定義されているフォントを指定した場合、サーバは、最上位バイトから先に送られてきた16ビットの数値として各 CHAR2B を解釈する(つまり、CHAR2B の第1バイト(byte1)を最上位バイトとして扱う)。
全ての寸法の値が 0 である文字は無視される。font で指定されたフォントにおいて default-char が定義されてない場合、文字列中の未定義の文字は無視される。
pattern: STRING8 |
max-names: CARD16 |
▶ |
names: LISTofSTRING8 |
このリクエストは、利用可能なフォント(フォントの検索経路に左右される;SetFontPath リクエストの項を参照)の中、フォント名が pattern で指定されたパターンにマッチするもののリスト(配列)を返す。最大で max-names 個の名前が返る。pattern のパターンには ISO Latin-1 符号化方式を使用し、大文字・小文字は区別されない。パターン中の文字「?」(8進数値 77)は任意の1文字とマッチし、パターン中の文字「*」(8進数値 52)は任意の数の文字とマッチする。names に返ってきたフォント名は小文字である。
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 を持つリプライは、一連のリプライの終わりを示すものである。
path: LISTofSTRING8 |
Errors: Value |
このリクエストは、フォントを検索するための検索経路を設定するものである。検索経路は、各サーバに1つしか存在せず、クライアント毎に1つづつ存在するわけではない。path で指定された(複数の)文字列の解釈は、オペレーティング・システムに依存している。けれども、この(複数の)文字列には、リスト内の順序によって、検索するディレクトリ(の順序)を指定する機能がある。
path に空のリストを指定すると、検索経路がサーバに設定されたデフォルトの経路に戻る。
このリクエストの副作用として、サーバは、現在明示的にリソース ID が割り当てられていないフォントに関する全てのキャッシュ情報を必ずフラッシュ(flush)する。
このリクエストで生ずるエラーの意味は、システム固有である。
pid: PIXMAP |
drawable: DRAWABLE |
depth: CARD8 |
width, height: CARD16 |
Errors: Alloc, Drawable, IDChoice, Value |
このリクエストは、ピクスマップを1つ作成し、それに対して識別子 pid を割り当てるものである。width 及び height は 0 であってはならない(さもなくば Value エラーを生ずる)。 depth は、drawable で指定されたドローアブルのルートが対応している深さ(のいづれか1つ)でなければならない(さもなくば Value エラーを生ずる)。作成されたピクスマップの初期内容は、定められていない。
InputOnly ウィンドウをこのリクエストの drawable に渡すのは合法である。
pixmap: PIXMAP |
Errors: Pixmap |
このリクエストは、リソース ID とピクスマップの繋がりを削除するものである。このピクスマップの記憶領域は、これを参照しているリソースが他に存在しなければ、解放される。
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 | 演算 |
---|---|
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 増加方向)にも存在しなければならない。以上の説明は、太線を描画するピクセルを数学的なモデルを使って解説したものであるが、このモデルを実装するために必ず三角法を使わなければいけないわけではない。幅が1ピクセルより大きい直線の端点の角を計算するには、実数(real)あるいは固定小数点の演算を用いることが推奨される。
細線(line-width 即ち直線の幅が 0)は、名目上は、規定が無く且つデバイス依存であるアルゴリズムを使って描画される、幅が 1 ピクセルの直線である。このアルゴリズムには、2つの制約しか課されない。1つ目の制約は、ある直線を [x1,y1] から [x2,y2] までクリップせずに描画し、別の直線を [x1+dx,y1+dy] から [x2+dx,y2+dy] までクリップせずに描画した場合、ある点 [x,y] は、点 [x+dx,y+dy] が第2の直線(の描画結果)に接しているときに限り、第1の直線(の描画結果)に接していることになる、というものである。2つ目の制約は、直線を構成する「有効な点の集合」は、クリップによる影響を受けてはならない、というものである。したがって、ある点がクリップされた直線に接することになるのは、その点がクリップ領域の内側に存在し、且つその点がクリップせずに描画された直線にも接している場合に限られる。
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 | 2本の直線の外側の辺を伸ばし、ぶつかったところに角を作る(そして、その角の内側まで塗りつぶす)。但し、ここで作られた角の角度が11度より小さい場合、代わりの join-style として Bevel を使用する。 |
Round | 直径が line-width と等しく、中心が2直線の接合点(joinpoint)にある円弧となる。 |
Bevel | 2直線の端点の形は Butt 様式のものとなり、この2つの端点が作る三角形の凹みは塗りつぶされる。 |
1つの直線の両方の端点が一致する場合(x1=x2, y1=y2)、cap-style を両方の端点に適用するときは、その意味は line-width と cap-style の組み合わせで決まる。
NotLast | 細線(line-width が 0) | 結果はデバイスに依存するが、何も描画されないのが望ましい。 |
Butt | 細線 | 結果はデバイスに依存するが、1個のピクセルを描画するのが望ましい。 |
Round | 細線 | Butt/細線の組み合わせに同じである。 |
Projecting | 細線 | Butt/細線の組み合わせに同じである。 |
Butt | 太線(line-width が 1 以上) | 何も描画されない。 |
Round | 太線 | 閉じた軌道(x1=x2, y1=y2)は円になる。この円の中心は端点であり、直径は line-width に等しい。 |
Projecting | 太線 | 閉じた軌道(x1=x2, y1=y2)は方形になる。この方形は、辺が座標軸に平行で、中心は端点にあり、辺の長さが line-width に等しい。 |
1つの直線の両方の端点が一致する場合(x1=x2, y1=y2)、join-style を片方もしくは両方の端点に適用するときは、軌道の全体から直線部分が削除されたかのような結果(描画結果)となる。但し、軌道全体が単一の点(自分自身と結び付いている)から成る場合、もしくは単一の点へと軌道全体が縮小されている場合、両方の端点に cap-style を適用したのと同じ結果(描画結果)になる。
tile と stipple は、無限に広がる2次元のプレーンを表す。この2次元のプレーンでは、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 のスティプル・パターンは、1枚のプレーンにタイルされ、clip-mask と AND 演算される(論理積をとる)もう1つのクリップ・マスクとして機能する。どんなサイズのピクスマップでもタイルやスティプルに使用することができるけれども、サイズによって処理速度が異なることがある。
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 において2つの要素から成るリスト [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)を横切っている場合に、その点が内側(塗りつぶすべき領域)に含まれるとするものである(訳註:奇数回だけ(1重、3重、5重〜に)囲われている領域は塗りつぶし、偶数回(0重、2重、4重〜に)囲われている領域は塗りつぶさない)。Winding は、ある点を原点とする無限に長い放射線が「時計回り方向の軌道線分」と交差した回数と、「反時計回り方向の軌道線分」と交差した回数とが等しくない場合に、その点が内側に含まれているとするものである(訳註:この方式では、何回囲われたかにかかわらず、囲われた領域は全て塗りつぶすことになる。両種の線分の交差回数が等しい領域は0重に囲われている(即ち、囲われていない)と見做される部分である。それゆえ、この方式でも多角形の中に空白が生じることはある。軌道の線分には進行方向がある。訳註ここまで)。時計回り方向の軌道線分とは、放射線の原点から見て、放射線を左から右へ横切る線分のことである。反時計回り方向の軌道線分とは、放射線の原点から見て、放射線を右から左へ横切る線分のことである。方向を持つ線分と放射線が一致して重なってしまう場合は考えなくて良い。なぜかというと、線分に重なっていない別の放射線を選択すれば済むからである。
どちらの塗りつぶし規則(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] という内容のリスト) |
グラフィクス・コンテクストにピクスマップを格納したとき、複製が作られる場合と作られない場合がある。格納したピクスマップが後ほどグラフィクス・リクエストのデスティネーションとして使用される場合、変更内容がグラフィクス・コンテクストに反映される場合もあるし、反映されない場合もある。格納したピクスマップが1つのグラフィクス・リクエストにおいてデスティネーションとして使用され、且つ同時にタイルまたはスティプルとしても使用される場合、結果は未定義である。
グラフィクス・コンテクストの情報の一部がディスプレイ・ハードウェアにキャシュされるにもかかわらず、そのハードウェアでは少数のグラフィクス・コンテクストしかキャッシュできない、ということがありがちである。グラフィクス・コンテクストの構成要素の数と複雑さを考えると、クライアントは、ほとんど同じ内容のグラフィクス・コンテクスト複数を切り替えて使用することは1つのグラフィクス・コンテクストに小さな変更を加えて使用することよりも高くつく、と想定するべきである。
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 リクエストの効果を置き換えることになる。
構成要素が検証され変更される順序は、サーバ依存である。エラーが発生した場合、指定した構成要素の一部だけが変更されてしまっている可能性がある。
src-gc, dst-gc: GCONTEXT |
value-mask: BITMASK |
Errors: Alloc, GContext, Match, Value |
このリクエストは、src-gc から dst-gc へ構成要素をコピーするものである。value-mask は、CreateGC と同じように、どの構成要素をコピーするのかを指定する。2つのグラフィクス・コンテクストのルートと深さは同じでなければならない(さもなくば Match エラーを生ずる)。
gc: GCONTEXT |
dash-offset: CARD16 |
dashes: LISTofCARD8 |
Errors: Alloc, GContext, Value |
このリクエストは、グラフィクス・コンテクスト内の dash-offset と dashes を設定するものである。dash-offset と dashes は破線の様式を定める。dashes は空であってはならない(空の場合、Value エラーを生ずる)。奇数の長さのリストを指定することは、このリストに自身と同じリストを繋げて偶数の長さのリストを作り、出来上がったこのリストを指定するのと同じことになる。dashes の先頭の要素と、その後に1つ置きに登場する要素とが偶数番目のダッシュである。そして、その他の要素が奇数番目のダッシュである。各要素は、ダッシュの長さをピクセル単位で指定するものである。要素は全て 0 であってはならない(さもなくば Value エラーを生ずる)。dash-offset は、破線のパターンの位相を定めるものであり、1つのグラフィクス・リクエストにおいて、dashes 内の何番目のピクセルからパターンが(実際に)始まるのかを指定するものである。破線の模様(dashing)は、join-style で結合された軌道要素群(path elements)を通して連続しているが、結合された直線の各「sequence」(訳註:要確認)において毎回 dash-offset にリセットされる。
dashes を測る単位は、通常の座標系のものと同じである。直線の勾配に沿ってダッシュの長さを測るのが理想であるが、実装においては、この理想を叶える必要があるのは水平な直線と垂直な直線だけである。この理想を満たせない場合、ダッシュの長さは直線の「主軸」(major axis)に沿って測るべきである。主軸とは、x 軸に対して -45 度から 45 度の間の角を成すように描画される直線の場合、及び x 軸に対して 135 度から 225 度の間の角を成すように描画される直線の場合、x 軸のことである。他の全ての直線においては、主軸とは y 軸のことである。
どのグラフィクス・プリミティブ(訳註:関数のこと。用語集参照)においても、1つ1つのダッシュの端点の計算はプリミティブのジオメトリのみによって行われる(訳註:つまりグラフィクス・コンテクストは使われない)。即ち、ダッシュの開始位置、ダッシュの方向、及びダッシュの長さのみによって行われる。
どのグラフィクス・プリミティブにおいても、line-style が DoubleDash のプリミティブ(ダッシュの要素数が偶数でも奇数でも)の表示に使用するピクセル総ての集合は、line-style が Solid のプリミティブの表示に使用するピクセルの集合と同じである。
どのグラフィクス・プリミティブにおいても次のことが言える。即ち、line-style が OnOffDash もしくは DoubleDash であり、且つまず座標 [x,y] において、そして再び座標 [x+dx,y+dy] においてクリップせずに描画を行うプリミティブの場合、点 [x1,y1] は、点 [x1+dx,y1+dy] が第2のインスタンスの一部としてダッシュに含まれるときに限り、第1のインスタンスの一部としてダッシュの中に含まれる。加えて言うと、ダッシュを構成する「有効な点の集合」は、クリップによる影響を受け得ない。ある点がクリップされたダッシュの中に含まれるのは、その点がクリップ領域の内側にあり、且つクリップせずにダッシュを描画したならばそのダッシュの中にその点が含まれたであろう場合に限られる。
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 方向の幅(高さ)を持たなければならない」という制約を追加したものである。
gc: GCONTEXT |
Errors: GContext |
このリクエストは、リソース ID とグラフィクス・コンテクストの間の結び付きを削除し、同グラフィクス・コンテクストを破棄するものである。
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 であれば、可視状態であるかあるいはバッキング・ストアに保持されている矩形の領域に対して、1つ以上の露出イベントが発生する。
このリクエストで InputOnly のウィンドウを使用すると、Match となる。
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。
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つのビットだけを 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。
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。
drawable: DRAWABLE |
gc: GCONTEXT |
coordinate-mode: { Origin, Previous} |
points: LISTofPOINT |
Errors: Drawable, GContext, Match, Value |
このリクエストは、points のそれぞれの対(point[i], point[i+1])の間に直線を描画するものである。各直線は、points のリスト内の順序で描画される。各直線は全ての中継点で規則通りに接合され(join correctly)、最初と最後の点が一致する場合には、最初と最後の直線も規則通りに接合される。
いづれの直線においても、2回以上描画されるピクセルは存在しない。細線(line-width が 0)が交差する場合、交差する(箇所の)ピクセルは複数回描画される。太線が交差する場合、PolyLine (で作られた線)全体がまるで1個の「塗りつぶされた形状」(filled shape)であるかのように扱われ、交差する(箇所の)ピクセルは1回しか描画されない。
最初の点(の座標)は、常に drawable のドローアブルの原点を基準としたものである。残りの点(の座標)は、coordinate-mode に従い、drawable の原点を基準とする場合と直前の点を基準とする場合とがある。
Bevel 方式で接合される2つの直線の中のどちらかが垂直でも水平でもない場合、bevel 型接合(の接合箇所)の縁となる線分の勾配と位置は、実装依存である。但し、勾配と距離(接合点を基準としたもの)の計算は、直線の太さ(line width)と、2つの直線の勾配のみによって行われる。
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。
drawable: DRAWABLE |
gc: GCONTEXT |
segments: LISTofSEGMENT |
ただし: |
SEGMENT: [x1, y1, x2, y2: INT16] |
Errors: Drawable, GContext, Match |
このリクエストは、segments で指定された区間ごとに、[x1, y1] と [x2, y2] の間に直線を1本描画する。直線は、segments のリスト内の順序で描画される。端点が一致しても接合処理は行わない。いづれの直線においても、2回以上描画されるピクセルは存在しない。直線が交差する場合、交差する(箇所の)ピクセルは複数回描画される。
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。
drawable: DRAWABLE |
gc: GCONTEXT |
rectangles: LISTofRECTANGLE |
Errors: Drawable, GContext, Match |
このリクエストは、rectangles で指定された矩形群の輪郭(外形線)を描画するものである。これは、各矩形に対して次の5点を指定して PolyLine を実行したのと同様の結果になる。
[x,y] [x+width,y] [x+width,y+height] [x,y+height] [x,y]
各矩形の x、y の座標は、drawable で指定されたドローアブルの原点を基準としたものであり、その矩形の左上隅を表す。
rectangles の矩形群は、リスト内の順序で描画される。いづれの矩形においても、2回以上描画されるピクセルは存在しない。矩形と矩形が交差する場合、交差する(箇所の)ピクセルは複数回描画される。
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。
drawable: DRAWABLE |
gc: GCONTEXT |
arcs: LISTofARC |
Errors: Drawable, GContext, Match |
このリクエストは、円形の弧または楕円形の弧(複数可)を描画するものである。各弧は、1つの矩形と2つの角度を用いて指定する。角度は、通常の度数に64を掛けて得た符号付き整数(64分の1度を単位とする符号付き整数)であり、正の値は反時計回り方向、負の値は時計回り方向を表す。弧の始点は、(引数 arcs の各 ARC の) angle1 で指定される。この angle1 の角度は (引数 arcs の各 ARC で指定された) 矩形の中心から見て3時の位置を基準としたものである。そして、弧の軌道(path)と範囲(extent)は (引数 arcs の各 ARC の) angle2 で指定される。この angle2 の角度は弧の始点を基準としたものである。angle2 の角度(通常の意味での角度)が360度より大きい場合、この角度は360度に切り詰められる。(引数 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 (分数値でもよい)に等しい点の全てから成る、無限に細い2つの軌道と定義される。弧の (ARC の) width と height が等しくなく、且つ両者が 0 でない場合、実際の境界輪郭は、実装依存である。但し、境界輪郭の形状と位置(弧の中心を基準とする)の計算は、弧の幅と高さ、及び line-width のみに基いて行われる。
cap-style は、円・楕円の端点の接線と一致する直線に対してこれを適用するのと同じ形で適用される。弧の切り口の角度が90度の整数倍でなく、且つ弧の幅と高さがともに 0 でない場合、切り口のキャップの形状と位置は実装依存である。但し、cap-style が Butt である場合、切り口(の形状)は直線であり、同直線の位置(弧の中心を基準としたもの)と勾配の計算は、弧の幅と高さ、及び弧の切り口の角度のみに基いて行われる。他の cap-style の場合、キャップの位置(弧の中心を基準としたもの)と形状の計算は、弧の幅と高さ、line-width、弧の切り口の角度、及び端点から見た弧の方向(時計回りか反時計回りか)のみに基いて行われる。
join-style は、2つの円・楕円の接合点における接線と一致する2本の直線に対してこれを適用するのと同じ形で適用される。弧の幅と高さがともに 0 でなく、且つどちらの弧の切り口の角度も90度の整数倍でない場合、接合の形状は実装依存である。但し、形状の計算は、各弧の幅と高さ、line-width、2つの弧の切り口の角度、接合点から見た弧の方向(時計回りか反時計回りか)、及び2つの弧の中心点の相対的な位置関係のみに基いて行われる。
ARC [x,y,w,h,a1,a2] で指定される弧の場合、角度は斜めになった楕円座標系で指定しなければならない((w と h が等しい) 円の場合、角度の座標系は通常の座標系と同一)。 この角度と、スクリーンの通常の座標系で表される角度(分度器で測ったもの)との関係は、次の通りである。
skewed-angle = atan(tan(normal-angle) * w/h) + adjust
skewed-angle と normal-angle の単位はラジアンであり(64分の1度ではない)、範囲は [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 のリスト内の順序で描画される。ある弧の終点が次の弧の始点と一致する場合、2つの弧は規則通りに接合される(join correctly)。最初の弧の始点が最後の弧の終点と一致する場合も、2つの弧は規則通りに接合される。いづれの弧においても、2回以上描画されるピクセルは存在しない。2つの弧が規則通りに接合され、且つ line-width が 0 より大きく、且つこの2つの弧が交差する場合、2回以上描画されるピクセルは存在しない。それ以外の場合は、交差する弧の交差する(箇所の)ピクセルは複数回描画される。ある端点から時計回りに伸びる弧を指定すると、その弧の終点から反時計回りに(その弧と)同じように伸びる弧を指定したときと同じピクセルが描画される。但し、接合には違いが出る。
一方の軸を 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。
drawable: DRAWABLE |
gc: GCONTEXT |
shape: { Complex, Nonconvex, Convex} |
coordinate-mode: { Origin, Previous} |
points: LISTofPOINT |
Errors: Drawable, GContext, Match, Value |
このリクエストは、指定された軌道(path)によって囲まれる領域を塗りつぶすものである。points の最後の点と最初の点が一致する場合、この軌道は自動的に閉じられる。この領域には、2回以上描画されるピクセルは存在しない。
points の最初の点(の座標)は常に、drawable で指定されたドローアブルの原点を基準としたものである。残りの点(の座標)は、drawable の原点を基準とする場合と直前の点(の座標)を基準とする場合とがあり、どちらの基準をとるかは coordinate-mode によって決まる。
サーバは、shape という変数を使って実行効率を上げることができる。Complex は、軌道が自己交差する可能性があることを意味する。軌道内の点が連続で同じ座標を指していても、自己交差とは見做さない。
Nonconvex は、軌道は自己交差しないけれども形状が完全には凸状でないことを意味する。クライアントがこれを知っている場合、Complex の代わりに Nonconvex を指定すると実行効率を上げることができる。自己交差する軌道に対して Nonconvex を指定した場合のグラフィクス操作の結果は未定義である。
Convex は、多角形内の点のいづれの2点をとっても、それらを結ぶ線分が軌道と交差しないことを意味する。クライアントがこれを知っている場合、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。
drawable: DRAWABLE |
gc: GCONTEXT |
rectangles: LISTofRECTANGLE |
Errors: Drawable, GContext, Match |
このリクエストは、rectangles で指定された矩形群を塗りつぶすものである。rectangles の各矩形に対して、それぞれ次の4点を指定して FillPoly を実行したのと同じ結果になる。
[x,y] [x+width,y] [x+width,y+height] [x,y+height]
各矩形の x、y 座標は、drawable で指定されたドローアブルの原点を基準としたものであり、矩形の左上隅を表す。
rectangles の矩形群は、同リスト内の順序で描画される。いづれの矩形においても、2回以上描画されるピクセルは存在しない。矩形同士が交差する場合、交差する(箇所の)ピクセルは複数回描画される。
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。
drawable: DRAWABLE |
gc: GCONTEXT |
arcs: LISTofARC |
Errors: Drawable, GContext, Match |
このリクエストは、arcs 内の各弧に対して、指定された弧と1本もしくは2本の線分とによって定まる無限に細い軌道(path)によって囲われる領域を、arc-mode に従って塗りつぶすものである。arc-mode が Chord である場合、弧の両端の点を結ぶ線分1本を使用する。arc-mode が PieSlice である場合、弧の両端の点と円の中心点とを結ぶ線分2本を使用する。
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 リクエストの項で述べたのと同様の仕方で解釈される。弧の切り口の角度が90度の整数倍でない場合、弧の端点の正確な位置と形状は、実装依存である。但し、arc-mode が Chord である場合、両端の点の(弧の中心を基準とした位置と形状の)計算は、弧の幅と高さ、及び弧の2つの端点の切り口の角度のみに基いて行われる。arc-mode が PieSlice である場合、ある端点の(位置と形状の)計算は、その端点における弧の切り口の角度と、弧の幅と高さの比のみに基いて行われる。
arcs の各弧は、リスト内の順序で塗りつぶされる。いづれの弧においても、2回以上描画されるピクセルは存在しない。領域が交差する場合、交差する(箇所の)ピクセルは複数回描画される。
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。
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。
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 エラーを生ずる)。ウィンドウのボーダは、このリクエスト(で取得するイメージ)の範囲に含めて読み込むことができる。指定されたウィンドウにバッキング・ストアがある場合、同ウィンドウの領域の中、同ウィンドウの子孫でないウィンドウによって隠されている部分の内容として、このバッキング・ストアの内容が返る。指定されたウィンドウにバッキング・ストアがない場合、このような形で隠された領域の内容として返される内容は未定義である。また、指定されたウィンドウとは異なる深さを持つ(同ウィンドウの)子孫の可視領域の内容として返される内容も未定義である。ポインタのカーソルのイメージは、返ってくる内容には含まれない。
このリクエストには、他のグラフィックス関連リクエストのような汎用性は無い。主に基礎的なハードコピーを行うためのものである。
drawable: DRAWABLE | ||
gc: GCONTEXT | ||
x, y: INT16 | ||
items: LISTofTEXTITEM8 | ||
where: | ||
TEXTITEM8: | TEXTELT8 or FONT | |
TEXTELT8: | [delta: INT8 | |
string: STRING8] | ||
Errors: Drawable, Font, GContext, Match |
(訳註:このリクエストは1つ以上の文字列を描画するもの。)
x、y の座標は、drawable で指定されたドローアブルの原点を基準としたものであり、ベースラインの開始位置(最初の文字の原点)を表す。各テキスト項目(text item:TEXTITEM8)は順番に処理される。フォント項目(font item:FONT)があると、同フォントは gc のグラフィクス・コンテクストに格納され、以降のテキスト(文字列)で使用される。フォントの切り替えは、次の文字の原点の位置には影響しない。テキスト要素(text element:TEXTELT8)の delta には、string の文字列を描画する前に行われる、x 軸方向の位置の調整の値を指定する。この際には、delta の値は常に文字の原点に対して加える。各文字のイメージは、gc の font のものであり、drawable のドローアブルに対する塗りつぶし操作の際の追加のマスクとして機能する。
このリクエストに含まれる FONT は全て、常に最上位バイトから順に送られる。
ある項目(item:TEXTITEM8)に対して Font エラーが発生した場合、それより前の項目群は描画されてしまっている可能性がある。
2バイト行列の索引で定義されるフォントの場合、STRING8 のバイトはいづれも CHAR2B の第2バイト(byte2)の値として解釈され、この時、第1バイト(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。
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 とよく似ているが、こちらは2バイト(16ビット)の文字を使用する。2バイト行列の索引ではなく線型索引(linear indexing)で定義されるフォントの場合、サーバは CHAR2B のそれぞれを、最上位バイトから先に送られてきた16ビットの数値として解釈する(即ち、CHAR2B の第1バイト(byte1)が最上位バイトとして扱われる)。
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 となる。
2バイト行列の索引で定義されるフォントの場合、STRING8 のバイトはいづれも CHAR2B の第2バイト(byte2)の値として解釈され、この時、第1バイトの値は 0 と見做される。
GC の構成要素:plane-mask、foreground、background、font、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask。
drawable: DRAWABLE |
gc: GCONTEXT |
x, y: INT16 |
string: STRING16 |
Errors: Drawable, GContext, Match |
このリクエストは ImageText8 とよく似ているが、こちらは2バイト(16ビット)の文字を用いる。2バイト行列の索引ではなく線型索引で定義されるフォントの場合、サーバは CHAR2B のそれぞれを、最上位バイトから先に送られてきた16ビットの数値として解釈する(即ち、CHAR2B の第1バイト(byte1)が最上位バイトとして扱われる)。
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 で解放することができない。
cmap: COLORMAP |
Errors: Colormap |
このリクエストは、リソース ID とカラーマップとの結び付きを削除し、同カラーマップの記憶領域を解放するものである。カラーマップがスクリーンに組み込まれている場合、同カラーマップは取り外される(uninstalled)(UninstallColormap リクエストを参照)。cmap のカラーマップがいづれかのウィンドウのカラーマップとして定義されている(設定されている)(CreateWindow もしくは ChangeWindowAttributes によって)場合、そのウィンドウのカラーマップは None に変更され、ColormapNotify イベントが発生する。カラーマップが None であるウィンドウに表示される色については、本プロトコルでは定めていない。
このリクエストは、スクリーンのデフォルト・カラーマップに対しては何ら影響を与えない。
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 のいづれかを用いてクライアントが割り当てたピクセルとプレーンの中、割り当てられた後に未だ解放されていないピクセルとプレーン全てである。
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)ことができない。
初期状態では、スクリーンのデフォルトのカラーマップが組み込まれている(けれども、必要リストには含まれていない)。
cmap: COLORMAP |
Errors: Colormap |
cmap で指定されたカラーマップが同カラーマップのスクリーンの必要リスト(required list)の中にある場合(InstallColormap リクエストの項を参照)、同カラーマップはリストから除かれる。副作用として、cmap のカラーマップは取り外される(uninstalled)ことがあり、また、これとは別のカラーマップが暗黙のうちに組み込まれたり取り外されたりすることもある。この時、どのカラーマップを組み込んだり取り外したりするのかはサーバ次第であるが、必要リストにあるカラーマップは組み込まれたままでなければならない。
cmap のカラーマップが取り外された場合、同カラーマップを属性として持つ全てのウィンドウに関して ColormapNotify イベントが発生する。加えて、このリクエストの結果として組み込まれたり取り外されたりした他のカラーマップ全てについても同様で、それらのカラーマップを属性として持つ全てのウィンドウに関して ColormapNotify イベントが発生する。
window: WINDOW |
▶ |
cmaps: LISTofCOLORMAP |
Errors: Window |
このリクエストは、window で指定されたウィンドウのスクリーンに現在組み込まれているカラーマップのリスト(配列)を返すものである。リスト内のカラーマップの順序に意味はなく、必要リスト(InstallColormap の項を参照)に関する情報は何ら含まれていない。
cmap: COLORMAP |
red, green, blue: CARD16 |
▶ |
pixel: CARD32 |
red, green, blue: CARD16 |
Errors: Alloc, Colormap |
このリクエストは、読み込み専用のカラーマップ・エントリを取得する(allocate)ものである。このエントリには、ハードウェアが対応している RGB 値の中、引数で指定された値に最も近い値が入っている。リクエストの戻り値として、実際に使用されるピクセル値と RGB 値が返る。複数のクライアントが同一の RGB 値(実際に使用される値が同一)を要求した場合、同一の読み込み専用エントリが割り当てられ(be assigned)、そのエントリは共有される。
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 のカラーマップで実際に使用される値を表す。
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つのビットだけが 1 に設定される。DirectColor に対しては、各マスクの中の3つのビットだけが 1 に設定される。contiguous が True であり且つ全てのマスクの論理和をとる場合、GrayScale と PseudoColor に対しては、連続するビット集合が1つ形成され、DirectColor に対しては、連続するビット集合が3つ形成される(ピクセルのサブフィールド1つにつき1つ)。割り当てられたエントリの RGB 値は、定められていない。
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 個の要素が返り、各マスク(3つ)にはそれぞれ R 桁のビット集合(R 桁が 1 に設定されたビット集合)、G 桁のビット集合、B 桁のビット集合が返る。contiguous が True である場合、各マスクは連続するビット集合1つを持つ。各マスクのビットは、他のマスクや 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 を用いて、あるピクセル値に対応するカラーマップのエントリ(の内容)を変更した場合、そのピクセルは3つのマスクに従って分解され、それに対応する独立エントリ(最大3つ)が更新される。
cmap: COLORMAP |
pixels: LISTofCARD32 |
plane-mask: CARD32 |
Errors: Access, Colormap, Value |
plane-mask のビットは、pixels のいづれのビットとも被らない(共通部分を持たない)ようにする。全てのピクセルの集合は、plane-mask の部分集合(それぞれ)と pixels との論理和をとることによって得られる。このリクエストは、クライアントが(AllocColor、AllocNamedColor、AllocColorCells、及び AllocColorPlanes を使用して)割り当てたそれらのピクセル全てを解放するものである。AllocColorPlanes によって取得したピクセルの中の1個を解放したとしても、同ピクセルに関連したピクセル全てを解放するまでは、実際には同ピクセルを再利用できない可能性があることに注意。同様に、読み込み専用のエントリは、(それを使用している)全てのクライアントによって解放されるまでは、実際には解放されない。また、同一の読み込み専用エントリを複数回割り当てられているクライアントが存在する場合には、クライアントがその回数の分だけ同エントリを解放して初めて実際に同エントリが解放される。
1つ以上のピクセルでエラーが発生した場合でも、クライアントが cmap のカラーマップに割り当てた pixels のピクセルは全て解放される。指定されたピクセルが cmap のカラーマップにおける有効な索引でなかった場合、Value エラーが発生する。指定されたピクセルがクライアントに割り当てられたものでなかった場合(即ち、そもそも割り当てられていないか、他のクライアントが割り当てたにすぎない場合)、あるいは指定されたカラーマップの全エントリが書き込み可能であった場合(CreateColormap で引数 alloc に All を指定して同カラーマップを作成していた場合)には、Access エラーが発生する。2つ以上のピクセルでエラーが発生した場合、どのピクセルについてエラーを報告するのかは任意である。
cmap: COLORMAP | ||||||
items: LISTofCOLORITEM | ||||||
where: | ||||||
| ||||||
Errors: Access, Colormap, Value |
このリクエストは、指定されたピクセルのカラーマップ・エントリを変更するものである(訳註:cmap で指定されたカラーマップの、items 内の pixel で指定されたピクセルのエントリを変更する)。引数 do-red、do-green、及び do-blue は、どの構成要素を実際に変更するのかを表す。指定されたカラーマップが所属するスクリーンに同カラーマップが組み込まれている場合(is an installed map)、変更結果は即座に反映される。
変更作業中に1つ以上のピクセルに関してエラーが発生した場合であっても、items の各 pixel で指定されたピクセルの中、(任意のクライアントによって) 書き込み可能なものとして取得された cmap 内のピクセルは全て、変更される。pixel で指定されたピクセルが cmap のカラーマップにおける有効な索引でない場合、Value エラーが発生する。pixel で指定されたピクセルが割り当てられていない(取得されてない)場合、あるいは読み込み専用のものとして取得されている場合、Access エラーが発生する。2つ以上のピクセルでエラーが発生した場合、どのピクセルについてエラーを報告するのかは任意である。
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 と同じである。
cmap: COLORMAP |
pixels: LISTofCARD32 |
▶ |
colors: LISTofRGB |
where: |
RGB: [red, green, blue: CARD16] |
Errors: Colormap, Value |
このリクエストは、cmap のカラーマップに入っているハードウェア固有の色の値の中、pixels で指定されたピクセルに対応する値を返すものである。割り当てられていない(unallocated)エントリを指定した場合に返る値は、定められていない。指定されたピクセルが cmap のカラーマップにおける有効な索引ではなかった場合、Value エラーが発生する。2つ以上のピクセルでエラーが発生した場合、どのピクセルについてエラーを報告するのかは任意である。
cmap: COLORMAP |
name: STRING8 |
▶ |
exact-red, exact-green, exact-blue: CARD16 |
visual-red, visual-green, visual-blue: CARD16 |
Errors: Colormap, Name |
このリクエストは、cmap で指定されたカラーマップに対応するスクリーンにおいて name で指定された名前の色を探し出し、次の2つの値を返すものである。1つはその色の正確な値(RGB 値)であり、もう1つは、ハードウェアが対応している RGB 値の中、cmap のカラーマップのヴィジュアル型を考慮した上で、正確な値に最も近い値である。name には ISO Latin-1 の符号化方式を使用するものとし、大文字と小文字は区別しない。
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 のピクスマップへの以降の描画がカーソルに与える影響は未定義である。サーバは、このピクスマップの複製を作成することもあるし、作成しないこともある。
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 (マスクの指定があれば)のグリフの原点とが一致するように2つのグリフを配置する。この原点の座標がホットスポット(hotspot)になる。source と mask の境界枠(bounding box)の寸法が同じである必要はなく、この境界枠を基準とした場合のホットスポットの位置取り(相対的な位置)には何ら制約はない。mask-font と mask-char の指定がない場合、source の全てのピクセルが表示される。source-char と mask-char は CARD16 であり、CHAR2B ではないことに注意。2バイトの表(matrix)から成るフォントの場合、16ビットの値は、第1バイトを最上位バイト、第2バイトを最下位バイトとして形成される。
カーソルの構成要素は、ディスプレイの制約に合うように勝手に変換(transform)される可能性がある。
引数のフォントは、この後に明示的に参照する予定がない場合、即座に解放しても構わない。
cursor: CURSOR |
Errors: Cursor |
このリクエストは、リソース ID とカーソルとの結び付きを削除するものである。カーソルの記憶領域を他のリソースが参照していない場合、同記憶領域は解放される。
cursor: CURSOR |
fore-red, fore-green, fore-blue: CARD16 |
back-red, back-green, back-blue: CARD16 |
Errors: Cursor |
このリクエストは、カーソルの色を変更するものである。指定されたカーソルが現在スクリーン上に表示されている場合、変更結果は直ちに反映される。
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 エラーを生ずる)。
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 符号化方式を使用し、大文字と小文字を区別する。
keycodes-per-modifier: CARD8 |
keycodes: LISTofKEYCODE |
▶ |
status: { Success, Busy, Failed} |
Errors: Alloc, Value |
このリクエストは、修飾キーとして使用されるキーのキーコード(キーコードが存在すれば)を指定するものである。keycodes のリストに入っているキーコードの数は、8 ✕ keycodes-per-modifier 個でなければならない(さもなくば Length エラーを生ずる)。keycodes のキーコードは8つの集合に分割され、各集合には keycodes-per-modifier 個の要素が入る。これらの集合は、順に修飾キー Shift、Lock、Control、Mod1、Mod2、Mod3、Mod4、及び Mod5 に割り当てられる。各集合においては、0 でないキーコード値しか使用できず、0 の値は無視される。0 でないキーコードは全て、接続設定時に受け取った min-keycode と max-keycode で定まる範囲の中になければならない(さもなくば Value エラーを生ずる)。1つの集合の内部におけるキーコードの順序に意味は無い。ある集合において 0 でない値が1つも指定されていなかった場合、対応する修飾キーの使用は禁止され、同修飾キーのビットは常に 0 となる。そうでない場合、ある修飾キーに対応する集合に属するキーが1個以上押された状態になると、常にその修飾キーのビットが 1 になる。
サーバは、どのように修飾キーを変更することができるのかについて制約を設けることができる(例えば、特定のキーが放されたことをハードウェアにおいて検知できない場合、オート・リピート機能を無効にできないキーが存在する場合、あるいは同じ修飾キーとして複数のキーを使用する機能が無い場合)。この制約に抵触した場合、リプライの status は Failed となり、どの修飾キーも変更されない。
ある修飾キーに対して、現在設定されているキーコードとは異なる新たなキーコード(0 でない)が指定され、且つその修飾キーに対応するキー(現在設定されているもの、あるいは新たに指定されたもの)のいづれかが論理的に押された状態にある場合、リプライの status は Busy となり、どの修飾キーも変更されない。
status が Success であれば、このリクエストは MappingNotify イベントを生成する。
▶ |
keycodes-per-modifier: CARD8 |
keycodes: LISTofKEYCODE |
このリクエストは、修飾キーとして使用されているキーのキーコードを返すものである。keycodes のリストには 8 ✕ keycodes-per-modifier 個のキーコードが入っている。keycodes のキーコードは8つの集合に分割され、各集合には keycodes-per-modifier 個の要素が入る。これらの集合は、順に修飾キー Shift、Lock、Control、Mod1、Mod2、Mod3、Mod4、及び Mod5 に割り当てられる。keycodes-per-modifier の値はサーバが任意に指定するが、この結果として生じる各集合の中の未使用要素は値 0 を使用して埋められる。ある集合において全ての値が 0 である場合、対応する修飾キーの使用は禁止されている。各集合の中でのキーコードの順序は、サーバが任意に指定する。
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 イベントが発生する。
サーバはこのマッピング(キーコードとキーシンボルとの対応関係)を解釈する必要はない。マッピングは、クライアントが読み書きするためだけに記憶される(第5章を参照)。
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 の特別な値であり、各キーコードにおける未使用要素を埋めるために使用される。
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 イベントを交互に発生させる。あるキーが修飾キーとして使用されている場合、そのキーのオート・リピートの設定にかかわらず、同キーはオート・リピートしないようにするのが望ましい。
ベル音出力器は、コンソールに接続されているけれども直接にキーボード上にあるわけではない場合でも、あたかもキーボードの一部であるかのように扱われる。
制御変数を検証し変更する際の順序は、サーバ依存である。エラーが発生した場合、制御変数の一部は変更されてしまっている可能性がある。
▶ |
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 であるビットは、対応するキーに対してオート・リピートが許可されていることを表す。このベクトルは32バイトで表される。N 番目(先頭は 0 番)のバイトには、8N から 8N + 7 までのキーに対応するビットが入っており、同バイトの最下位ビットが 8N のキーに対応する。
percent: INT8 |
Errors: Value |
このリクエストは、可能であれば、キーボードのベルを鳴らすものである。その際には、キーボードの基礎音量に対する相対的な音量を指定する。percent には、-100 から 100 までの範囲(両端を含む)の数値を指定することができる(範囲外の数値を指定すると Value エラーを生ずる)。percent の値が負でない場合、ベルが鳴る音量は次の通り。
base - [(base * percent) / 100] + percent
percent が負である場合、音量は次の通り。
base + [(base * percent) / 100]
map: LISTofCARD8 |
▶ |
status: { Success, Busy} |
Errors: Value |
このリクエストは、ポインタのマッピング(物理的なボタンと論理的なボタン番号との対応付け)を設定するものである。map で指定されたリストの要素の要素番号(index)は、1 から始まる。map のリストの長さは、GetPointerMapping で返されるリストの長さと同じでなければならない(さもなくば Value エラーを生ずる)。map のリストの要素番号(index)はコア・ボタン番号(訳註:物理的なボタン番号)であり、同リストの要素が実効番号(訳註:論理的なボタン番号)を定める。
要素の値が 0 であれば、そのボタンは無効化される。要素の(取り得る)値は物理的なボタンの数には制約されないが、2つ以上の要素が同一の値(値 0 は除く)を持つことはできない(さもなくば Value エラーを生ずる)。
変更しようとしたボタンのいづれかが論理的に押された状態であった場合、リプライの status に Busy が返り、マッピングは変更されない。
リプライの status が Success のとき、このリクエストは MappingNotify イベントを発生させる。
▶ |
map: LISTofCARD8 |
このリクエストは、ポインタの現在のマッピング(物理的なボタンと論理的なボタン番号との対応付け)を返すものである。map のリストの要素の要素番号(index)は 1 から始まる。map のリストの長さは、物理的なボタンの数を表す。
ポインタへの名義写像(nominal mapping:訳註:非数値である名義を数値に変換する)は、次の恒等写像である。
map[i]=i
do-acceleration, do-threshold: BOOL |
acceleration-numerator, acceleration-denominator: INT16 |
threshold: INT16 |
Errors: Value |
このリクエストは、ポインタがどのように動くのかを定めるものである。acceleration は、移動量に対する乗数であり、acceleration-numerator と acceleration-denominator の値を用いて分数で表される。例えば、acceleration が 3/1 であれば、ポインタは通常よりも3倍速く移動することになる。サーバは、任意にこの分数を丸める(round:整える)ことができる。acceleration (加速倍率)は、ポインタが1度に移動する量が 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 エラーが発生する。
▶ |
acceleration-numerator, acceleration-denominator: CARD16 |
threshold: CARD16 |
このリクエストは、ポインタの現在の acceleration (加速倍率:acceleration-numerator と acceleration-denominator を用いて分数で表される)と threshold (加速に必要な移動量:単位はピクセル)を返すものである。
timeout, interval: INT16 |
prefer-blanking: { Yes, No, Default} |
allow-exposures: { Yes, No, Default} |
Errors: Value |
timeout と interval は秒単位で指定する。この2つの引数の値に -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 を指定すると、周期的な変更が不要であることを示すヒントになる。この種のスクリーン変更方式の例を挙げると、周期的にカラーマップをかき混ぜる方式、スクリーンのあちこちに周期的にアイコン・イメージを移動させる方式、ルート・ウィンドウの背景タイルでスクリーンをタイリングしつつ周期的にタイルの原点の位置をランダムに変更する方式など。
▶ |
timeout, interval: CARD16 |
prefer-blanking: { Yes, No} |
allow-exposures: { Yes, No} |
このリクエストは、スクリーン・セーバを制御する変数の現在の値を返すものである。
mode: { Activate, Reset} |
Errors: Value |
mode が Activate であり且つスクリーン・セーバが現在停止している場合、(timeout の値に 0 が設定されていてスクリーン・セーバが無効化されている場合であっても)スクリーン・セーバが起動される。mode が Reset であり且つスクリーン・セーバが現在有効化されている場合、スクリーン・セーバは(もし起動していたのであれば)停止し、起動タイマは(まるで今デバイス入力を受け取ったかのように)初期状態へとリセットされる。
mode: { Insert, Delete} |
host: HOST |
Errors: Access, Value |
このリクエストは、host で指定されたホストをアクセス制御リストに追加したり、同リストから削除したりするものである。アクセス制御機構が有効である場合、クライントがサーバへの接続確立を試みるには、同クライアントが存在しているホストがアクセス制御リストに載っているか、あるいは同クライアントがサーバ固有の方法によって(接続の)許可を与えられているかしなければならない。さもなければ、サーバは接続を拒否する。
クライアントがこのリクエストの実行するには、同者がサーバと同じホスト上に存在するか、あるいは(and/or)サーバ固有の方法によって許可を与えられているかしなければならない(さもなくば Access エラーを生ずる)。
アクセス制御リストの初期状態は、通常は設定可能である。この設定は大抵、サーバが起動時とリセット時に読み込むべきファイルの名前を指定することによって行われる。
以下のアドレス・ファミリ(アドレスの種類)が定義されている。サーバは、これらのファミリに必ず対応していなければならないわけではなく、ここに挙がっていないファミリに対応していても構わない。非対応のファミリを使用した場合、あるいは対応しているファミリの中で不適切なアドレス書式や不適切なアドレス長を使用した場合、Value エラーとなる。
Internet ファミリでは、アドレスの長さは4バイトでなければならない。アドレスのバイトの順序は、標準の IP (internet protocol)のものである。サーバは、自動的にアドレス・バイトの順序を交換したりはしない。Internet ファミリでは、IP バージョン4のアドレスしか使用できない。
InternetV6 ファミリでは、アドレスの長さは16バイトでなければならない。アドレスのバイトの順序は、標準の IP のものである。サーバは、自動的にアドレス・バイトの順序を交換したりはしない。InternetV6 ファミリでは、IP バージョン6のアドレスしか使用できない。
DECnet ファミリでも、サーバは自動的にアドレス・バイトの順序を交換したりはしない。Phase IV アドレスの長さは2バイトである。第1バイトにはノード番号の最下位ビット8桁が入り、第2バイトの最下位の2ビットにはノード番号の最上位ビット2桁が入り、第2バイトの最上位の6ビットにはエリア(area:訳註:ノードのグループ)の情報が入る。
Chaos ファミリでは、アドレスの長さは2バイトでなければならない。第1バイトは常にホスト番号であり、第2バイトは常にサブネット番号である。サーバは、自動的にアドレス・バイトの順序を交換したりはしない。
ServerInterpreted ファミリでは、アドレスの長さは65535バイト以下の任意の長さである。アドレスは ASCII 文字から成る2つの文字列で構成され、この2つの文字列は値が 0 であるバイト1つで区切られている。第1の文字列はアドレスの型(type)を表し、第2の文字列にはアドレスの値が入る。アドレスの型とその型の値の文法(syntax)とは、X.Org Registry に登録されている。実装者の中、実装独自の型を追加したいと考える者は、名前空間における衝突を防ぐため、X.Org registry に唯一無二の接頭辞を登録することができる。
ChangeHosts リクエストでホスト・アドレスを使用することは推奨されない。このやり方が有効なのはホストが被りのない不変な(一定の)アドレスを持っている場合であるが、この要件は、次の事情によってますます満たされ難くなっている。即ち、動的に割り当てられるアドレス、ネットワーク・アドレス変換ゲートウェイ、IPv6 リンク・ローカル・アドレス、その他の様々な技術を各サイトが採用したことによる。また、このやり方は、同一ホストのユーザが皆、同等のアクセス権を持っていることを前提にしているが、これは複数のユーザを持つマシンが多数存在する今の環境にはもはや合っていない。これに代わって、共有秘密や公開鍵暗号に基くような、もっと安全な形式の認証を用いることが推奨される。
▶ |
mode: { Enabled, Disabled} |
hosts: LISTofHOST |
このリクエストは、アクセス制御リストに載っているホスト群と、接続設定の際にこのリストを使用する機能(アクセス制御)が有効になっているか否かとを返すものである。
各ホスト名は、長さが4バイトの倍数になるように詰め物をされる。
mode: { Enable, Disable} |
Errors: Access, Value |
このリクエストは、接続設定時のアクセス制御リストの利用を有効あるいは無効にするものである。
クライアントがこのリクエストを実行するには、サーバと同じホストの上に存在するか、あるいは(and/or)サーバ固有の方法で許可を与えられているかしなければならない(さもなくば Access エラーを生ずる)。
mode: { Destroy, RetainPermanent, RetainTemporary} |
Errors: Value |
このリクエストは、接続を閉じる(切断する)時にクライアントのリソースをどうするかを定めるものである。各接続の初期状態は、Destroy モードである。close-down モード(接続切断のモード)の役割は、第10章で説明している。
resource: CARD32 or AllTemporary |
Errors: Value |
resource に有効なリソースが指定された場合、KillClient は、同リソースを作成したクライアントの接続を強制的に切断する。このクライアントが RetainPermanent モードもしくは RetainTemporary モードで既に終了している場合、同クライアントのリソースは全て破棄される(第10章を参照)。resource に AllTemporary が指定された場合、RetainTemporary モードで終了している全てのクライアントのリソースを破棄する。
接続を閉じる(close)時、クライアントが行っていたイベント配信選択(event selection)は全て破棄される。クライアントが能動的にポインタを占有している場合、UngrabPointer が実行される。クライアントが能動的にキーボードを占有している場合、UngrabKeyboard が実行される。クライアントによる受動的占有は全て解放される。クライアントがサーバを占有している場合、UngrabServer が実行される。クライアントが所有しているセレクション(SetSelectionOwner リクエストの項を見よ)は全て、所有されていない状態になる。close-down モード(SetCloseDownMode リクエストの項を見よ)が RetainPermanent もしくは RetainTemporary である場合、クライアントが作った(allocate)全てのリソース(カラーマップのエントリを含む)は、それぞれ「永久的」もしくは「一時的」なものとして印を付されることになる(但し、他のクライアントが明示的にこれらのリソースを破棄することは妨げられない)。close-down モードが Destroy である場合、クライアントのリソースは全て破棄される。
クライアントのリソースが破棄された場合、同クライアントのセーブ・セット(訳註:「用語集」参照)に入っているウィンドウのそれぞれに対して次の処理が行われる。即ち、セーブ・セット・ウィンドウが先述のクライアントの作ったウィンドウの子孫である場合、同セーブ・セット・ウィンドウの親を最も近い祖先に変更し、リソース破棄クライアントが作成したウィンドウの子孫でなくなるようにする。セーブ・セット・ウィンドウがアンマップされている場合、MapWindow リクエストを同ウィンドウに対して実行する(同ウィンドウがリソース破棄クライアントの作成したウィンドウの子孫でない場合であっても実行する)。親変更を行ってもセーブ・セット・ウィンドウの外側左上隅の絶対座標(ルート・ウィンドウの座標系のもの)は変わらない。このセーブ・セットの処理の後、リソース破棄クライアントが作成したウィンドウは全て破棄される。同クライアントが作成した「ウィンドウ以外」のリソースのそれぞれに対して、適当な Free リクエストが実行される。同クライアントが作成した(allocate)色とカラーマップ・エントリは全て解放される。
サーバには接続を持っている状態と全く持っていない状態があり、サーバはこの2つの状態の間を行き来する。サーバは、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 は全てのキーに対して生成される。これは、修飾キーのビットに対応付けられているキーであっても例外ではない。イベントの「ソース」は、ポインタが(中に)あるウィンドウである。あるウィンドウを対象としてイベントが報告される場合、そのウィンドウのことをイベント・ウィンドウと呼ぶ。イベント・ウィンドウは次のように決定(発見)される。即ち、クライアントがそのイベントを選択していたウィンドウの中、ソース・ウィンドウからウィンドウの階層を上に辿って行って最初に見つかったものがイベント・ウィンドウになる(但し、間に存在するウィンドウの中に、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)について特に保証は無いが、動作イベントを選択しているクライアントは、ポインタが移動し且つ止まったとき、イベントを少なくとも1つ受け取ることが保証されている。PointerMotion を選択すると、ポインタのボタンの状態に関わらずイベントを受け取ることができる。代わりに Button[1-5]Motion の部分集合(訳註:Button1Motion、Button2Motion、Button3Motion、Button4Motion、Button5Motion の特定の組み合わせ)を選択した場合、指定されたボタンの中の1つ以上が押されたときだけ MotionNotify イベントを受け取ることになる。ButtonMotion を選択すると、1つ以上のボタンが押されたときに限って MotionNotify イベントを受け取ることになる。いづれのイベントマスクを選択したかに関わらず、イベントの型は常に MotionNotify である。PointerMotionHint を選択した場合、サーバは、キーやボタンの状態が変化するか、ポインタがイベント・ウィンドウを離れるか、もしくはクライントが QueryPointer リクエストや GetMotionEvents リクエストを発行するかするまでの間は、クライアントに対して、イベント・ウィンドウに関する MotionNotify イベント(detail は Hint)を1つしか送らずに済ませることができる。
ポインタが移動したりウィンドウの階層が変更したりした結果、ポインタの存在するウィンドウがそれまでとは異なるものになった場合、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 } |
この2つのイベントは、入力フォーカスが変更されたときに発生し、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 |
keys: LISTofCARD8 |
keys の値は、QueryKeymap の項で説明したビット・ベクトルである。このイベントは、ウィンドウに対して KeymapState を選択しているクライアントへ報告されるものであり、EnterNotify イベント及び FocusIn イベントが発生する度、即座に発生する。
Expose |
window: WINDOW |
x, y, width, height: CARD16 |
count: CARD16 |
このイベントは、window のウィンドウに対して Exposure を選択しているクライアントに報告されるものである。このイベントが発生するのは、ウィンドウの領域として使用できる有効な内容が存在せず、且つ次の3ついづれかが成立するときである。即ち、(1)同領域が可視である場合、(2)同領域が表示可能であり且つサーバが同ウィンドウのバッキング・ストアを保持している(おそらくは新たに保持することになった)場合、(3)あるいは同ウィンドウは表示可能でないものの、サーバが同ウィンドウの backing-store 属性として Always や WhenMapped を受け取っている(おそらくは新たに受け取った)場合である。領域は任意の個数の矩形に分割され、各矩形に対して1つづつ Expose イベントが発生する。
(複数の)露出イベントを引き起こす動作が1つあった場合、特定の(1つの)ウィンドウに関するイベント群は必ず連続して報告される。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 |
drawable: DRAWABLE |
x, y, width, height: CARD16 |
count: CARD16 |
major-opcode: CARD8 |
minor-opcode: CARD16 |
このイベントは、graphics-exposures の値が True であるグラフィクス・コンテクストを使用しているクライアントに対して報告されるものである。また、このイベントは、ソース領域の一部が隠れていたり境界外だったりするために、デスティネーション領域に計算できない部分がある場合に発生するものである。1つのグラフィクス・リクエストで露出される領域群は全て、連続して報告されることが保証されている。count の値が 0 であれば、このウィンドウに対する後続の GraphicsExposure イベントは存在しない。count の値が 0 でない場合、少なくとも count の値の数だけこのウィンドウに対する後続の GraphicsExposure イベントが存在する(もっとある可能性あり)。
x、y の座標は、drawable のドローアブルの原点を基準としたものであり、矩形の左上隅を表す。width と height は矩形の寸法を表す。
major-opcode と minor-opcode によって、使用されたグラフィクス・リクエストを識別する。コア・プロトコル(本プロトコル)においては、major-opcode は常に CopyArea か CopyPlane のどちらかを表す値であり、minor-opcode の値は常に 0 である。
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 |
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 |
parent, window: WINDOW |
x, y: INT16 |
width, height, border-width: CARD16 |
override-redirect: BOOL |
このイベントは、parent のウィンドウに対して SubstructureNotify を選択しているクライアントに報告されるものであり、window のウィンドウが作成されたときに発生するものである。引数(イベントの各フィールド)は、CreateWindow リクエストにおけるものと同じである。
DestroyNotify |
event, window: WINDOW |
このイベントは、window のウィンドウに対して StructureNotify を選択しているクライアントと、同ウィンドウの親に対して SubstructureNotify を選択しているクライアントに対して報告されるものである。このイベントが発生するのは、window のウィンドウが破棄されたときである。event には、このイベントが発生したウィンドウが入る(訳註:破棄されたウィンドウもしくはその親ウィンドウ)。window には、破棄されたウィンドウが入る。
DestroyNotify イベントの発生順序について述べると、各ウィンドウにおいて、先ずそのウィンドウの全ての子孫に関するイベントが発生し、その後に同ウィンドウ自身に関するものが発生する。兄弟間や、下位階層を跨いだ(訳註:従兄弟・再従兄弟のような)ウィンドウの間には、イベントの発生順序に対してこれ以外の制約は無い。
UnmapNotify |
event, window: WINDOW |
from-configure: BOOL |
このイベントは、window のウィンドウに対して StructureNotify を選択しているクライアントと、同ウィンドウの親に対して SubstructureNotify を選択しているクライアントに対して報告されるものである。このイベントが発生するのは、window のウィンドウが「マップされている」状態から「アンマップされている」状態へ変わったときである。event には、このイベントが発生したウィンドウが入る(アンマップされたウィンドウもしくはその親ウィンドウであり、X サーバはここにイベントを送る)。window には、アンマップされたウィンドウが入る。アンマップされたウィンドウの win-gravity が Unmap であり、同ウィンドウの親のサイズが変更された結果としてこのイベントが発生した場合、from-configure フラグが True になる。
MapNotify |
event, window: WINDOW |
override-redirect: BOOL |
このイベントは、window のウィンドウに対して StructureNotify を選択しているクライアントと、同ウィンドウの親に対して SubstructureNotify を選択しているクライアントに対して報告されるものである。このイベントが発生するのは、window のウィンドウが「アンマップされている」状態から「マップされている」状態へ変わったときである。event には、このイベントが発生したウィンドウが入る。window には、マップされたウィンドウが入る。override-redirect フラグは、window のウィンドウの属性から取ったものである。
MapRequest |
parent, window: WINDOW |
このイベントは、parent のウィンドウに対して SubstructureRedirect を選択しているクライアントに報告されるものである。このイベントが発生するのは、アンマップ状態にあり override-redirect 属性が False であるウィンドウ(window のウィンドウ)に対して MapWindow リクエストが発行されたときである。(訳註:通常、このイベントを受け取るのはウィンドウ・マネージャである。)
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 |
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 |
event, window: WINDOW |
x, y: INT16 |
このイベントは、window のウィンドウに対して StructureNotify を選択しているクライアントと、同ウィンドウの親に対して SubstructureNotify を選択しているクライアントに報告されるものである。このイベントが発生するのは、ウィンドウがその親のサイズ変更の所為で移動させられたときである。event には、イベントが発生したウィンドウが入る(訳註:移動したウィンドウもしくはその親。ここにイベントが送られる)。window には、移動したウィンドウが入る。x、y の座標は、新しい親の原点を基準としたものであり、window のウィンドウの外側左上隅の位置を表す。
ResizeRequest |
window: WINDOW |
width, height: CARD16 |
このイベントは、window のウィンドウに対して ResizeRedirect を選択しているクライアントに報告されるものである。このイベントが発生するのは、同クライアントとは別のクライアントが ConfigureWindow リクエストを発し、window のウィンドウのサイズを変更しようと試みたときである。width と height は、ウィンドウ内側のサイズ(サイズ変更リクエストで指定されたサイズ)であり、ボーダ(枠)は含まない。
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 |
event, window: WINDOW |
place: { Top, Bottom} |
このイベントは、window のウィンドウに対して StructureNotify を選択しているクライアントと、同ウィンドウの親に対して SubstructureNotify を選択しているクライアントに報告されるものである。このイベントが発生するのは、CirculateWindow リクエストによって、ウィンドウの重ね順が実際に変更されたときである。event には、イベントが発生したウィンドウが入る(訳註:重ね順が変更されたウィンドウもしくはその親。ここにイベントが送られる)。window には、重ね順が変更されたウィンドウが入る。place が Top である場合、window のウィンドウは全兄弟の中で一番上(最前面)にある。そうでない場合、同ウィンドウは全ての兄弟の下(後ろ)にある。
CirculateRequest |
parent, window: WINDOW |
place: { Top, Bottom} |
このイベントは、parent のウィンドウに対して SubstructureRedirect を選択しているクライアンに報告されるものである。このイベントが発生するのは、parent のウィンドウに対して CirculateWindow リクエストが発行され、あるウィンドウ(parent の下位ウィンドウ)の重ね順を実際に変更する必要があるときである。window には、重ね順を変更するべきウィンドウが入る。place には、新しい重ね順の位置(リクエストで要求された位置)が入る。
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 |
owner: WINDOW |
selection: ATOM |
time: TIMESTAMP |
このイベントは、セレクションの現在の所有者に報告されるものであり、SetSelectionOwner によって新たな所有者が定められたときに発生する。time のタイムスタンプは、selection のセレクションについて記録されている最終変更時刻である。owner は、現在の所有者(訳註:これから所有権を失う所有者)が自身の SetSelectionOwner リクエストで指定したウィンドウである。
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 |
requestor: WINDOW |
selection, target: ATOM |
property: ATOM or None |
time: TIMESTAMP or CurrentTime |
このイベントは、ConvertSelection リクエストで指定されたセレクションに所有者が存在しなかったとき、同リクエストに応えてサーバが生成するものである。所有者が存在する場合、このイベントは SendEvent を使って所有者が生成する。セレクションの所有者は、selection のセレクションを変換して property にプロパティとして格納し終えた場合、あるいはセレクションの変換が実行できなかった場合(property に None を設定して示す)、このイベントを requestor (変換の要求者)のウィンドウへ送る。
ColormapNotify |
window: WINDOW |
colormap: COLORMAP or None |
new: BOOL |
state: { Installed, Uninstalled} |
このイベントは、window のウィンドウに対して ColormapChange を選択しているクライアントに報告されるものである。ウィンドウのカラーマップ属性が変更されたことを受けて発生した場合には、new の値は True であり、ウィンドウのカラーマップが組み込まれたり取り外されたりしたことを受けて発生した場合には、new の値は False である。どちらの場合にも、state の値はカラーマップが現在組み込まれているか否かを表す。
MappingNotify |
request: { Modifier, Keyboard, Pointer} |
first-keycode, count: CARD8 |
このイベントは全てのクライアントに送られる。このイベントに関心がないことを表明する(受け取りたくないことを表明する)機構は存在しない。detail は、発生した変更の種類を表す。detail の値が Modifier (原文は Modifiers)であれば SetModifierMapping が成功したことを表し、Keyboard であれば ChangeKeyboardMapping が成功したことを表し、Pointer であれば SetPointerMapping が成功したことを表す。detail の値が Keyboard の場合、変更されたキーコードの範囲が first-keycode と count によって示される。
ClientMessage |
window: WINDOW |
type: ATOM |
format: {8, 16, 32} |
data: LISTofINT8 or LISTofINT16 or LISTofINT32 |
このイベントは、クライアントが SendEvent を使用することによってのみ発生する。type によって、受信側クライアントがどのように data のデータを解釈するべきなのかを指定する。サーバは、type や data の解釈を行わない。format は、data を8ビットのリスト(配列)として見るべきなのか、それとも16ビットのリスト、あるいは32ビットのリストとして見るべきなのかを指定するものである。format のおかげで、サーバは(必要に応じて) data のバイト順を正しく並び替えることができるようになる。data は常に、8ビットの値20個、あるいは16ビットの値10個、あるいは32ビットの値5個から成る。もっとも、メッセージの型(type)によっては、これらの値の全部を使用しないこともある。
サーバは、ある接続に対して書き込んでいる時は、その接続からの読み込みを停止することが認められている(但し、書き込みをブロックするのであれば、サーバは他の接続をサービスし続けなければならない)。サーバは、接続毎に1度に1つのリクエストだけバッファできればよいのである。クライアントは、サーバに対する任意の接続において、同接続から読み込んでいる最中にブロックする(待受け状態になる)ことが可能であるが、書き込んでいる最中にブロックする場合にはイベントとエラーの読み込み動作は熟さなければならない。クライアント側でこの規則に対する違反があると、接続がデッドロックする可能性がある。もっとも、伝送層にバッファ容量がほとんど無い場合や、クライアントがリプライの読み込みやエラー・イベントの確認を一切せずに大量のリクエストを送信しようとした場合でなければ、デッドロックはそう簡単に起きるものではない。
サーバが内部で並行処理を行えるように実装されているか否かにかかわらず、リクエスト群全体の実行結果は、まるで順番通りに個々のリクエストの実行を完了させていったかのようにならなければならず、また、同一の接続から来たリクエスト群は届いた順序で実行されなければならない(即ち、この2つを総合した実行順序は、個々のストリームの纏まりは崩さずにそれらの纏まりを並び替えたものになる)。リクエストを1つ実行する操作には、全ての引数(の有効無効)を検証すること、リプライのためのデータ全てを纏めること、及び必要なイベント全てを生成しキューに入れることが含まれる。けれども、リプライとイベントを実際に送ることは、リクエストの実行には含まれない。加えて、(例えば、占有の能動化やポインタの移動のように)複数のイベントを生成し得る他の要因がある場合、サーバによる実行結果は、他の要因群とリクエスト群の全てに関して、必要なイベント全てを実際に生成し不可分的にキューに入れるというものでなければならない。あるクライアントからのあるリクエストについて、そのリクエストを実行することによって生じたイベントであって同クライアントへ送られるべきものが存在する場合、同イベントはリプライやエラーの送信に先立って同クライアントへ送られなければならない。
KEYSYM の値は、32ビットの整数であり、キーボードのキーキャップの記号(キーボードの各キーの表面に描いてある記号)を表す符号である。最上位の3ビットは常に 0 であり、残りの29ビットの数値空間を使用する。便宜的に、KEYSYM の値を4つのバイトに分けて扱う。
第1バイトは最上位の8ビットである(0 で固定された3つのビットと、有効な29個のビットの中の最上位5ビットから成る)。
第2バイトは、その次の最上位8ビットである。
第3バイトは、その次の最上位8ビットである。
第4バイトは、最下位の8ビットである。
KEYSYM の値には、6つの区分(category)がある。
特別な値が2つある。NoSymbol と VoidSymbol である。これらはシンボルが存在しないことを表すのに使用する(「第5章 キーボード」を参照)。
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 は、#x0020 から #x007E まで及び #x00A0 から #00FF までの範囲を使用する。また、Latin-1 の各 KEYSYM はそれぞれ、ISO 10646 / Unicode の文字の U+0020 から U+007E まで及び U+00A0 から U+00FF までをも表す。
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 は通常、ソフトウェアの機能、モード、あるいは操作(例えば、「cursor up」「caps lock」「insert」)を表す。これらの機能等はそれ専用のキーを使って有効にする(activate)ことができる。ファンクション KEYSYM の第1バイトと第2バイトの値は 0 である。第3バイトは8ビットの集合3つを区別するために使用し、この集合たる8ビットが第4バイトとなり、第4バイトによって個々のファンクション・キーを表す。
第3バイト | 第4バイト |
---|---|
255 | キーボード |
254 | キーボード (XKB) 拡張 |
253 | 3270 (IBM3270) |
各国の市場において、文字キーに関してはキーボードは比較的統一されている傾向があるけれども、各種ファンクション・キーにはかなりの差異が見られる。初期のタイム・シェアリング時代の産物であるファンクション・キーがあるかと思えば、特定のアプリケーション(例えば、テキスト処理、ウェブ・ブラウジング、視聴覚データへのアクセスを行うもの)のために設計されたファンクション・キーも存在する。キーキャップ上の記号は、製造企業や国(の市場)ごとにかなり差異があり、同一のソフトウェア機能を記す場面ですら差異が見られる(例えば、アメリカでは「Ctrl」だがドイツでは「Strg」である等)。
このような世界でどのように KEYSYM を定義するかについて、2つの考え方が存在する。
刻印アプローチ
共通アプローチ
刻印アプローチでは、他とは異なるキー刻印の全てに対して KEYSYM を割り当てる。これは、実質的には、あらゆるキーボードのあらゆるキー刻印の集合を作ることに等しい。例えば、最上段のファンクション・キーに F1 から Fn という文字が描いてあるキーボードもあれば、PF1 から PFn という文字が描かれているキーボードもある。刻印アプローチにおいては、これらのキーは異なるキーとして扱う。同様に、Lock は Shift Lock とは異なり、小文字を大文字に切り替える効果を持つ上向き矢印記号とも異なる。Del、DEL、Delete、Remove など、このような別名は他にもたくさんある。刻印アプローチでは、KEYSYM の集合に新たなエントリを追加すべきか否かを判断するのは簡単である。既存のエントリの中に完全に一致するものがなければ、新たなエントリを作成すればよい。
共通アプローチでは、十分な数のキーボードを用意し、それらの上に存在する全てのキーを持ってきて、纏めるべきだと思われる複数の別名を1つの KEYSYM に纏めようと試みる。例えば、Del、DEL、及び Delete は1つの KEYSYM に纏められる。企業は、企業専用の符号空間を用いて KEYSYM の集合を拡大することができ、標準集合に含まれない独自キーの全てをそこに含めることができる。標準の KEYSYM にどのキーを対応させるかは各企業が判断するけれども、これはユーザによって上書きされる可能性が高い。共通アプローチの実践をさらに難しくするのは、次の2つの点を判断する必要があることである。即ち、標準集合の KEYSYM の1つと見做してかまわないような刻印1つを実装するためにどれだけのキーボードを集めれば十分なのか(十分集まったと言える時期は何時なのか)、及び、1つの KEYSYM に纏められるべき刻印はどれとどれなのかを判断する必要があることである。
どちらの方法も完璧ではなく洗練されてもいないが、移植性のあるアプリケーションを書きやすいことから共通アプローチを選んだ。Delete の機能を1つの 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 | 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 の番号の #x10000000 から #x1FFFFFFF までは、企業独自の拡張で利用することができる。この中、#x11000000 から #x1100FFFF までの範囲はキーパッドの KEYSYM 用である。
ISO 10646 / Unicode が使えるようになる前の時代、文字を表すのに8ビットの古い文字符号集合を複数用いていた。第1バイトと第2バイトの値は 0 であり、第3バイトで文字符号の集合を指定し、第4バイトには指定された集合の中の特定の文字を表す8ビットの値が入る、というものである。
第3バイト | 第4バイト |
---|---|
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 |
各文字集合の中の、前の文字集合(第3バイトの値がより小さい文字集合)にある符号と重複していた符号が削除されているので、その部分は空いている。
Latin、Arabic、Cyrillic、Greek、Hebrew、及び Thai の文字集合は、当時利用可能であった ISO 8859 の該当部分の初期草案を元に作られた。しかしながら、Cyrillic と Greek の文字集合の場合、ISO の規格の最終版は草案とは異なるものになっていた。Technical、Special、及び Publishing の集合は、当時はこれと同等の国際的な規格が存在しなかったため、Digital Equipment Corporation の規格に基いている。
下の表には、規格化されていた古い KEYSYM 全てが載っている。名前の欄には、元の文書(本プロトコルの旧版)で使用されていた名前を載せている。誤解の余地なく等価である Unicode の値が存在する場合(ISO 8859 の文字は全てこの場合に当たる)、相互参照として2番目の列にその値を記載している。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 |
全ての数字は10進数である。但し、頭に #x が付いているものは、16進数である。
リクエスト、リプライ(返答)、エラー、イベント、そして複合型(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 エラーは、第1バイトは常に 0 であり(エラーであることを表す)、第2バイトは常に 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 が含む符号(の符号化方式)を1つ1つ列挙している。各符号化方式における NAME (訳註:CreateWidnow の VALUEs でいうと、background-pixmap や background-pixel の列) は、BITMASK の中の対応するビットを表している(訳註:CreateWindow においては BITMASK を用いて VALUEs の中のどの値を設定するのかを示す)。VALUEs 中の符号1つ(a VALUE)の長さは常に4バイトであるが、実際に使用する最下位バイトのバイト数が各符号化方式(encoding-form)のバイト数として記されている。残りのバイトは使用されず、その部分の値は問題にならない。
ある構成要素が占めるバイト数を表すのに、特定の数値ではなく小文字のアルファベット1文字の変数名を用いることがある。また、これとは別の構成要素の値を表すのに、同変数を用いた単純な数式を利用することもある。このような式で記された構成要素は、常に符号なし整数として解釈する。この変数の有効範囲は常に、同変数を使っているリクエスト、リプライ、エラー、イベント、及び複合型構造体(compound type structure)の内部に留まる。例を挙げる。
2 3+n リクエストの長さ 4n LISTofPOINT points
未使用バイト(各バイトの値は定義されておらず、どのような値でも問題にならない)の符号化方式は次の通り。
N unused
未使用バイトのバイト数が可変である場合、通常は次のような符号化方式で記述する。
p unused, p=pad(E)
ここでは、E は何らかの式であり、pad(E) は E を4の倍数に切り上げるために必要なバイトの数である。
pad(E) = (4 - (E mod 4)) mod 4
LISTofFOO |
本文書では、「LISTofFOO」という表記は FOO という型の符号を何回か繰り返すことを表す。リスト(配列)の実際の長さは別のフィールドで規定する。 |
SETofFOO |
集合(set)1つは常にビットマスク1つから成る。該当するマスクが集合の中に存在するか否かを 1 ビットを使って示す。 |
BITMASK: CARD32 |
WINDOW: CARD32 |
PIXMAP: CARD32 |
CURSOR: CARD32 |
FONT: CARD32 |
GCONTEXT: CARD32 |
COLORMAP: CARD32 |
DRAWABLE: CARD32 |
FONTABLE: CARD32 |
ATOM: CARD32 |
VISUALID: CARD32 |
BYTE: 8ビットの値 |
INT8: 8ビットの符号あり整数 |
INT16: 16ビットの符号あり整数 |
INT32: 32ビットの符号あり整数 |
CARD8: 8ビットの符号なし整数 |
CARD16: 16ビットの符号なし整数 |
CARD32: 32ビットの符号なし整数 |
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、キーシンボルの符号」に記載してある。
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
For TCP connections, displays on a given host are numbered starting from 0, and the server for display N listens and accepts connections on port 6000 + N. For DECnet connections, displays on a given host are numbered starting from 0, and the server for display N listens and accepts connections on the object name obtained by concatenating "X$X" with the decimal representation of N, for example, X$X0 and X$X1.
Information sent by the client at connection setup:
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)
Except where explicitly noted in the protocol, all 16-bit and 32-bit quantities sent by the client must be transmitted with the specified byte order, and all 16-bit and 32-bit quantities returned by the server will be transmitted with this byte order.
Information received by the client if the connection is refused:
1 0 Failed 1 n length of reason in bytes 2 CARD16 protocol-major-version 2 CARD16 protocol-minor-version 2 (n+p)/4 length in 4-byte units of "additional data" n STRING8 reason p 未使用, p=pad(n)
Information received by the client if further authentication is required:
1 2 Authenticate 5 未使用 2 (n+p)/4 length in 4-byte units of "additional data" n STRING8 reason p 未使用, p=pad(n)
Information received by the client if the connection is accepted:
1 1 Success 1 未使用 2 CARD16 protocol-major-version 2 CARD16 protocol-minor-version 2 8+2n+(v+p+m)/4 length in 4-byte units of "additional data" 4 CARD32 release-number 4 CARD32 resource-id-base 4 CARD32 resource-id-mask 4 CARD32 motion-buffer-size 2 v length of 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 未使用
X は、クライアント・プログラムを実行することができるホストのリスト(目録)を保持している。デフォルトの場合、ディスプレイを使用できるのは、ローカル・ホスト上のプログラム、及びサーバが読み込む初期リストで指定されているホストの上で動くプログラムだけである。ローカル・ホスト上のクライアントは、このアクセス制御リストを変更することができる。サーバを実装する時に別の認証機構を実装し、この機構(アクセス制御リスト)と併用したり、この機構の代用としたりすることもできる。この機構の動作は、サーバが接続開設時に受け取った認証プロトコルの名前とデータとに基いて、切り替えることができる。
ポインタやキーボードを実際に所有しているのが単一の占有クライアントである場合に「占有が能動的である」という。
W が A の子孫(子孫ウィンドウ)である場合、A は W の祖先(祖先ウィンドウ)である。
アトムは文字列名に与えられた ID であり、1つの文字列名に1つのアトムが対応し、被りは無い。アトムを使ってプロパティ、型、セレクションを識別する。
InputOutput は背景を持つことができる。この背景は1枚のピクスマップとして定義されている。ウィンドウの領域の内容が失われたり無効になったりした場合、サーバは自動的に同領域を「背景」でタイルする(訳註:用語集「タイル」を参照)。
サーバがウィンドウの内容を保持しているとき、スクリーンのピクセル情報とは別に保存してある(saved off screen)ピクセル情報のことをバッキング・ストアという。
ウィンドウのサイズを変更しても、同ウィンドウの内容は必ずしも破棄されるわけではない。変更前の内容をウィンドウの特定の領域に再配置するよう、サーバに要求することができる(但し、実施される保証は無い)。このようにウィンドウの内容を特定の位置に引き寄せることを「ビット・グラヴィティ」と呼ぶ。
ピクスマップやウィンドウを「ビットマップの積み重なったもの」と考えるとき、1枚1枚のビットマップを「ビット・プレーン」あるいは単に「プレーン」と呼ぶ。
ビットマップとは、深さ(depth)が 1 のピクスマップのことである。
InputOutput ウィンドウは、4辺とも同じ太さの枠(ボーダ)を持つことができる。ボーダの内容はピクスマップ1つで定義され、サーバが自動的にボーダの内容を管理する。ボーダの領域に対して露出イベント(Exposure event)が発生することはない。
ポインタのボタンは、クライアントによって受動的に(passively)占有され得る。受動的に占有されているボタンが押されると、ポインタは以後クライアントによって能動的に(actively)占有される。
画像(ピクスマップ/ビットマップ)データの場合、サーバがバイト順を定めるので、バイト順の異なるクライアントは、必要に応じてバイトを並び替えなければならない。それ以外のプロトコル全部においては、クライアントがバイト順を定めるので、サーバが必要に応じてバイトを並び替えることになる。
ウィンドウの子とは、同ウィンドウの下位ウィンドウであって、且つ最初の層に属するもののことである。
X では、クラスという用語は、ウィンドウのクラスとヴィジュアルのクラスの2つがある。ウィンドウのクラスは、ウィンドウが InputOnly であるか InputOutput であるかを表すもの。ヴィジュアルのクラスは、ウィンドウが使用するカラーモデルを表すものであり、DirectColor、GrayScale、PseudoColor、StaticColor、StaticGray、TrueColor のいづれかである。
アプリケーション・プログラムは、TCP 接続や共有メモリ・バッファなどのプロセス間通信経路を通してウィンドウ・システム・サーバに接続する。このようなプログラムがウィンドウ・システム・サーバのクライアントである。より正確に言うと、クライアントとは通信経路そのもののことである。例えば、サーバに対して複数の経路を開いているプログラム(1個のプログラム)は、プロトコル上は、複数のクライアントと見做される。リソース(資源)の寿命は、プログラムの寿命ではなく接続の寿命によって定まる。
グラフィクス・コンテクストにおいては、出力をウィンドウの特定の領域に限定するために、ビットマップや矩形のリスト(配列)を指定することができる。このビットマップや矩形のリストで定義された画像領域(image)のことを「クリップ領域」と呼ぶ。
1つのカラーマップは、色の値を定義したエントリ(entry)の集合1つから成る。あるウィンドウの内容は、同ウィンドウに紐付けられたカラーマップを用いて表示される。各ピクセル値はカラーマップ内の索引として機能し、この索引によってモニターの電子銃の動きを決める RGB 値をカラーマップから取り出す。ハードウェアの制限次第ではあるが、1つ以上のカラーマップを1度に組み込むことができる。このようにして、組み込んだカラーマップと紐付けられているウィンドウを正しい色で表示することができるようになる。
サーバとクライアント・プログラムとの間のプロセス間通信経路のことを「接続」と呼ぶ。クライアント・プログラムは通常(但し必ずではない)、サーバに対する接続を1つ持っており、この接続を通じてリクエストとイベントを送受信する。
あるウィンドウが表示可能状態であり、且つ同ウィンドウの可視領域の内部または同ウィンドウの子孫のいづれかの可視領域の内部にカーソルのホットスポットが存在する場合、このウィンドウはポインタを「含んでいる」という。ウィンドウのボーダ(枠)は、包含関係に関する限り、ウィンドウの一部であると考える。あるウィンドウがポインタを含んでおり、且つその子孫がポインタを含んでいないとき、ポインタは前者のウィンドウの「内部にある」(is “in”)という。
座標系は、水平方向の X 軸と垂直方向の Y 軸を持っており、左上が原点 [0, 0] である。座標は、整数の値で表現され、単位はピクセルであり、ピクセルの中心の位置を表す。各ウィンドウも各ピクスマップも、すべて自分自身の座標系を持つ。ウィンドウの原点は、ボーダの内側の左上隅である。
カーソルは、ポインタが見える形でスクリーン上に現れたものである。カーソルを構成するのは、ホットスポット、ソース・ビットマップ、形状ビットマップ、及び対になる2つの色である。あるウィンドウのためにカーソルを定義した場合、そのウィンドウの内部にポインタがあるときは、ポインタの見た目が「定義されたカーソル」に従って変化する。
ウィンドウやピクスマップの深度とは、ウィンドウやピクスマップの1ピクセル当たりのビット数のことである。グラフィクス・コンテクストの深度とは、グラフィクスの出力の際にそのグラフィクス・コンテクストと組み合わせて使うことができるドローアブルの深度のことである。
キーボード、マウス、タブレット、トラック・ボール、ボタン・ボックスなどを総称して「入力デバイス」と呼ぶ。コア・プロトコル(本体のプロトコル)で扱うデバイスは、「キーボード」と「ポインタ」の2つだけである。
DirectColor は、カラーマップのクラスの1つである。このクラスの場合、ピクセル値は3つのサブフィールド(subfield)に分割され、それぞれのサブフィールドが(RGB 値を得るための)索引として機能する。第1のサブフィールドに入っている配列は、赤の強度の値を得るための索引として機能する。第2のサブフィールドに入っている配列は、青の強度の値を得るための索引として機能する。第3のサブフィールドに入っている配列は、緑の強度の値を得るための索引として機能する。RGB 値は動的に変更することができる。
サーバとそのスクリーンとその入力デバイスを合わせたものを「ディスプレイ」と呼ぶ。
ウィンドウとピクスマップはどちらも、グラフィクス操作(演算)の2種類の操作対象(演算対象)「ソース」(source)及び「デスティネーション」(destination)として使用することができる。こうしたウィンドウとピクスマップを総称して「ドローアブル」と呼ぶ。但し、InputOnly のウィンドウは、グラフィクス操作ではソースとしてもデスティネーションとしても使用することができない。
クライアントへの情報通知は、イベントを使って非同期的に行われる。イベントには、デバイスから非同期的に生成されるものと、クライアントのリクエストの副作用として生成されるものがある。イベントは「型」によって分類される。クライアントが(型を指定した上で)同型のイベントの通知を受けることを明示的に要求しない限り、その型のイベントがサーバからクライアントへ送られることはない。一方、クライアントは他のクライアントへ強制的にイベントを送りつけることができる。報告されるイベントは大抵、あるウィンドウ(で起きたこと)に関するものである。
イベントの要求は、(常に)各ウィンドウに関するものとして行われる。あるウィンドウに関してクライアントが要求するイベントの型の集合を示すには、イベント・マスクを用いる。
多重伝送されているデバイス・イベントを逆多重化(多重分離、選り分け)してクライアントへ送信するとき(特にウィンドウ管理の操作の過程でポインタ・イベントとキーボード・イベントの送信先を決めるとき)、ある種の競合条件が成立し得る。イベント同期機構を使うと、(このような場合でも)デバイス・イベントを同期処理することができる。
デバイス関連のイベントは、同イベントの発生元ウィンドウから祖先ウィンドウへと伝播していく。この伝播は、そのイベント型を処理する旨を表明していたクライアントが現れるか、または同イベントが明示的に破棄されるかするまで止まらない。
ポインタが内部にあるウィンドウがデバイス関連イベントの発生元(source)となる。(訳註:「the pointer is in」・・・「Containment」(含んでいる)を参照。)
あるウィンドウを対象としてイベントが報告される場合、そのウィンドウのことをイベント・ウィンドウと呼ぶ。
ウィンドウが隠れたり再構成(位置と大きさを変更)したりした場合、サーバがウィンドウの内容を保存しているとは限らない。ウィンドウ内の領域の内容が失われてしまった時、それを知らせるために露出イベントをクライアントへ送信する。
コア・プロトコルに対する拡張機能を定義して、システムの機能を拡張することができる。拡張機能の定義では拡張の名前も定める。出力リクエスト、リソース、及びイベント型の拡張は、全て実装可能であり且つ望ましいものでもある。
「フォーカス・ウィンドウ」は、「入力フォーカス」と同じ意味である。
フォントは、グリフ(glyph:字形)(文字が典型)の一覧表(matrix)である。X プロトコルは、文字集合の変換や解釈は一切行わない。クライアントは、グリフの配列の要素番号として機能する値を指定するだけでよい。フォントには付加的な寸法情報が含まれており、これによってグリフの間隔(文字の間隔)と行の間隔が定まる。
「GC」と「gcontext」は、「グラフィクス・コンテクスト」(graphics context)を略したものである。
グリフはイメージ(典型的には文字のイメージ)であり、フォントの中に入っている。
クライアントは、キーボード・キー、キーボード、ポインタ・ボタン、ポインタ、及びサーバを排他的に占有することができる。基本的には、これらの各種占有機能は、通常のアプリケーションが使用することを想定したものではなく、さまざまな入力マネージャ及びウィンドウ・マネージャがさまざまな様式のユーザ・インタフェイスを実装するために使用すべきものである。
グラフィクスの出力に関するさまざまな情報をグラフィクス・コンテクストに格納する。たとえば、前景ピクセル、背景ピクセル、直線の幅、クリップ領域などである。あるグラフィクス・コンテクストを使う際には、同グラフィクス・コンテクストと同じルート、同じ深さ(depth)を持つドローアブルと組み合わせなければならない。
グラフィクスを描画する X 関数をグラフィクス・プリミティブと呼ぶ。X には描画プリミティブとして、点や折れ線、点線の折れ線、矩形、円、楕円、円弧を描くことができる関数群が用意されている。塗りつぶしを行う関数群も「プリミティブ」である。X に備わっているグラフィクス・プリミティブは、グラフィクス作成に必要な情報全てを含んでおらず、グラフィクス・コンテクストというリソースを併用して不足している変数を補うことになる。グラフィクス・プリミティブで描画する形状の全体を指定し、グラフィクス・コンテクストで描画の方法を指定する、と考えることができる。
「ビット・グラヴィティ」及び「ウィンドウ・グラヴィティ」を見よ。
GrayScale は、PseudoColor の特別な場合(退化した場合)と考えることができる。GrayScale ではカラーマップの全てのエントリにおいて赤、緑、青の値が等しく、結果として灰色の色調となる。灰色の値は動的に変更できる。
カーソルにはホットスポットがある。ホットスポットとは、カーソル内部の点の中、ポインタの座標として報告される点のことである。
識別子はリソースに紐付けられた固有の値であり、1つの識別子に1つのリソースが対応し、値の被りは無い。クライアントはこの値を使ってリソース(同値に紐付けられたもの)を指定する。識別子は、どのような接続においても使用することができる。
あるウィンドウの子孫とは、同ウィンドウの下に入れ籠状になって属している下位ウィンドウ全てのことである。子ウィンドウ、子ウィンドウの子ウィンドウなど。
入力フォーカスとは、通常、キーボードの入力を処理する範囲を定めるウィンドウのことである。生成されたキーボード・イベントが通常であればこのウィンドウもしくはその子孫のいづれかに対して報告されるであろう場合、同イベントは通常通りに(このウィンドウもしくはその子孫のいづれかに)報告される。そうでない場合、同イベントは(強制的に)フォーカス・ウィンドウを対象としたイベントとして報告される。入力フォーカスの設定によっては、全てのキーボード入力を破棄することもできるし、フォーカス・ウィンドウを動的に変更して、各キーボード・イベントが発生した時にポインタが存在するスクリーンのルート・ウィンドウをフォーカス・ウィンドウにすることもできる。
キーボード入力の制御は通常、入力マネージャ・クライアントが行う。
InputOnly ウィンドウは、グラフィクスのリクエストの対象として使うことができないウィンドウである。InputOnly ウィンドウは不可視であり、カーソル、入力イベントの生成、占有などの制御に用いることができる。InputOnly ウィンドウは、InputOutput ウィンドウを子孫として持つことができない。
InputOutput ウィンドウは、不透明なウィンドウの普通種であり、入力にも出力にも使える。InputOutput ウィンドウは、InputOutput ウィンドウも InputOnly ウィンドウも子孫として持つことができる。
クライントは、キーボード上のキーを受動的に(passively)占有することができる。受動的に占有されていたキーが押された場合、キーボードは、件のクライアントによって能動的に(actively)占有された状態へと移る。
クライアントは、キーボードの制御を能動的に(actively)占有することができる。この場合キー・イベントは、通常送られるはずのクライアントではなく、占有を行っているクライアントへ送られることになる。
キーボード上の各キーに描いてある記号を符号化したものである。
あるウィンドウに対するマップ命令(a map call)の実行が完了している場合、そのウィンドウは「マップされている」という。アンマップされている(unpmapped)(マップされていない)ウィンドウとその子孫は、表示可能状態にも可視状態にもなり得ない。
Shift、Control、Meta、Super、Hyper、Alt、Compose、Apple、CapsLock、ShiftLock 及びこれらに類するキーを修飾キーと呼ぶ。
Monochrome (モノクロ)は、StaticGray の特殊な場合であり、カラーマップのエントリが2つしかない。
あるウィンドウが他のウィンドウを「隠している」とき、後者のウィンドウは「隠されている」という。次のような条件が満たされたとき、「ウィンドウ A がウィンドウ B を隠している」という。即ち、両ウィンドウが表示可能な(viewable) InputOutput ウィンドウであり、グローバルな重ね順(ウィンドウの重ね順)に関して A の方が上(前面)にあり、且つ A の外縁によって定まる矩形が B の外縁によって定まる矩形と交差している(intersect)場合である。「隠す」(obscure)と「覆う」(occlude)の違いに注意。ウィンドウのボーダ(枠)も計算に含めること、また、ウィンドウは隠されていても依然として可視領域(visible regions)を持つことができることにも注意。
あるウィンドウが他のウィンドウを「覆っている」とき、後者のウィンドウは「覆われている」という。次のような条件が満たされたとき、「ウィンドウ A がウィンドウ B を覆っている」という。即ち、両ウィンドウがマップされており、グローバルな重ね順(ウィンドウの重ね順)に関して A の方が上(前面)にあり、且つ A の外縁によって定まる矩形が B の外縁によって定まる矩形と交差している(intersect)場合である。「覆う」(occlude)と「隠す」(obscure)の違いに注意。ウィンドウのボーダ(枠)も計算に含めることにも注意。(訳註:InputOnly ウィンドウは、他のウィンドウを「隠す」ことはできないが「覆う」ことは可能。)
プロトコル・リクエストの中のバイトの位置を自然な境界に揃えるため、データ・ストリームの中に埋め合わせ(padding)のバイトを挿入することがある。これによって、さまざまな構成(architecture)のマシンに移植しやすくなる。
C が P の子(child)であれば、P は C の親(parent)である。
あるキーやボタンを占有しても、その占有は受動的占有にすぎない。占有が能動的になる(activate)のは、実際に同キーや同ボタンが押されたときである。
ピクセル1つは、N ビットの値1つから成る。N は、対象のウィンドウやピクスマップで使われているビット・プレーンの数である(即ち、N は同ウィンドウや同ピクスマップの深さ(depth)である)。ウィンドウのピクセル値は、カラーマップ内の索引として機能し、実際に表示する色を取り出すのに使われる。
ピクスマップは3次元のビット配列である。けれども、通常はピクスマップを「ピクセルの2次元の配列」と見做し、「各ピクセルは 0 から 2N - 1 までの値を取ることができる」ものと考える。ここでの N は同ピクスマップの深さ(z 軸)である。また、ピクスマップは、ビットマップが N 枚積み重なったものと考えることもできる。
「ピクスマップやウィンドウはビットマップが積み重なったものである」と考えるとき、1枚1枚のビットマップをプレーンあるいはビット・プレーン(bit plane)と呼ぶ。
グラフィクス操作においては、デスティネーション(destination)のビット・プレーンの一部にしか影響を与えないように制限をかけることができる。プレーン・マスクは、どのプレーンを変更するべきなのかを示すビット・マスクである。プレーン・マスクはグラフィクス・コンテクストに格納される。
ポインタとは、カーソルに結び付けられ、スクリーン上の位置を追跡されるポインティング・デバイスのことである。
クライアントは、ポインタの制御を能動的に(actively)占有することができる。その場合、ボタン・イベントとモーション・イベント(移動のイベント)は、通常であれば同イベントが送られるはずであったクライアントではなく、ポインタ制御を能動的に占有しているクライントへ送られることになる。
ポインティング・デバイスとは、一般的には、マウスやタブレットなど、面の移動を効率的に行えるデバイスのことである。コア・プロトコルでは可視のカーソルは1つしか定義していない。このカーソルは、ポインタとして接続されたポインティング・デバイスであれば何であれ、その位置を追跡する。
グラフィクス・プリミティブに同じ。
ウィンドウは、自身に紐付けられたプロパティを持つことができる。プロパティは、名前、型、データ形式(format)、及びデータで構成される。本プロトコルにおいては、プロパティの解釈は一切行わない。プロパティは、クライアントのための汎用の命名機構として作られた。例えば、クライアントはプロパティを用いてサイズ変更に関するヒントやプログラム名、アイコンの形式などの情報をウィンドウ・マネージャと共有することができるであろう。
あるウィンドウのプロパティ・リストとは、同ウィンドウに紐付けて定義されているプロパティ群の目録のことである。
PseudoColor は、カラーマップのクラスの1つである。このクラスにおいては、ピクセル値はカラーマップ内の索引として機能し、赤、緑、青の値を取り出すのに使われるのだが、この赤、緑、青の値は互いに独立している。言い換えると、このカラーマップは3つの値の組(triple)の配列と見ることができる。RGB 値は動的に変更することができる。
ウィンドウ・マネージャ(あるいはクライアント・プログラム)は、さまざまな様式のウィンドウ配置方針を実施しようとするであろう。クライアントがウィンドウのサイズや位置の変更を試みる場合、その操作は実際には行われず、同操作命令はリダイレクト制御によって指定されたクライント(訳註:大抵はウィンドウ・マネージャ)へリダイレクト(宛て先変更)される可能性がある。
クライアント・プログラムが要求した情報は、リプライ(返答)によって同クライアントへ送り返される。イベントもリプライも同一接続上を多重送信(multiplex)される。大抵のリクエストはリプライを生成しないが、複数のリプライを生成するリクエストも存在する。
サーバに対する命令のことをリクエストと呼ぶ。リクエストは、接続を通して送られる際には、単一のデータ・ブロック(データ塊)の形をとる。
ウィンドウ、ピクスマップ、カーソル、フォント、グラフィクス・コンテクスト、及びカラーマップのことをリソースと呼ぶ。これらのリソースは全て、自身に紐付けられた一意の識別子を持つ。この識別子はリソースを特定するためのものである。あるリソースの寿命は、通常、同リソースの作成時に使用された接続の寿命を超えないものである。
赤、緑、青(RGB)の強度値を使って色を定義する。これらの値は常に 16 ビットの符号なしの数値で表され、最小強度が 0、最大強度が 65535 である。サーバは、この値をディスプレイ・ハードウェアに合うように調整(scale)する。
あるピクスマップ、カラーマップ、グラフィクス・コンテクストのルートは、同ピクスマップ、同カラーマップ、同グラフィクス・コンテクストを作成する時に使用したドローアブル(種類は問わない)のルートと同じである。あるウィンドウのルートは、同ウィンドウを作成する際に上位者として指定したルート・ウィンドウである。
各スクリーンは、自身を残さず覆う(cover)ルート・ウィンドウを1つ持つ。ルート・ウィンドウは、再構成(位置や大きさの変更)できず、アンマップもできないが、他の機能については普通のウィンドウと変わらない振る舞いをする。ルート・ウィンドウは親を持たない。
あるクライアントのセーブ・セットとは、他のクライント群のウィンドウ群のリスト(目録)のことである。但し、ここにいう「他のクライント群のウィンドウ群」とは、セーブ・セットを持つクライアントが接続を閉じる時点において、同クライアントが持つウィンドウ群のいづれかの子孫であったならば(この時点では)破棄するべきではないウィンドウ群であって、且つ現在アンマップされているならば(この時点で)再びマップするべきであるようなウィンドウ群のことをいう。セーブ・セットは通常、ウィンドウ・マネージャが異常終了した場合にウィンドウ群が消失するのを避けるため、ウィンドウ・マネージャによって使用される。
走査線とは、ピクセル値やビット値のリスト(配列)であって、画像中の水平の1行(全ての値の y 座標が等しい)と見做すことができるもののことである。このリスト(配列)においては、各値は x 座標に関して昇順(小さいものが前)に並んでいる。
ある画像が y 座標に関して昇順(小さいものが先)に並んだ複数の走査線によって構成されている場合、その画像は「走査線順」で表されているという。
サーバは、複数の独立したスクリーンを備えることができ、通常、そのようなスクリーンは物理的に独立したモニターを持つ。1つのキーボードと1つのポインタを複数のスクリーンで共有する場合、実際、そうした構成になるであろう。
セレクションは、動的な型を持つ間接的なプロパティであると考えることができる。すなわち、プロパティは、サーバに格納されるのではなく、あるクライント(「所有者」)によって保持される。セレクションは、グローバルな(大域的な)性質を持ち、ユーザに属するものと見做される(実際はクライアントが保持しているのであるが)。特定のウィンドウ階層や特定のクライアント群の私物(being private)ではない。クライアントは、セレクションの内容を取得しようとする時は、セレクションの「ターゲット型」(target type)を指定する。このターゲット型を使えば、セレクションの内容をどのような表現形式で伝送するのかを制御することができる。例えば、セレクションが「ユーザが最後にクリックしたもの」であり、現在それが画像である場合、画像の内容を XY フォーマットで送信するのかそれとも Z フォーマットで送信するのかを、ターゲット型を使って指定することができる。また、ターゲット型を使えば、伝送する内容のクラス(class、種類)を制御することもできる。例えば、文章の一段落を内容として持つセレクションに関して、そのテキストではなく「見た目」(looks)(フォント、行間、行頭の字下げ等)を要求することができる。ターゲット型はその他の目的にも使用できる。本プロトコルでは、ターゲット型の意味(semantics)に制約を設けていない。
サーバは、基本的なウィンドウ機構を提供する。サーバは、クライアントからの「接続」を管理し、グラフィクス出力を各スクリーンへ向けて多重送信し、入力を逆多重化(多重分離、選り分け)して適切なクライアントへ送り返す。
サーバは、単一のクライアントがこれを占有し排他的に使用することができる。この占有によって、同占有が終了するまでの間、他のクライアント接続からのリクエストの処理は止められる。これは通常、ラバー・バンディング(rubber-banding:訳註:ウィンドウ・マネージャはラバー・バンディングという技法を使って、移動中あるいはサイズ変更中のウィンドウの輪郭(の軌跡)を表示することができる)、ポップアップ・メニュー、あるいは不可分のリクエストの処理などのための一時的な状態にすぎない。
親ウィンドウを同じくする子供のことを兄弟ウィンドウと呼ぶ。
兄弟ウィンドウは、互いの上に重なることができる。他のウィンドウの上にあるウィンドウは、下にあるウィンドウを隠す(obscure)と同時に覆う(occlude)。これは机の上の(重なっている)紙に似ている。兄弟ウィンドウ間のこのような関係のことを「重ね順」と呼ぶ。
StaticColor は、PseudoColor の特別な場合(退化した場合)と考えることができる。StaticColor では、各 RGB 値は既定であり読み込み専用である。
StaticGray は、GrayScale の特別な場合(退化した場合)と考えることができる。StaticGray では、灰色の各値は既定であり読み込み専用である。灰色の各値は通常、線型もしくは線型に近い傾斜で増減する。
スティプル・パターンとは、クリップ・マスクとして機能する領域をタイルする(タイルして作成する)のに使うビットマップのことである。このクリップ・マスクは、「前景色」を使って塗りつぶす操作において、追加のクリップ・マスクとして使用する。
2つの ISO Latin-1 STRING8 の値は、次の場合に等しいと見做す。即ち、両者の長さが同じで、且つ対応するバイト群の値が等しいか若しくは以下のように等価である場合である。バイト値が等価のものを挙げていくと、10進値 65 から 90 (境界を含む:文字「A」から「Z」)はそれぞれ、10進値 97 から 122 (境界を含む:文字「a」から「z」)と等価であり、10進値 192 から 214 (境界を含む:「A grave」(À)から「O diaeresis」(Ö))はそれぞれ、10進値 224 から 246 (境界を含む:「a grave」(à)から「o diaeresis」(ö))と等価であり、そして10進値 216 から 222 (境界を含む:文字「O oblique」(Ø)から「THORN」(Þ))はそれぞれ、10進値 246 から 254 (境界を含む:文字「o oblique」(ø)から「thorn」(þ))と等価である。
ピクスマップを平面に敷き詰めるように複製描画することで、領域をタイルすることができる。この時に用いるピクスマップそのものをタイルと呼ぶこともある。
タイムスタンプは、ミリ秒で表される時間値である。これは通常、サーバが最後にリセットした時からの時間である。タイムスタンプの値は周期的であり、49.7 日で元に戻る。サーバの現在の時刻をタイムスタンプ T で表すとすると、サーバは、クライアントから受け取ったタイムスタンプを解釈するにあたっては常に、タイムスタンプ空間の半分を T より早い時刻として扱い、もう半分を T より遅い時刻として扱う。1つだけサーバが生成するのではないタイムスタンプ値(定数 CurrentTime)が存在する。この値は、リクエストにおいてサーバの現在の時刻を指定するのに使用するため、予約されている。
TrueColor は、DirectColor の特別な場合(退化した場合)と考えることができる。TrueColor では、ピクセル値の各サブフィールドの符号は、それぞれ対応する RGB 値を直接表す。つまり、この場合のカラーマップの RGB 値は、既定であり読み込み専用である。この RGB 値は通常、線型もしくは線型に近い傾斜で増減する。
型とは、プロパティのデータの解釈を一意に定めるために使用する任意のアトムのことである。サーバは型の解釈は一切行わない。型は、専らクライアントのためのものである。
あるウィンドウとその祖先すべてがマップされている場合、同ウィンドウは「表示可能」であるという。これは、ウィンドウのどこかの部分が実際に可視(visible)であることを意味しない。表示可能でないウィンドウに対してもグラフィクス・リクエストを実行することはできる。けれども、サーバがバッキング・ストアを持っている場合を除いて、出力は保存されない。
あるウィンドウのある領域は、スクリーンを見る人が実際にその領域を目にすることができる場合に、「可視状態である」という。これは、同ウィンドウが表示可能(viewable)であり、且つ同領域が他のウィンドウに覆われていない(not occluded)場合にあたる。
ウィンドウのサイズを変更する場合、同ウィンドウの特定の位置を基準として、自動的に下位ウィンドウの再配置が行われることがある。下位ウィンドウをその親の特定部分に引き寄せるこの力のことを「ウィンドウ・グラヴィティ」と呼ぶ。
スクリーン上のウィンドウの操作とユーザ・インタフェイス(の方針の実施)は、通常、その大半はウィンドウ・マネージャ・クライアントが行う。
あるピクスマップのデータは、次の場合に XY 形式であるという。即ち、同データが「ビット・プレーンの1つ1つを表すビットマップの集合」という形で構成されており、各プレーンが最上位ビットから最下位ビットへ順番に姿を現す形式である場合である。
あるピクスマップのデータは、同データが走査線順に並んだピクセル値の集合として構成されている場合、Z 形式であるという。