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


33.19.4 特殊な意味をもつプロパティ

以下はビルトインで特別な意味をもつテキストプロパティ名のテーブルです。以降のセクションではフィルとプロパティ継承を制御する特別なプロパティ名をいくつか追加でリストしています。これ以外のすべての名前は特別な意味をもたず自由に使用できます。

注意: プロパティcompositiondisplayinvisibleintangibleはすべてのEmacsコマンドの後に好ましい箇所にポイントを移動させることもできます。コマンド後のポイントの調整を参照してください。

category

ある文字がcategoryプロパティをもつ場合には、それをその文字のプロパティカテゴリー(property category)と呼ぶ。これはシンボルであること。このシンボルのプロパティはその文字のプロパティのデフォルトとしての役割をもつ。

face

faceプロパティはその文字の外観を制御する(フェイスを参照)。このプロパティの値は以下が可能:

  • フェイス名(シンボルか文字列)。
  • anonymousフェイス: (keyword value …)形式のプロパティリスト。keywordはそれぞれフェイス属性名、valueはその属性の値。
  • フェイスのリスト。各リスト要素はフェイス名かanonymousフェイスであること。これはリストされた各フェイス属性を集計したフェイスを指定する。このリスト内で最初にあるフェイスがより高い優先度をもつ。
  • (foreground-color . color-name)または(background-color . color-name)という形式のコンスセル。これは(:foreground color-name)(:background color-name)と同じようにフォアグラウンドやバックグラウンドを指定する。この形式は後方互換のためだけにサポートされており無視すること。
  • (:filtered filter face-spec)という形式のコンスセル。これはface-specで与えられたフェイスを指定するが、フェイスを表示に使用する際にfilterがマッチした場合のみ。face-specには上述した任意のフォームを使用できる。filter(:window param value)という形式であること。これはパラメーターparamvalueeqであるようなウィンドウにマッチする。変数face-filters-always-matchが非nilなら、すべてのフェイスフィルターがマッチしたとみなす。

Font Lockモード(Font Lockモードを参照)はほとんどのバッファーにおいて、コンテキストにもとづき文字のfaceプロパティを動的に更新することにより機能する。

add-face-text-property関数は、このプロパティをセットする便利な手段を提供する。テキストプロパティの変更を参照のこと。

font-lock-face

このプロパティはFont Lockモードが配下にあるテキストに適用すべきfaceプロパティにたいして値を指定する。これはFont Lockモードに使用されるフォント表示手法の1つであり、独自のハイライトを実装する特別なモードにたいして有用。事前計算されたフォント化を参照のこと。Font Lockモードが無効ならfont-lock-faceに効果はない。

mouse-face

このプロパティは、このプロパティをもつテキストの上にマウスポインターがある際に、faceのかわりに使用される。これが発生する際にはマウスの下にある文字だけではなく、同じ値のmouse-faceプロパティをもつテキスト全体がハイライトされる。

Emacsはテキストサイズ(:height:weight:slant)を変更するmouse-faceプロパティ由来の属性すべてを無視する。これらの属性はハイライトされていないテキストと常に等しい。

cursor-face

これはmouse-faceと似ているが、このプロパティをもつテキスト内にポイント(マウスではない)がある際に使用されるプロパティである。ハイライトはモードcursor-face-highlight-modeが有効な場合のみ行われる。変数cursor-face-highlight-nonselected-windowが非nilならば、たとえウィンドウが選択されていなくてもhighlight-nonselected-windowsがリージョンにたいして行うのと同様(The Mark and the Region in The GNU Emacs Manualを参照)に、このフェイスをもつテキストがハイライトされる。

fontified

このプロパティはそのテキストの表示準備が整っているかどうかを告げる。nilならEmacsの再表示ルーチンはバッファーの該当部分を表示する前に、準備のためにfontification-functions (フェイスの自動割り当てを参照)の中の関数を呼び出す。これはフォントロックのコードのjust-in-timeにより内部的に使用される。

display

このプロパティはテキストが表示される方法を変更するさまざまな機能をアクティブ化する。たとえばこれによりテキスト外観を縦長(taller)または縦短(short)したり、高く(higher)または低く(lower)、太く(wider)または細く(narrower)したり、あるいはイメージに置き換えることができる。displayプロパティを参照のこと。

help-echo

テキストがhelp-echoプロパティに文字列をもつ場合には、そのテキスト上にマウスを移動した際には、substitute-command-keysを通じて文字列を渡した後にEmacsはエコーエリアかツールチップウィンドウ(ツールチップを参照)にその文字列を表示する。

help-echoプロパティの値が関数なら、その関数はwindowobjectposの3つの引数で呼び出されてヘルプ文字列、ヘルプ文字列が存在しなければnilをリターンすること。1つ目の引数windowはそのヘルプが見つかったウィンドウ。2つ目の引数objecthelp-echoプロパティをもつバッファー、オーバーレイ、または文字列。pos引数は以下のとおり:

  • objectがバッファーならposはそのバッファー内の位置。
  • objectがオーバーレイなら、そのオーバーレイはhelp-echoプロパティをもちposはそのオーバーレイのバッファー内の位置。
  • objectが文字列(オーバーレイ文字列、またはdisplayプロパティにより表示された文字列)ならposはその文字列内の位置。

help-echoプロパティの値が関数と文字列のいずれでもなければ、それはヘルプ文字列を得るために評価される。

変数show-help-functionをセットすることにより、ヘルプテキストが表示される方法を変更できる(Help displayを参照)。

この機能はモードライン内、およびその他のアクティブテキストにたいして使用される。

help-echo-inhibit-substitution

help-echo文字列の最初の文字が非nilhelp-echo-inhibit-substitutionプロパティをもつ場合には、substitute-command-keysを通じて渡すことなくshow-help-functionが行うように表示される。

keymap

keymapプロパティはコマンドにたいして追加のキーマップを指定する。このキーマップを適用する際には、マイナーモードキーマップとバッファーのローカルマップの前に、このマップがキー照合のために使用される。アクティブなキーマップを参照のこと。プロパティ値がシンボルなら、そのシンボルの関数定義がキーマップとして使用される。

ポイントの前の文字のプロパティの値は、それが非nilでrear-stickyであり、かつポイントの後の文字のプロパティ値が非nilでfront-stickyなら適用される(マウスクリックではポイント位置のかわりにクリック位置が使用される)。

local-map

このプロパティはkeymapと同じように機能するが、これはそのバッファーのローカルマップのかわりに使用するキーマップを指定する点が異なる。ほとんど(もしかするとすべて)の目的にたいしてはkeymapを使用するほうが良いだろう。

syntax-table

syntax-tableプロパティは特定の文字にたいしてどのシンタックステーブルがオーバーライドするかを告げる。構文プロパティを参照のこと。

read-only

ある文字がプロパティread-onlyをもつなら、その文字の変更は許可されない。これを行おうとするすべてのコマンドはtext-read-onlyエラーを受け取る。プロパティの値が文字列ならその文字列がエラーメッセージとして使用される。

read-only文字に隣接する箇所への挿入は、そこに通常のテキストの行うことがstickinessによるread-onlyプロパティを継承するならエラーとなる。つまりstickinessを制御することによりread-onlyテキストに隣接する挿入の権限を制御することができる。テキストプロパティの粘着性を参照のこと。

プロパティ変更はバッファー変更とみなされるので、特別なトリック(inhibit-read-onlyを非nilにバインドしてからプロパティを削除する)を知らないかぎり、read-onlyプロパティを取り除くことは不可能。読み取り専用のバッファーを参照のこと。

inhibit-read-only

プロパティinhibit-read-onlyをもつ文字はたとえ読み取り専用バッファーでも編集できる。読み取り専用のバッファーを参照のこと。

invisible

nilinvisibleプロパティにより、スクリーン上で文字を不可視にできる。詳細は不可視のテキストを参照のこと。

inhibit-isearch

inhibit-isearchプロパティが非nilなら、isearchはそのテキストをスキップする。

intangible

連続する文字のグループが非nilの等しいintangibleプロパティをもつなら、それらの文字の間にポイントを置くことは不可能。そのグループ内に前方へポイントの移動を試みると、ポイントは実際にはそのグループの終端に移動する。そのグループ内に後方へポイントの移動を試みると、ポイントは実際にはそのグループの先頭に移動する。

連続する文字のグループが非nilの等しくないintangibleプロパティをもつなら、それらの文字は個別のグループに属して、各グループは上述のように別のグループとして扱われる。

変数inhibit-point-motion-hooksが非nil (デフォルト)ならintangibleプロパティは無視される。

注意せよ: このプロパティは非常に低レベルで処理されて、予想外の方法により多くのコードに影響する。そのため使用に際しては特別な注意を要する。誤った使用方法としては不可視のテキストにintangibleプロパティをputするのが一般的な誤りであり、コマンドループは各コマンドの終わりに不可視テキストの外部へポイントを移動するだろうから、これは実際には必要ない。コマンド後のポイントの調整を参照のこと。これらの理由によりこのプロパティは時代遅れであり、かわりにcursor-intangibleプロパティを使用すること。

cursor-intangible

マイナーモードcursor-intangible-modeがオンになっている際には、再表示が発生する直前に非nilcursor-intangibleプロパティをもつすべての位置からポイントが移動させられる。許容されるカーソル位置の計算時にはこのプロパティの“粘着性(stickiness)”が考慮される(テキストプロパティの粘着性を参照)ので、たとえばカーソルがエンターできないような連続する5つの‘x’を挿入するためには、以下のような何かしらを行う必要がある:

(insert
 (propertize "xxxx" 'cursor-intangible t)
 (propertize "x" 'cursor-intangible t 'rear-nonsticky t))

変数cursor-sensor-inhibitが非nilなら、cursor-intangibleプロパティとcursor-sensor-functionsプロパティ(以下参照)は無視される。

field

同じfieldプロパティをもつ連続する文字はフィールドを構成する。forward-wordbeginning-of-lineを含むいくつかの移動関数はフィールド境界で移動を停止する。フィールドの定義と使用を参照のこと。

cursor

カーソルは通常はカレントバッファー位置を“隠している”(つまりかわりに表示されている)オーバーレイ、およびテキストプロパティ文字列の先頭か終端に表示される。Emacsに指示するかわりに文字に非nilcursorテキストプロパティを与えることにより、それら文字列内の任意の望む文字にカーソルを置くことができる。加えてcursorプロパティの値が整数なら、それはカーソルがその文字上に表示されるようにオーバーレイまたはdisplayプロパティが始まる位置から数えたバッファーの文字位置の数字を指定する。特にある文字のcursorプロパティの値が数字nなら、カーソルは範囲[ovpos..ovpos+n)内の任意のバッファー位置にあるその文字上に表示されるだろう。ここでovposoverlay-start (オーバーレイの管理を参照)により与えられるオーバーレイ開始位置、またはそのバッファー内でdisplayプロパティが始まる位置である。

言い換えると文字列の非nil値のcursorプロパティをもつ文字はカーソルが表示される文字である。このプロパティの値はオーバーレイまたはディスプレイ文字列が表示上でポイントを不可視にしている際に、カーソルを表示するバッファーの位置を告げる。値が整数nならオーバーレイまたはdisplayプロパティの始まりからn後ろの位置までの間にポイントがあるとき、カーソルはそこに表示される。値がそれ以外の非nilならポイントがdisplayプロパティの先頭となるバッファー位置にあるとき、あるいはディスプレイ上でその位置が不可視ならoverlay-startとなるバッファー位置でのみカーソルが表示される。cursorプロパティの整数値は、たとえそのポイントがディスプレイ上可視でなくとも、その文字上でカーソルが表示されることを意味し得ることに注意。

このプロパティの微妙なのは、ディスプレイまたはオーバーレイ文字列の一部であるような改行にはこのプロパティが機能しない点である。これはEmacsがディスプレイ上の文字にたいしてソンcursorプロパティを探す際に、検索するスクリーン上で改行文字がグラフィック表現をもたないからである。

バッファーのテキストを網羅するオーバーレイ文字列(before-stringを参照)や文字列であるようなdisplayプロパティがバッファーに多くある場合には、それらの文字列を走査する間にカーソルを置く箇所をEmacsに合図するために、cursorプロパティを使用するのはよいアイデアである。これはdisplayやオーバーレイ文字列に“カバー”された何らかのバッファー位置にポイントがある際に、Lispプログラムやユーザーがカーソルを配置したい箇所でディスプレイエンジンと直接通信する。

pointer

これはそのテキストやイメージ上にマウスポインターがあるときの特定のマウスシェイプを指定する。利用できるポインターシェイプについてはポインターの形状を参照のこと。

line-spacing

改行は改行で終わるディスプレイ行の高さを制御するテキストプロパティやオーバーレイプロパティline-spacingをもつことができる。このプロパティ値はデフォルトのフレーム行スペーシングと、バッファーローカル変数line-spacingをオーバーライドする。行の高さを参照のこと。

line-height

改行は改行で終わるディスプレイ行のトータル高さを制御するテキストプロパティ、またはオーバーレイプロパティline-heightをもつことができる。行の高さを参照のこと。

wrap-prefix

テキストがwrap-prefixプロパティをもつなら、それが定義するプレフィクスはテキストラッピング(text wrapping: テキスト折り返し)に由来するすべての継続行の先頭に表示時に追加されるだろう(行が切り詰められた場合にはwrap-prefixが使用されることはない)。これは文字列、イメージ(その他のディスプレイ仕様を参照)、あるいはディスプレイプロパティ:width:align-to (スペースの指定を参照)により指定された空白文字範囲かもしれない。

wrap-prefixはバッファーローカル変数wrap-prefixを使用して、バッファー全体にも指定され得る(がwrap-prefixテキストプロパティはwrap-prefix変数の値より優先される)。切り詰めを参照のこと。

line-prefix

テキストがline-prefixプロパティをもつなら、それが定義するプレフィクスは表示時にすべての非継続行の先頭に追加されるだろう。これは文字列、イメージ(その他のディスプレイ仕様を参照)、あるいはディスプレイプロパティ:width:align-to (スペースの指定を参照)により指定された空白文字範囲かもしれない。

line-prefixはバッファーローカル変数line-prefixを使用して、バッファー全体にも指定され得る(がline-prefixテキストプロパティはline-prefix変数の値より優先される)。切り詰めを参照のこと。

modification-hooks

ある文字がプロパティmodification-hooksをもつなら、その値は関数のリストであること。その文字の変更により、実際の変更前にそれらの関数すべてが呼び出される。それぞれの関数は、変更されようとするバッファー部分の先頭と終端という2つの引数を受け取る。特定のmodificationフック関数が単一のプリミティブにより変更されつつある複数の文字に出現する場合は、その関数が呼び出される回数を予測することはできない。さらに挿入は既存の文字を変更しないので、このフックは文字の削除、他の文字への置換、またはそれらのテキストプロパティ変更時のみ実行されるだろう。

他の同類フックとは異なり、Emacsはこれらの関数を呼び出し時にinhibit-modification-hooksを非nilバインドしない。関数がバッファーを変更するようなら、バッファー変更による変更フックの実行を防ぐために、この変数を非nilにバインドすることを考慮する必要がある。そうでなければ再帰呼び出しに備えなければならない。フックの変更を参照のこと。

オーバーレイもmodification-hooksプロパティをサポートするが詳細は若干異なる(オーバーレイのプロパティを参照)。

insert-in-front-hooks
insert-behind-hooks

あるバッファーへの挿入操作は後続文字のinsert-in-front-hooksプロパティ、および先行文字のinsert-behind-hooksプロパティにリストされる関数の呼び出しも行う。これらの関数は挿入されるテキストの先頭と終端という2つの引数を受け取る。関数は優先される実際の挿入が行われた後に呼び出される。

これらの関数を呼び出す際にはinhibit-modification-hooksは非nilにバインドされる。関数がバッファーを変更する場合には、これらの変更にたいして変更フックが実行されるように、inhibit-modification-hooksnilにバインドしたいと思うかもしれない。しかしこれを行うことによって、あなたの変更フックが再帰的に呼び出されるかもしれないので、確実にそれに備えること。

バッファー内のテキスト変更時にに呼び出される他のフックについてはフックの変更も参照のこと。

point-entered
point-left

スペシャルプロパティpoint-enteredpoint-leftはポイント移動をレポートするフック関数を記録する。ポイントを移動するたびにEmacsは以下の2つのプロパティ値を比較する:

  • 古い位置の後の文字のpoint-leftプロパティ。
  • 新しい位置の後の文字のpoint-enteredプロパティ。

これらの2つの値が異なる場合には、(nilでなければ)古いポイント値と新しいポイント値という2つの引数とともにそれらそれぞれ呼び出される。

同じ比較は古い位置と新しい位置の前の文字にたいしても行われる。この結果として2つのpoint-left関数(同じ関数かもしれない)、および/または2つのpoint-entered関数(同じ関数かもしれない)が実行される可能性がある。ある場合においては、まずすべてのpoint-left関数が呼び出されて、その後にすべてのpoint-entered関数が呼び出される。

さまざまなバッファー位置にたいして、そこにポイントを移動することなく文字を調べるためにchar-afterを使用することができる。実際のポイント値変更だけがこれらのフック関数を呼び出す。

変数inhibit-point-motion-hooksはデフォルトではpoint-leftpoint-enteredのフック実行を抑制する。Inhibit point motion hooksを参照のこと。

これらのプロパティは時代遅れであり、かわりにcursor-sensor-functionsを使用してほしい。

cursor-sensor-functions

このスペシャルプロパティはカーソル移動に反応する関数リストを記録する。このリスト内の各関数は影響を受けるウィンドウ、既知のカーソルの以前の位置、このプロパティをもつテキストにカーソルが入ったか離れたかに依存するシンボルenteredleftという3つの受け取って再表示の直前に呼び出される。関数はマイナーモードcursor-sensor-modeがオンのときのみ呼び出される。

変数cursor-sensor-inhibitが非nilならcursor-sensor-functionsプロパティは無視される。

composition

このテキストプロパティは文字シーケンスをコンポーネントから構成される単一グリフ(single glyph)として表示するために使用される。しかしこのプロパティの値自身は完全にEmacsの内部的なものであり、たとえばput-text-propertyなどで直接操作しないこと。

minibuffer-message

このテキストプロパティは、アクティブミニバッファーの一時的なメッセージを表示する場所を指定する。具体的にはこのプロパティをもつミニバッファーテキストの最初の文字が、その前に表示する一時的なメッセージを所有する。デフォルトではミニバッファーテキスト終端に一時的なメッセージが表示される。このテキストプロパティはset-message-functionのデフォルト値の関数が使用する(エコーエリアへのメッセージの表示を参照)。

Variable: inhibit-point-motion-hooks

この時代遅れの変数が非nilのときは、point-leftpoint-enteredのフックは実行されずintangibleプロパティは効果をもたない。この変数はグローバルにセットせずletでバインドすること。この変数の影響を受けるプロパティは時代遅れなので、それらを効果的に無効にするためにデフォルト値はt

Variable: show-help-function

この変数が非nilなら、それはヘルプ文字列を表示するために呼び出される関数を指定する。これらはhelp-echoプロパティ、メニューヘルプ文字列(単純なメニューアイテム拡張メニューアイテムを参照)、ツールバーヘルプ文字列(ツールバーを参照)かもしれない。指定された関数は、ヘルプ文字列の最初の文字が非nilhelp-echo-inhibit-substitutionをもっていなければ、表示するためのヘルプ文字列(関数に与えられる前にsubstitute-command-keysを通じて渡される)を単一の引数として呼び出される。ドキュメント内でのキーバインディングの置き換えを参照のこと。show-help-functionを使用するモードの例は、Tooltipモード(Tooltips in The GNU Emacs Manualを参照)のコード例を参照のこと。

Variable: face-filters-always-match

この変数が非nilなら、特定の条件が合致された際のみ適用される属性を指定するフェイスフィルターは常にマッチするとみなされる。


Next: フォーマットされたテキストのプロパティ, Previous: テキストプロパティの検索関数, Up: テキストのプロパティ   [Contents][Index]