Next: , Up: 選択へのアクセス   [Contents][Index]


30.22.1 X選択

Xは選択データにたいする固定化されたデータタイプの定義と選択の個数の固定化を控えてきました。選択は文字列名にたいしてXサーバーが発行する29ビットの一意な識別子である、Xの“アトム(atom)”によって識別されます。この複雑さはEmacsにより隠蔽されています。アトムの名前と同じ名前のシンボルをLispが提供すると、Emacsはそれ以上の介入を行わずにそれらの識別子を要求するのです。

Xであるプログラムが選択を“セット”したとき、Xは実際にはそのプログラムを選択の“オーナー(owner: 所有者)”にします。それからXサーバーがプログラムに選択リクエストを送信します。プログラムは選択データを要求したクライアントに応答する義務があります。

同様にプログラムがXサーバーから選択データを“ゲット”するのではなく、プログラムの選択リクエストはその選択にたいして最後に所有権を表明したウィンドウとともに、データへのリクエストにたいして応答が期待されるクライアントに送信されるのです。

選択にたいするリクエストにはそれぞれ3つのパラメーターが組み込まれています:

選択の所有者は一連のバイト、32ビットワード、およびそれらのワードタイプを識別する別のアトムをリクエスターに転送することによって応答を行います。選択のリクエスト後に、選択の所有者が転送したデータをLisp表現(gui-get-selectionがリターン)に変換するために、Emacsがデータフォーマットとデータタイプに独自の解釈を適用します。

Emacsは一連の任意のバイトから構成される選択データを、それらのバイトを保持するユニバイト文字列に変換します。このユニバイト文字列は符号なし数値として単一の16ビットまたは32ビットのワードから構成され、さらに符号なし数値のベクターとして複数のそのようなワードから構成されます。この一般的なパターンの例外として、以下の変換ターゲットからのデータにたいして、Emacsは特別な扱いをほどこします:

INTEGER

このタイプの16ビットまたは32ビットのワードは、符号なし整数ではなく符号つき整数として扱われる。選択データに複数のワードがあればベクター、それ以外はその整数自体をリターンする。

ATOM

このタイプの32ビットのワードはXアトムとして扱われて、その名前がアトムを識別するようなLispシンボル(単独またはベクター)としてリターンされる。無効なアトムはnilに置き換えられる。

COMPOUND_TEXT
UTF8_STRING
STRING

選択データのタイプにセットされた単一のforeign-selectionテキストプロパティは、それらのデータタイプへのリクエストを継承するユニバイト文字列に配置される。

選択の所有者はそれぞれ少なくとも2つの選択ターゲットをリターンしなければなりません。1つ目はその所有者がサポートする選択データを記述するアトムの個数であるTARGETS、2つ目は内部的な目的のためにXクライアントが使用するMULTIPLEです。選択の所有者は任意の個数の他のターゲットをサポートでき、それらの一部はXコンソーシアム(Inter-Client Communication Conventions Manual)によって標準化されているかもしれないし、他のUTF8_STRINGのようなターゲットについてはXFree86プロジェクトによって標準化されるはずでした(しかしその標準化が完了することはなかった)。

慣例により特定の選択ターゲットへのリクエストは特定のタイプ、あるいはいくつかのタイプのいずれか(選択の所有者にとって一番都合がいいタイプ)がリターンされるかもしれません。後者の選択ターゲットのタイプについてはポリモーフィックターゲット(polymorphic target: 多様ターゲット)と呼ばれています。あるリクエストへの応答において0,選択ターゲットがデータを何もリターンしないこともあり得ます。その後に副作用として選択の所有者は何らかのアクションを実行します。したがってこのように応答されるターゲットは副作用ターゲット(side-effect targets)と呼ばれます。

以下はCLIPBOARDPRIMARYSECONDARYのターゲットからのリクエスト時には標準とおおむね一貫性のある挙動を示す選択ターゲットの一部です。

ADOBE_PORTABLE_DOCUMENT_FORMAT

このターゲットはAdobe Systemの“PDF(Portable Document Format)”のフォーマットのデータを文字列としてリターンする。

APPLE_PICT

このターゲットはMacintoshコンピューターで用いられている“PICT”イメージフォーマットのデータを文字列としてリターンする。

BACKGROUND
BITMAP
COLORMAP
FOREGROUND

これらビットマップのバックグラウンドカラーのピクセル値、ビットマップのX識別子、バックグラウンドとフォアグラウンドが割り当てられたカラーマップ、ビットマップのフォアグラウンドカラーのピクセル値という4つのターゲットは、組み合わせられてXサーバーに格納されたビットマップイメージを使用するために必要な整数をリターンする。

CHARACTER_POSITION

このターゲットは選択データを含むテキストフィールドで選択データの開始と終了の位置(単位はバイト)を記述するタイプSPANの2つの32ビット符号なし整数をリターンする。

COMPOUND_TEXT

このターゲットはXコンソーシアムのマルチバイトエンコーディングシステムのタイプCOMPOUND_TEXTの文字列をリターンする。

DELETE

このターゲットは何もリターンしないが、副作用として選択を含んだテキストフィールドから選択のコンテンツを削除する。

DRAWABLE
PIXMAP

このターゲットはそれぞれがXサーバーのdrawableかpixmapに相当する符号なし32ビット整数のリストをリターンする。

ENCAPSULATED_POSTSCRIPT
_ADOBE_EPS

このターゲットはEPS(Encapsulated Postscript)のコードを含む文字列をリターンする。

FILE_NAME

このターゲットはNULL文字で区切られた1つ以上のファイル名を含む文字列をリターンする。

HOST_NAME

このターゲットは選択の所有者が実行されているマシンのFQDN(Fully-Qualified Domain Name: 完全修飾ドメイン名)を含む文字列をリターンする。

USER

このターゲットは選択の所有者が実行されているマシンのユーザー名を含む文字列をリターンする。

LENGTH

。このターゲットは選択データの長さを含む32ビットまたは16ビットの符号なし整数をリターンする。

LINE_NUMBER

このターゲットは選択データを含むテキストフィールド内における選択データの開始と終了の位置に相当する行番号を記述するタイプSPANの2つの32ビット符号なし整数をリターンする。

MODULE

このターゲットは選択データを含むすべての関数の名前をリターンする。主にテキストエディターによってリクエストされる。

STRING

このターゲットは選択データをISO Latin-1フォーマット、Unix改行のタイプSTRINGの文字列としてリターンする。

C_STRING

このターゲットは選択データを“C文字列”としてリターンする。これは何であれ所有者が用いているエンコーディングによるNULL終端された、あるいはまったく終端されていない、または終端されているいないに関わらずASCII文字列のいずれかであるようなraw選択データを意味すると解釈される。

UTF8_STRING

これは選択データをUTF-8,でエンコードされたEOLフォーマット未指定のタイプUTF8_STRINGの文字列としてリターンする。

TIMESTAMP

このターゲットは選択にたいして所有者が所有権を得た際のXサーバータイムスタンプを16ビットまたは32ビットのタイプCARDINALのワードとしてリターンする。

TEXT

このポリモーフィックターゲットは選択データをCOMPOUND_TEXTSTRINGC_STRINGUTF8_STRINGのいずれかから何であれ選択の所有者にとって都合がいいデータタイプの文字列としてとしてリターンする。

selection-coding-systemおよびnext-selection-coding-systemがどちらもセットされておらず関数gui-get-selectionを用いてターゲットSTRINGCOMPOUND_TEXTUTF8_STRINGへのリクエストを作成すると結果となる文字列はそれぞれiso-8859-1compound-text-with-extensionsutf-8という正しいコーディングシステムによってデコードされます。

上述のターゲット(およびさまざまなプログラムが独自の用途に用いる多くのターゲット)に加えて、いくつかの著名なプログラムやツールキットが適切なX標準化団体との対話なしで独自に選択データタイプを定義しています。これらのターゲットは一般的にtext/htmlimage/jpegのようなMIMEタイプに習って命名されており、以下のデータ形式をリターンすることが目撃されてきました:

これらの選択ターゲットを最初に使用したのはNetscapeでしたが、現在ではあらゆる種類のプログラムが提供しており、それらは特にGTK+またはQtツールキットの最近のバージョンにもとづいています。

Emacsには選択の所有者としての役割りを果たす能力もあります。gui-set-selectionが呼び出されると提供される選択データは内部的に記録されて、Emacsはセットされる選択の所有権を取得します。

Variable: selection-converter-alist

選択ターゲットから“選択コンバーター(selection converter)”となる関数へのalist。選択リクエストを受信すると、Emacsはリクエストされた選択ターゲットに関連する選択コンバーターを検索する。

選択コンバーターはリクエストされた選択を識別するアトムに相当するシンボル、リクエストされた選択ターゲット、gui-set-selectionでセットする値という3つの引数で呼び出される。選択コンバーターはデータタイプと個数を示すシンボルのコンス、シンボル、数値かシンボルのベクター、またはそのようなコンスのcdrのいずれかをリターンしなければならない。

選択コンバーターの値が特別なシンボルNULLの場合にはリクエスターにリターンされるデータタイプはNULLにセットされて、応答には何のデータも送信されない。

値が文字列の場合には、ユニバイト文字列でなければならない。データタイプを明示的に指定しなければ、リクエスターにはタイプSTRINGでデータは転送される。

値がシンボルならその値の“アトム”が取得されて、リクエスターには32ビット値(データタイプが指定されていなければタイプはATOM)として転送される。

-32769から32768の間の数値の場合には、リクエスターには16ビット値(データタイプが指定されていなければタイプはINTEGER)として転送される。

上記以外の数値なら32ビット値とみなされる。たとえ符号なしの数値がリターンされても、リクエスターがタイプINTEGERのワードを符号つきとして扱うだろう。符号なしの値をリターンするには、そこでタイプCARDINALを指定すること。

値がシンボルか数値のベクターの場合には、リクエスターへの応答は複数のアトムか数値からなるリストになる。リターンされるデータタイプが明示的に指定されていなければ、リストの最初の要素のデータタイプ。

デフォルトでは、Emacsは以下の選択ターゲットにたいしてセコンバーターを構成します:

TEXT

この選択コンバーターは以下のように選択データをリターンする:

  • 選択コンテンツがマルチバイトを含まない、あるいは“8ビットrawバイトバイト”(テキストの表現方法を参照)を含む場合にはタイプC_STRINGの文字列。
  • 選択コンテンツがISO-Latin-1テキストとして表現可能ならタイプSTRINGの文字列。
  • 選択コンテンツがXコンソーシアムのCompound Text Encodingでエンコードでき、selection-coding-systemnext-selection-coding-system:mime-charsetプロパティにx-ctextをもつコーディングシステムにセットされていれば、タイプCOMPOUND_TEXTの文字列。
  • 上記以外ならタイプUTF8_STRINGの文字列。
COMPOUND_TEXT

この選択コンバーターは選択データをタイプCOMPOUND_TEXTの文字列としてリターンする。

STRING

この選択コンバーターは選択データをISO-Latin-1フォーマットでエンコードされたタイプSTRINGの文字列としてリターンする。

UTF8_STRING

この選択コンバーターは選択データをUTF-8フォーマットでリターンする。

text/plain
text/plain;charset=utf-8
text/uri-list
text/x-xdnd-username
XmTRANSFER_SUCCESS
XmTRANSFER_FAILURE
FILE
_DT_NETFILE

これらはドラッグアンドドロップ操作中に内部の用途にたいして使用される選択コンバーターであり、XdndSelection以外の選択にたいしては利用できない。

TARGETS

この選択コンバーターは、Emacsが理解できる選択ターゲットごとに1つずつアトムのリストをリターンする。

MULTIPLE

この選択コンバーターはCコードで実装されており、同時に複数の選択ターゲットを指定する選択リクエストの転送を効果的に実装するために用いられる。

LENGTH

この選択コンバーターは選択データの長さをバイト単位でリターンする。

DELETE

この選択コンバーターはドラッグアンドドロップ操作中に内部的な用途のために使用される。

FILE_NAME

この選択コンバーターは選択データを含むバッファーのファイル名をリターンする。

CHARACTER_POSITION

この選択コンバーターは選択データを含むバッファー内の選択の終了それぞれの文字位置をリターンする。

LINE_NUMBER
COLUMN_NUMBER

この選択コンバーターは選択データを含むバッファー内の選択の終了それぞれの行番号、または列番号をリターンする。

OWNER_OS

この選択コンバーターはEmacsを実行中のオペレーティングシステムの名前をリターンする。

HOST_NAME

この選択コンバーターはEmacsを実行中のマシンのFQDN(完全修飾ドメイン名)をリターンする。

USER

この選択コンバーターは実行中のEmacsのユーザーアカウントのユーザー名をリターンする。

CLASS
NAME

この選択コンバーターはEmacsが使用しているリソースのクラスまたは名前をリターンする。

INTEGER

この選択コンバーター文字通り整数値をリターンする。

SAVE_TARGETS
_EMACS_INTERNAL

これらの選択コンバーターは内部的な用途のために用いられる。

INTEGERを除いたすべての選択コンバーターは次のいずれかのデータがgui-set-selectionに提供されることを期待します:


Next: その他の選択, Up: 選択へのアクセス   [Contents][Index]

This page has generated for branch:emacs-30, commit:ab5505a8acf795c0a0a2745dd6fb666954c6a4bb to check Japanese translation.