フィールドとはバッファー内にある連続する文字範囲であり、field
プロパティ(テキストプロパティかオーバーレイプロパティ)に同じ値(eq
で比較)をもつことにより識別されます。このセクションではフィールドの操作に利用できるスペシャル関数を説明します。
フィールドはバッファー位置posで指定します。各フィールドはバッファー位置の範囲を含むと考えて、指定した位置はその位置を含むフィールドを表します。
posの前後の文字は同じフィールドに属し、どのフィールドがposを含むかという疑問はありません。それらの文字が属するフィールドがそのフィールドです。posがフィールド境界のときは、それがどのフィールドに属すかは、取り囲む2つの文字のfield
プロパティのstickinessに依存します(テキストプロパティの粘着性を参照)。posに挿入されたテキストからプロパティが継承されたフィールドがposを含むフィールドです。
posに新たに挿入されたテキストが、いずれの側からもfield
プロパティを継承しない異常なケースがあります。これは前の文字のfield
プロパティがrear-stickyでなく、後の文字のfield
プロパティがfront-stickyでもない場合に発生します。このケースではposは前後のフィールドいずれにも属しません。フィールド関数はそれを、開始と終了がposであるような空フィールドに属するものとして扱います。
以下のすべての関数では、posが省略かnil
ならポイントの値がデフォルトとして使用されます。ナローイング(narrowing)が効力をもつ場合には、posはアクセス可能部分にあるはずです。ナローイングを参照してください。
この関数はposで指定されたフィールドの先頭をリターンする。
posが自身のフィールド先頭にあり、かつescape-from-edgeが非nil
なら、pos周辺のfield
プロパティのstickinessに関わらず、リターン値は常にposが終端であるような、前にあるフィールドの先頭になる。
limitが非nil
なら、それはバッファーの位置。そのフィールドの先頭がlimitより前なら、かわりにlimitがリターンされるだろう。
この関数はposで指定されるフィールドの終端をリターンする。
posが自身のフィールド終端にあり、かつescape-from-edgeが非nil
なら、pos周辺のfield
プロパティのstickinessに関わらず、リターン値は常にposが先頭であるような後のフィールドの終端になる。
limitが非nil
なら、それはバッファーの位置である。そのフィールドの終端がlimitより後なら、かわりにlimitがリターンされるだろう。
この関数はposで指定されるフィールドのコンテンツを文字列としてリターンする。
この関数はposで指定されるフィールドのコンテンツを、テキストプロパティを無視して文字列としてリターンする。
この関数はposで指定されるフィールドのテキストを削除する。
この関数はnew-posをold-posが属するフィールドに“拘束(constrain)”する。言い換えると、これは 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
プロパティが等しいフィールドでなければならない。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
にすべてのフィールド境界を無視(何者にも拘束されることがない)させることができる。