GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/X-Selections.html ・ emacs-doc.conao3.com

30.23.1 X Selections

Xは、選択データや固定数の選択に対して固定のデータ型を定義することを避けている。選択はXの「アトム」によって識別され、これはXサーバーが文字列名に対して発行する一意の29ビット識別子である。この複雑さはEmacsによって隠蔽されており、Lispがアトムと同じ名前のシンボルを提供している場合、Emacsは追加の操作なしにこれらの識別子を要求する。

プログラムがXでセレクションを「設定」すると、実際にはそのプログラム自身がそのセレクションの「所有者」となります。するとXサーバーはセレクション要求をプログラムに送信し、プログラムは要求元のクライアントに対してセレクションデータで応答する必要があります。

同様に、プログラムはXサーバーから選択データを「取得」することはありません。その代わりに、選択リクエストは、最後にその選択の所有権を主張したウィンドウを持つクライアントに送信され、クライアントは要求されたデータを返すことが想定されています。

各選択リクエストには、3つのパラメータが含まれます:

セレクションの所有者は、リクエスト元に対し、一連のバイト、16ビットワード、または32ビットワードと、それらのワードの型を識別する別のアトムを転送することで応答します。セレクションをリクエストした後、Emacsはデータ形式とデータ型に対する独自の解釈を適用し、セレクションの所有者から転送されたデータをLisp表現に変換して返します。gui-get-selection

Emacsは、任意のバイト列からなる選択データを、それらのバイトを保持するユニバイト文字列に変換します。単一の16ビットまたは32ビットワードからなる場合は符号なし数値として、複数のそのようなワードからなる場合は符号なし数値のベクトルとして表現されます。この一般的なパターンの例外として、Emacsは以下の変換対象からのデータに対して特別な処理を適用します:

INTEGER

この型の16ビットまたは32ビットワードは、符号なし整数ではなく符号付き整数として扱われます。選択データに複数のワードがある場合はベクトルが返され、そうでない場合は整数単体が返されます。

ATOM

この型の32ビットワードはX原子として扱われ、特定する名称のLispシンボルとして(単独で、あるいはベクトルとして)返されます。無効な原子はnilに置き換えられます。

COMPOUND_TEXT
UTF8_STRING
STRING

これらのデータ型のリクエストから派生したユニバイト文字列には、選択データの型に設定された単一の foreign-selection テキストプロパティが配置されます。

各セレクションオーナーは、少なくとも2つのセレクションターゲットを返さなければなりません。一つは、オーナーがサポートするセレクションターゲットを記述するアトムの数を返すTARGETSであり、もう一つはXクライアントが内部用途に使用するMULTIPLEです。セレクションオーナーは任意の数の他のターゲットをサポートでき、その一部はX ConsortiumのInter-Client Communication Conventions Manualによって標準化されている場合があります。一方で、UTF8_STRINGのようにXFree86 Projectによって標準化される予定であったものの、その標準化が完了しなかったものもあります。

特定の選択ターゲットに対するリクエストは、慣例として特定の型のデータを返す場合もあれば、選択オーナーにとって最も都合の良い複数の型のいずれかのデータを返す場合もある。後者のタイプの選択ターゲットは、ポリモーフィックターゲットと呼ばれる。リクエストへの応答として、選択ターゲットがデータを一切返さないこともあり、その場合、選択オーナーは副作用として何らかのアクションを実行する。このように応答されるターゲットは、副作用ターゲットと呼ばれる。

以下に、CLIPBOARD、PRIMARY、またはSECONDARYの選択項目からリクエストした際に、概ね標準に準拠した挙動を示す選択対象をいくつか挙げます。

ADOBE_PORTABLE_DOCUMENT_FORMAT

このターゲットは、Adobe Systemsの「Portable Document Format」形式のデータを文字列として返します。

APPLE_PICT

このターゲットは、Macintoshコンピュータで使用される「PICT」画像形式のデータを文字列として返します。

BACKGROUND
BITMAP
COLORMAP
FOREGROUND

これら4つのターゲットを合わせることで、Xサーバーに格納されたビットマップ画像を利用するために必要な整数データ、すなわちビットマップの背景色のピクセル値、ビットマップのX識別子、背景と前景色が割り当てられているカラーマップ、およびビットマップの前景色のピクセル値が返されます。

CHARACTER_POSITION

このターゲットは、それを格納するテキストフィールド内における選択データの開始位置と終了位置をバイト単位で表す、SPAN型の符号なし32ビット整数2つを返します。

COMPOUND_TEXT

このターゲットは、X Consortiumのマルチバイトテキストエンコーディングシステムにおいて、COMPOUND_TEXT型の文字列を返します。

DELETE

このターゲットは何も返しませんが、副作用として、選択内容を含むすべてのテキストフィールドからその内容を削除します。

DRAWABLE
PIXMAP

このターゲットは、Xサーバーの描画可能オブジェクトまたはピクマップに対応する、符号なし32ビット整数のリストを返します。

ENCAPSULATED_POSTSCRIPT
_ADOBE_EPS

このターゲットは、カプセル化されたPostScriptコードを含む文字列を返します。

FILE_NAME

このターゲットは、1つ以上のファイル名をNULL文字で区切った文字列を返します。

HOST_NAME

このターゲットは、選択オーナーが動作しているマシンの完全修飾ドメイン名を含む文字列を返します。

USER

このターゲットは、選択オーナーが動作しているマシンのユーザー名を含む文字列を返します。

LENGTH

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

LINE_NUMBER

このターゲットは、それを格納するテキストフィールド内の選択データの開始位置および終了位置に対応する行番号を示す、SPAN型の符号なし32ビット整数を2つ返します。

MODULE

このターゲットは、選択データを含む任意の関数名を返します。主にテキストエディタから利用されます。

STRING

このターゲットは、選択データをISO Latin-1形式でエンコードし、Unix形式の改行文字を含むSTRING型の文字列として返します。

C_STRING

このターゲットは、選択データを「C文字列」として返します。これは、所有者が使用しているエンコーディングによる生の選択データ(NULLバイトで終端されているか否かを問わず)、あるいは終端されているか否かを問わないASCII文字列である、と解釈されてきました。

UTF8_STRING

これにより、選択データがUTF-8でエンコードされ、EOL形式が未指定のUTF8_STRING型の文字列として返されます。

TIMESTAMP

このターゲットは、セレクションの所有者が所有権を取得した時点のXサーバー時刻を、CARDINAL型の16ビットまたは32ビットワードとして返します。

TEXT

このポリモーフィックなターゲットは、選択オーナーにとって都合の良いデータ型に応じて、COMPOUND_TEXT、STRING、C_STRING、またはUTF8_STRINGのいずれかの文字列として選択データを返します。

関数 gui-get-selection を用いてターゲット STRING、COMPOUND_TEXT、または UTF8_STRING のリクエストが行われ、かつ selection-coding-system も next-selection-coding-system も設定されていない場合、生成された文字列は、それぞれのターゲットに対応する適切な符号化方式(iso-8859-1、compound-text-with-extensions、utf-8)でデコードされます。

上述のターゲット(および各種プログラムが独自の目的で利用している数多くのターゲット)に加え、いくつかの普及しているプログラムやツールキットは、適切なX標準策定機関に諮ることなく、独自の選択データ型を定義しています。これらのターゲットは一般に text/html や image/jpeg といったMIMEタイプにちなんで命名されており、以下のような形式のデータを返すことが確認されています。

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

Emacsは選択範囲のオーナーとなることもできます。gui-set-selectionが呼び出されると、提供された選択範囲のデータが内部的に記録され、Emacsは設定対象の選択範囲の所有権を取得します。

変数: selection-converter-alist

「選択コンバータ」関数への選択対象の一覧。選択リクエストを受信すると、Emacsは要求された選択対象に対応する選択コンバータを参照します。

選択コンバータは、要求される選択を識別するアトムに対応するシンボル、要求される選択対象、およびgui-set-selectionで設定された値という3つの引数で呼び出されます。返すべき値は、データ型と数値を指定するシンボル、シンボル、数値またはシンボルのベクトル、あるいはそれらのコンス自体のcdrのいずれかとなります。

選択コンバータの値が特殊記号 NULL の場合、リクエスト元に返されるデータ型は NULL に設定され、応答としてデータは送信されません。

このような値が文字列である場合、それはユニバイト文字列でなければなりません。データ型が明示的に指定されていない場合、データはタイプ STRING として要求元に転送されます。

シンボルである場合は、その「アトム」が取得され、リクエスト元に32ビット値として転送されます――データ型が指定されていない場合、その型はATOMとなります。

-32769から32768までの数値である場合、リクエスト元に16ビット値として転送されます。データ型が指定されていない場合、その型はINTEGERとなります。

それ以外の数値の場合は、32ビット値として扱われます。返される数値が符号なしであっても、要求元はINTEGER型のワードを符号付きとして扱います。符号なし値を返すには、代わりにCARDINAL型を指定してください。

記号や数値のベクトルである場合、その要求元への応答は、複数のアトムまたは数値のリストとなります。明示的に設定されていない場合に返されるデータ型は、リストの最初の要素の型となります。

デフォルトでは、Emacsは以下の選択対象に対して選択コンバータが設定されています。

TEXT

この選択コンバータは、選択データを以下のように返します:

  • 選択内容にマルチバイト文字が含まれていないか、あるいは「生の8ビットバイト」が含まれている場合の C_STRING 型の文字列(テキスト表現を参照)。
  • 選択内容をISO-Latin-1テキストで表現できる場合の、STRING型の文字列。
  • 選択内容を X Consortium の Compound Text Encoding でエンコードできる場合は COMPOUND_TEXT 型の文字列を、:mime-charset プロパティが x-ctext である符号化方式が selection-coding-system または next-selection-coding-system に設定されている場合はその方式を使用します。
  • それ以外の場合は、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が認識する各セレクション対象に対応するアトムのリストを返します。

MULTIPLE

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

LENGTH

この選択コンバータは、選択データの長さをバイト単位で返します。

DELETE

この選択コンバータは、ドラッグ&ドロップ操作時の内部処理に使用されます。

FILE_NAME

この選択コンバータは、選択データを含むバッファのファイル名を返します。

CHARACTER_POSITION

この選択コンバータは、選択データを含むバッファ内における、選択範囲の両端の文字位置を返します。

LINE_NUMBER
COLUMN_NUMBER

この選択範囲コンバータは、選択範囲データを含むバッファ内における、選択範囲の両端の行番号と列番号を返します。

OWNER_OS

この選択コンバータは、Emacsが動作しているオペレーティングシステムの名前を返します。

HOST_NAME

このセレクタコンバータは、Emacsが動作しているマシンの完全修飾ドメイン名を返します。

USER

この選択コンバータは、Emacsが動作しているユーザーアカウントのユーザー名を返します。

CLASS
NAME

これらの選択コンバータは、Emacsで使用されるリソースクラスと名称を返します。

INTEGER

この選択コンバータは、整数値をそのまま返します。

SAVE_TARGETS
_EMACS_INTERNAL

これらの選択変換器は、内部用途に使用されます。

INTEGERを除き、すべての選択コンバータは、gui-set-selectionに提供されるデータが以下のいずれかであることを想定しています。