次: , 前: Property Search, 上: Text Properties


31.19.4 特別な意味を持つ属性

特別な組み込みの意味を持つテキスト属性名の一覧を以下に示します。 以降の節では、詰め込みや属性の継承を制御する特別な属性名も示します。 それ以外の名前には標準的な意味はないので、 読者はそれらを好きなように使ってかまいません。

category
文字に属性categoryがあるとき、 これを文字のカテゴリ(category)と呼ぶ。 これはシンボルであること。 そのシンボルの属性が、文字の属性のデフォルトとして働く。
face
テキストのフォントと表示色を制御するために属性faceを使う。 その値はフェイス名かフェイス名のリストである。 詳しくは、see Faces

属性値がリストであると、その要素は、 (foreground-color . color-name)(background-color . color-name)の形でもよい。 これらの要素は、前景色だけや背景色だけを指定する。 したがって、使用する各色を表すフェイスを作成する必要はない。

テキストの内容に基づいて属性faceを自動的に更新する方法に関しては、 see Font Lock Mode

mouse-face
マウスが文字の上やその近くにあると、属性faceのかわりに 属性mouse-faceが使われる。 この目的において『近く』とは、 文字とマウスの位置のあいだの 属性mouse-faceの値が同じであるすべてのテキストである。
local-map
属性local-mapを用いることで、 バッファ内のテキストの一部分に対して別のキーマップを指定できる。 ポイントのうしろの文字のこの属性の値がnil以外であると、 バッファのローカルマップのかわりにその値をキー探索に使う。 属性値がシンボルであると、シンボルの関数定義をキーマップとして使う。 see Active Keymaps
syntax-table
属性syntax-tableは、構文テーブルがこの文字に指定するものに優先する。 see Syntax Properties
read-only
文字に属性read-onlyがあると、その文字を変更できない。 変更するどのようなコマンドもエラーになる。

挿入されるテキストがスティッキ性のために属性read-onlyを 継承する場合には、読み出し専用文字のつぎにテキストを挿入するとエラーになる。 したがって、スティッキ性を制御することで、 読み出し専用テキストのつぎへのテキスト挿入を許すかどうかを制御できる。 see Sticky Properties

属性を変更するとバッファを変更したとみなすため、 特別なトリックを知らない限り、属性をread-onlyを削除できない。 つまり、inhibit-read-onlynil以外の値を束縛して、 属性を削除する。 see Read Only Buffers

invisible
属性invisiblenil以外であると、 その文字はスクリーンに表示されない。 詳しくは、see Invisible Text
intangible
連続する文字に属性intangiblenilでない同じ値があると、 それらのあいだにポイントを置けなくなる。 前方に向けてこれらの文字の中にポイントを移動しようとすると、 ポイントは実際にはそれらの末尾へ移動する。 後方に向けてこれらの文字の中にポイントを移動しようとすると、 ポイントは実際にはそれらの先頭へ移動する。

変数inhibit-point-motion-hooksnil以外であると、 属性intangibleは無視される。

modification-hooks
文字に属性modification-hooksがある場合、それは関数のリストであること。 その文字の変更にはそれらの関数すべてが呼び出される。 各関数は2つの引数、つまり、バッファの変更対象部分の先頭と末尾を受け取る。 1つの操作で変更される一連の文字に同じ変更フック関数が現れる場合、 関数が実際に何回呼ばれるか予測できないことに注意してほしい。
insert-in-front-hooks
insert-behind-hooks
バッファにテキストを挿入する操作でも、 挿入箇所のうしろの文字の属性insert-in-front-hooksと まえの文字の属性insert-behind-hooksに指定されている 関数群を呼び出す。 これらの関数は2つの引数、つまり、挿入されたテキストの先頭と末尾を受け取る。 これらの関数が呼ばれるのは、実際の挿入操作を終えてからである。

バッファ内のテキストを変更するときに呼び出される他のフックについては、 Change Hooksも参照。

point-entered
point-left
特別な属性point-enteredpoint-leftは、 ポイント移動を報告するフック関数を保持する。 ポイントが動くたびに、Emacsはこれらの2つの属性値、つまり、

を比較する。 これら2つの値が異なれば、 ポイントの古い値と新しい値の2つの引数で(nilでなければ) それぞれを呼び出す。

同じことを移動前後のポイントのまえの文字についても行う。 その結果、(同じかもしれない)point-leftの関数を2回、かつ/あるいは、 (同じかもしれない)point-enteredの関数を2回実行する。 いずれにしても、point-leftの関数が最初に呼ばれ、 そのあとでpoint-enteredの関数が呼ばれる。

これらの関数では、char-afterを使って ポイントを移動せずにさまざまな箇所の文字を調べられる。 ポイントの値が実際に変わったときにのみ、これらのフック関数が実行される。

— 変数: inhibit-point-motion-hooks

この変数がnil以外であると、 point-leftpoint-enteredのフック関数は実行されなくなり、 属性intangibleの効果もなくなる。 この変数はグローバルに設定せずに、letで束縛すること。