Next: , Previous: , Up: テキストのプロパティ   [Contents][Index]


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

フィールドとはバッファー内にある連続する文字範囲であり、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はアクセス可能部分にあるはずです。ナローイングを参照してください。

Function: field-beginning &optional pos escape-from-edge limit

この関数はposで指定されたフィールドの先頭をリターンする。

posが自身のフィールド先頭にあり、かつescape-from-edgeが非nilなら、pos周辺のfieldプロパティのstickinessに関わらず、リターン値は常にposが終端であるような、前にあるフィールドの先頭になる。

limitが非nilなら、それはバッファーの位置。そのフィールドの先頭がlimitより前なら、かわりにlimitがリターンされるだろう。

Function: field-end &optional pos escape-from-edge limit

この関数はposで指定されるフィールドの終端をリターンする。

posが自身のフィールド終端にあり、かつescape-from-edgeが非nilなら、pos周辺のfieldプロパティのstickinessに関わらず、リターン値は常にpos先頭であるような後のフィールドの終端になる。

limitが非nilなら、それはバッファーの位置である。そのフィールドの終端がlimitより後なら、かわりにlimitがリターンされるだろう。

Function: field-string &optional pos

この関数はposで指定されるフィールドのコンテンツを文字列としてリターンする。

Function: field-string-no-properties &optional pos

この関数はposで指定されるフィールドのコンテンツを、テキストプロパティを無視して文字列としてリターンする。

Function: delete-field &optional pos

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

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

この関数はnew-posold-posが属するフィールドに“拘束(constrain)”する。言い換えると、これは old-posと同じフィールド内でnew-posにもっとも近い位置をリターンする。

new-posnilなら、constrain-to-fieldはかわりにポイントの値を使用してポイントをリターンすることに加えて、その位置にポイントを移動する。

old-posが2つのフィールドの境界なら、許容できる最後の位置は引数escape-from-edgeに依存する。escape-from-edgenilなら、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-linebeginning-of-lineのような行単位の移動コマンドで、それらのコマンドが正しい行へ移動できる場合のみフィールド境界を尊重するようにするために用いられる。

オプション引数inhibit-capture-propertyが非nil、かつold-posがその名前の非nilのプロパティをもつ場合には、すべてのフィールド境界は無視される。

変数inhibit-field-text-motionを非nil値にバインドすることにより、constrain-to-fieldにすべてのフィールド境界を無視(何者にも拘束されることがない)させることができる。