Next: , Previous: , Up: Text Properties   [Contents][Index]


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

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

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

category

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

face

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

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

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

font-lock-face

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

mouse-face

このプロパティは文字上または近傍にマウスがあるとき、faceのかわりに使用される。この目的にたいして“近傍”とは文字とマウス位置の間のすべてのテキストが同じmouse-faceプロパティの値をもつことを意味する。

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

fontified

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

display

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

help-echo

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

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

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

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

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

keymap

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

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

local-map

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

syntax-table

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

read-only

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

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

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

inhibit-read-only

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

invisible

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

intangible

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

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

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

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

cursor-intangible

マイナーモードcursor-intangible-modeがオンの際には、非nilcursor-intangibleプロパティをもつすべての位置から、再表示の発生直前にポイントが移動させられる。

field

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

cursor

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

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

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

pointer

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

line-spacing

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

line-height

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

wrap-prefix

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

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

line-prefix

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

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

modification-hooks

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

これらの関数がバッファーを変更する場合には、これらのフックを呼び出す内部的メカニズムの混乱を避けるために、それらの関数はそれを行う前後にinhibit-modification-hookstにバインドすること。

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

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つの値が異なる場合には、(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がオンのときのみ呼び出される。

composition

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

Variable: inhibit-point-motion-hooks

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

Variable: show-help-function

この変数が非nilなら、それはヘルプ文字列を表示するために呼び出される関数を指定する。これらはhelp-echoプロパティ、メニューヘルプ文字列(Simple Menu ItemsExtended Menu Itemsを参照)、ツールバーヘルプ文字列(Tool Barを参照)かもしれない。指定された関数は表示するためのヘルプ文字列(この関数に与えられる前にsubstitute-command-keysに渡される。Keys in Documentationを参照)という単一の引数とともに呼び出される。Tooltipモード(Tooltips in The GNU Emacs Manualを参照)が例を提供している。


Next: , Previous: , Up: Text Properties   [Contents][Index]