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

33.19.9 フィールドの定義と使用

フィールドとは、バッファ内で連続する文字の範囲であり、fieldプロパティ(テキストプロパティまたはオーバーレイプロパティのいずれか)の値が同じ(eqと比較)であることで識別されます。本節では、フィールドを操作するために利用可能な特殊関数について説明します。

バッファ位置 pos を指定してフィールドを指定します。各フィールドはバッファ位置の範囲を含むものとみなされるため、指定した位置はその位置を含むフィールドを指します。

pos の前後の文字が同一フィールドに属している場合、pos がどのフィールドに含まれるかは明白です。すなわち、それらの文字が共に属しているフィールドです。pos がフィールド間の境界にある場合、それがどのフィールドに属するかは、周囲の2つの文字の field プロパティのスティッキネスによって決まります(テキストプロパティのスティッキネス を参照)。pos に挿入されるテキストがプロパティを継承するフィールドは、pos を含むフィールドとなります。

pos に新たに挿入されたテキストが、両側の field プロパティを継承しないという例外的なケースがあります。これは、直前の文字の field プロパティが後方スティッキーではなく、かつ後続の文字の field プロパティが前方スティッキーでない場合に発生します。この場合、pos は直前のフィールドにも後続のフィールドにも属さず、フィールド関数はこれを、始点と終点がともに pos である空のフィールドに属するものとして扱います。

これらの関数ではすべて、pos または nil が省略された場合、デフォルトでポイントの値が使用されます。狭めが適用されている場合、pos はアクセス可能な範囲内にある必要があります。狭め を参照してください。

関数: field-beginning &optional pos escape-from-edge limit

この関数は、pos で指定されたフィールドの先頭を返します。

pos が自身のフィールドの先頭にあり、かつ escape-from-edge が nil でない場合、pos 周辺の field プロパティのスティッキネスにかかわらず、戻り値は常に pos で終了する直前のフィールドの先頭となります。

limit が nil 以外の場合はバッファ位置となり、フィールドの先頭が limit より前にある場合は、代わりに limit が返されます。

関数: field-end &optional pos escape-from-edge limit

この関数は、pos で指定されたフィールドの終端を返します。

pos が自身のフィールドの末尾にあり、かつ escape-from-edge が nil でない場合、pos 周辺の field プロパティのスティッキネスにかかわらず、戻り値は常に pos から始まる次のフィールドの末尾となります。

limit が nil 以外の場合はバッファ位置となり、フィールドの終端が limit より後にある場合は、代わりに limit が返されます。

関数: field-string &optional pos

この関数は、pos で指定されたフィールドの内容を文字列として返します。

関数: field-string-no-properties &optional pos

この関数は、pos で指定されたフィールドの内容を、テキストプロパティを除外して文字列として返します。

関数: delete-field &optional pos

この関数は、pos で指定されたフィールドのテキストを削除します。

関数: constrain-to-field new-pos old-pos &optional escape-from-edge only-in-line inhibit-capture-property

この関数は new-pos を old-pos が属するフィールドに制約します。言い換えれば、old-pos と同じフィールド内で、new-pos に最も近い位置を返します。

new-pos が nil である場合、constrain-to-field は代わりにポイントの値を使用し、その位置を返すとともに、ポイントを結果として得られた位置に移動させます。

old-pos が2つのフィールドの境界にある場合、許容される最終位置は引数 escape-from-edge に依存します。escape-from-edge が nil である場合、new-pos は、old-pos に挿入される新しい文字が継承する field プロパティの値と等しいフィールド内になければなりません。(これは、old-pos の前後の文字における field プロパティのスティッキネスに依存します。)escape-from-edge が nil 以外である場合、new-pos は隣接する2つのフィールド内の任意の場所に配置できます。さらに、2つのフィールドが特殊な値 boundary を持つ別のフィールドによって隔てられている場合、この特殊なフィールド内の任意の点も境界上にあるものとみなされます。

引数のない C-a のようなコマンドは、通常、特定の種類の場所まで後退してそこに留まるため、escape-from-edge に対しては nil を指定すべきでしょう。フィールドを確認するその他の移動コマンドについても、t を渡すのが望ましいでしょう。

オプション引数 only-in-line が nil ではなく、通常の方法で new-pos を制約すると別の行に移動してしまう場合、new-pos は制約なしで返されます。これは、next-line や beginning-of-line のように行単位で移動するコマンドにおいて、右の行へ移動可能な場合にのみフィールド境界を遵守させるために用いられます。

オプション引数 inhibit-capture-property が nil ではなく、かつ old-pos が同名の nil 以外のプロパティを持つ場合、フィールド境界はすべて無視されます。

変数 inhibit-field-text-motion に nil 以外の値をバインドすることで、constrain-to-field にすべてのフィールド境界を無視させる(つまり、一切の制約を設けない)ことができます。