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

30.23.2 その他の選択

MS-Windows、Nextstep、Haiku、Androidといったウィンドウシステムにおける選択は、Xにおけるものとは整合していません。これらのウィンドウシステムはそれぞれ、前節で説明した「選択コンバータ」機構を用いることなく、独自の選択機構を実装しています。一般的にサポートされているのはPRIMARY、CLIPBOARD、SECONDARYの選択のみですが、ドラッグ&ドロップデータを記録するXdndSelectionの選択は、NextstepおよびHaikuでも利用可能です。

GTKはXのセレクションシステムのエミュレーションを目指していますが、そのエミュレーションは完全に信頼できるわけではなく、全体的な品質は使用されるGDKバックエンドに依存します。そのため、PGTKでビルドしたEmacsは、XでビルドしたEmacsと同じセレクションインターフェースを提供しますが、多くのセレクションターゲットは有用ではありません。

クリップボードは存在しますが、MS-Windowsオペレーティングシステムにはプライマリ選択やセカンダリ選択という概念はありません。このシステムにおいて、Emacsはプライマリ選択とセカンダリ選択があるかのように動作し、要求に応じてクリップボードへの保存および取得を行います。

一次および二次選択のシミュレーションは、該当する選択を指定するシンボルの x-selections プロパティ(すなわち gui-get-selection の type 引数)内に gui-set-selection に渡された値を保存することで行われます。その後の gui-get-selection への各呼び出しでは、順次その値が返されますが、この値はさらなる検証(型チェックなど)の対象とはなりません。このような状況下では、通常 data-type 引数は無視されます。(ただし、TARGETS に関する補足については後述します。)

クリップボードの選択に関しては(type が CLIPBOARD である場合はいつでも)、gui-set-selection は指定された値が文字列であることを検証し、selection-coding-system で設定された符号化方式によって符号化された後、システムクリップボードに保存します。gui-get-selection の呼び出し元は、data-type を STRING または TARGETS のいずれかに設定する必要があります。

gui-get-selectionの呼び出しにおいてdata-typeにTARGETSが設定されている場合、Xと同様に、選択データが存在するときにはシンボルのベクトルが返されます。前提となるデータ変換ルーチンが存在しないため、STRING以外の形式でクリップボードデータを要求することは不可能です。クリップボードに保存された文字列がselection-coding-systemによってエンコードされるのと同様に、クリップボードから読み出される文字列も同じ符号化方式によってデコードされます。選択テキストをクリップボードに保存する際に問題が生じた場合、この変数およびその関連変数であるnext-selection-coding-systemについては、特に注意深く確認する必要があります。

All three selections standard in X exist in Nextstep as well, but Emacs is only capable of saving strings to such selections. Restrictions imposed upon calls to gui-set-selection there are much the same as those on MS-Windows, though text is uniformly encoded as utf-8-unix without regard to the value of selection-coding-system. gui-get-selection is more charitable, and accepts requests for the following selection targets:

XdndSelection の選択項目は Nextstep においても、gui-set-selection に供給された値を記録するリポジトリという形で存在します。その唯一の目的は、基本的なドラッグ&ドロップ機能 x-begin-drag(ドラッグ&ドロップ を参照)のためにこうした値を保存することであり、それ以外のもので読み取られた際の値については一切保証されません。

俳句体系に関する選集には、Xで慣習となっている3つの選集すべてと、ドラッグ&ドロップデータを記録するXdndSelectionが含まれる。

前述の3つの選択に対してgui-set-selectionが呼び出されると、渡されたデータは選択エンコーダ関数群によってウィンドウサーバーの「メッセージ」に変換され、ウィンドウサーバーへと送信される。

変数: haiku-normal-selection-encoders

選択エンコーダ関数の一覧。gui-set-selection が呼び出されると、この一覧にある各関数が、selection および value 引数とともに順次呼び出される。このような関数が nil 以外の値を返す場合、その戻り値は (key type value) 形式のリストでなければならない。このリストにおいて、key は転送されるデータの名称(通常は MIME タイプ、例えば ‘"text/plain"’)である必要があり、type はデータの種類を指定する記号または数値である。これにより value の解釈も決定される。以下に、有効なデータ型の一覧と、それぞれが value の解釈にどのように影響するかを示す。

string

1バイト文字列。メッセージに格納された後、ヌル終端されます。

ref

ファイル名。ファイルは所在しており、そのファイルを識別するinodeがメッセージに格納されます。

short

16ビット整数値。

long

32ビット整数値。

llong

64ビット整数値。

byte
char

0から255までの符号なしバイト。

size_t

0から1の間の数値から、Emacsが動作しているコンピュータのワードサイズの2乗を引いた値。

ssize_t

C型 ssize_t に収まる数値。

point

画面上の座標を指定する2つの浮動小数点数の定数。

float
double

形式未指定の単精度または倍精度浮動小数点数。

(haiku-numeric-enum MIME)

特定のMIMEタイプのデータを含む1バイト文字列。

gui-get-selection への呼び出しでは、通常、選択メッセージ内の data-type という名前のデータが返されます。ただし、data-type が以下の X 選択ターゲットのいずれかに該当する場合は、別の名称に置き換えられます。

STRING

これは X における Latin-1 テキストを表します: “text/plain;charset=iso-8859-1”

UTF8_STRING

これはUTF-8テキストです:“text/plain”

data-type が STRING のようなテキスト型、あるいはパターン ‘`text/*’ に一致する MIME 型である場合、文字列データは返される前に、それに適した符号化方式でデコードされます。

さらに、2つのデータ型 TIMESTAMP と TARGETS には特別な扱いがなされており、前者で返される値はシステム起動以降に選択が変更された回数(タイムスタンプではない)であり、後者は他と同様に、利用可能な選択データ型のベクトルとなっています。

MS-Windowsと同様に、Androidでもクリップボードは提供されていますが、プライマリ選択やセカンダリ選択は用意されていません。gui-set-selectionは、入力された値を変数に保存することでプライマリ選択とセカンダリ選択をシミュレートしており、後続のgui-get-selectionの呼び出しでその結果が返されます。

クリップボードから、gui-get-selection は STRING 型の UTF-8 文字列データ、TARGETS データ型、あるいは任意の MIME タイプの画像およびアプリケーションデータを返することができます。gui-set-selection は MS-Windows と同様に文字列データのみを設定しますが、このデータは selection-coding-system の値の影響を受けません。対照的に、プライマリおよびセカンダリの選択範囲との間で保存・読み込みができるのは文字列データのみですが、このデータは Emacs 以外のプログラムには伝達されないため、いかなる符号化方式による符号化や復号の対象にもなりません。