フィールドとは、バッファ内で連続する文字の範囲であり、fieldプロパティ(テキストプロパティまたはオーバーレイプロパティのいずれか)の値が同じ(eqと比較)であることで識別されます。本節では、フィールドを操作するために利用可能な特殊関数について説明します。
バッファ位置 pos を指定してフィールドを指定します。各フィールドはバッファ位置の範囲を含むものとみなされるため、指定した位置はその位置を含むフィールドを指します。
pos の前後の文字が同一フィールドに属している場合、pos
がどのフィールドに含まれるかは明白です。すなわち、それらの文字が共に属しているフィールドです。pos
がフィールド間の境界にある場合、それがどのフィールドに属するかは、周囲の2つの文字の field
プロパティのスティッキネスによって決まります(テキストプロパティのスティッキネス を参照)。pos に挿入されるテキストがプロパティを継承するフィールドは、pos
を含むフィールドとなります。
pos に新たに挿入されたテキストが、両側の field プロパティを継承しないという例外的なケースがあります。これは、直前の文字の field プロパティが後方スティッキーではなく、かつ後続の文字の field プロパティが前方スティッキーでない場合に発生します。この場合、pos は直前のフィールドにも後続のフィールドにも属さず、フィールド関数はこれを、始点と終点がともに pos である空のフィールドに属するものとして扱います。
これらの関数ではすべて、pos または nil
が省略された場合、デフォルトでポイントの値が使用されます。狭めが適用されている場合、pos
はアクセス可能な範囲内にある必要があります。狭め
を参照してください。
この関数は、pos で指定されたフィールドの先頭を返します。
pos が自身のフィールドの先頭にあり、かつ escape-from-edge が nil
でない場合、pos 周辺の field
プロパティのスティッキネスにかかわらず、戻り値は常に pos で終了する直前のフィールドの先頭となります。
limit が nil
以外の場合はバッファ位置となり、フィールドの先頭が limit より前にある場合は、代わりに limit が返されます。
この関数は、pos で指定されたフィールドの終端を返します。
pos が自身のフィールドの末尾にあり、かつ escape-from-edge が nil
でない場合、pos 周辺の field
プロパティのスティッキネスにかかわらず、戻り値は常に pos から始まる次のフィールドの末尾となります。
limit が nil
以外の場合はバッファ位置となり、フィールドの終端が limit より後にある場合は、代わりに limit が返されます。
この関数は、pos で指定されたフィールドの内容を文字列として返します。
この関数は、pos で指定されたフィールドの内容を、テキストプロパティを除外して文字列として返します。
この関数は、pos で指定されたフィールドのテキストを削除します。
この関数は 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
にすべてのフィールド境界を無視させる(つまり、一切の制約を設けない)ことができます。