Next: Format Properties, Previous: Property Search, Up: Text Properties [Contents][Index]
以下はビルトインで特別な意味をもつテキストプロパティ名のテーブルです。以降のセクションではフィルとプロパティ継承を制御する特別なプロパティ名をいくつか追加でリストしています。これ以外のすべての名前は特別な意味をもたず自由に使用できます。
注意:
プロパティcomposition
、display
、invisible
、intangible
はすべてのEmacsコマンドの後に好ましい箇所にポイントを移動させることもできます。Adjusting Pointを参照してください。
category
ある文字がcategory
プロパティをもつ場合には、それをその文字のプロパティカテゴリー(property
category)と呼ぶ。これはシンボルであること。このシンボルのプロパティはその文字のプロパティのデフォルトとしての役割をもつ。
face
face
プロパティはその文字の外観を制御する(Facesを参照)。このプロパティの値は以下が可能:
(keyword value
…)
形式のプロパティリスト。keywordはそれぞれフェイス属性名、valueはその属性の値。
(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)
という形式であること。これはパラメーターparamがvalueにeq
であるようなウィンドウにマッチする。変数face-filters-always-match
が非nil
なら、すべてのフェイスフィルターがマッチしたとみなす。
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
プロパティに文字列をもつ場合には、そのテキスト上にマウスを移動した際には、substitute-command-keys
を通じて文字列を渡した後にEmacsはエコーエリアかツールチップウィンドウ(Tooltipsを参照)にその文字列を表示する。
help-echo
プロパティの値が関数なら、その関数はwindow、object、posの3つの引数で呼び出されてヘルプ文字列、ヘルプ文字列が存在しなければnil
をリターンすること。1つ目の引数windowはそのヘルプが見つかったウィンドウ。2つ目の引数objectはhelp-echo
プロパティをもつバッファー、オーバーレイ、または文字列。pos引数は以下のとおり:
help-echo
プロパティをもちposはそのオーバーレイのバッファー内の位置。
display
プロパティにより表示された文字列)ならposはその文字列内の位置。
help-echo
プロパティの値が関数と文字列のいずれでもなければ、それはヘルプ文字列を得るために評価される。
変数show-help-function
をセットすることにより、ヘルプテキストが表示される方法を変更できる(Help displayを参照)。
この機能はモードライン内、およびその他のアクティブテキストにたいして使用される。
help-echo-inhibit-substitution
help-echo
文字列の最初の文字が非nil
のhelp-echo-inhibit-substitution
プロパティをもつ場合には、substitute-command-keys
を通じて渡すことなくshow-help-function
が行うように表示される。
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
非nil
のinvisible
プロパティにより、スクリーン上で文字を不可視にできる。詳細はInvisible Textを参照のこと。
intangible
連続する文字のグループが非nil
の等しいintangible
プロパティをもつなら、それらの文字の間にポイントを置くことは不可能。そのグループ内に前方へポイントの移動を試みると、ポイントは実際にはそのグループの終端に移動する。そのグループ内に後方へポイントの移動を試みると、ポイントは実際にはそのグループの先頭に移動する。
連続する文字のグループが非nil
の等しくないintangible
プロパティをもつなら、それらの文字は個別のグループに属して、各グループは上述のように別のグループとして扱われる。
変数inhibit-point-motion-hooks
が非nil
(デフォルト)ならintangible
プロパティは無視される。
注意せよ:
このプロパティは非常に低レベルで処理されて、予想外の方法により多くのコードに影響する。そのため使用に際しては特別な注意を要する。誤った使用方法としては不可視のテキストにintangibleプロパティをputするのが一般的な誤りであり、コマンドループは各コマンドの終わりに不可視テキストの外部へポイントを移動するだろうから、これは実際には必要ない。Adjusting Pointを参照のこと。これらの理由によりこのプロパティは時代遅れであり、かわりにcursor-intangible
プロパティを使用すること。
cursor-intangible
マイナーモードcursor-intangible-mode
がオンに切り替えられた際には、再表示の発生直前に非nil
のcursor-intangible
プロパティをもつすべての位置からポイントが移動される。
変数cursor-sensor-inhibit
が非nil
なら、cursor-intangible
プロパティとcursor-sensor-functions
プロパティ(以下参照)は無視される。
field
同じfield
プロパティをもつ連続する文字はフィールドを構成する。forward-word
やbeginning-of-line
を含むいくつかの移動関数はフィールド境界で移動を停止する。Fieldsを参照のこと。
cursor
カーソルは通常はカレントバッファー位置にあるオーバーレイ、およびテキストプロパティ文字列の先頭か終端に表示される。文字に非nil
のcursor
テキストプロパティを与えることにより、それら文字列内の任意の望む文字にカーソルを置くことができる。加えてcursor
プロパティの値が整数なら、それはカーソルがその文字上に表示されるようにオーバーレイまたはdisplay
プロパティが始まる位置から数えたバッファーの文字位置の数字を指定する。特にある文字のcursor
プロパティの値が数字nなら、カーソルは範囲[ovpos..ovpos+n)
内の任意のバッファー位置にあるその文字上に表示されるだろう。ここでovposはoverlay-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フック関数が単一のプリミティブにより変更されつつある複数の文字に出現する場合は、その関数が呼び出される回数を予測することはできない。さらに挿入は既存の文字を変更しないので、このフックは文字の削除、他の文字への置換、またはそれらのテキストプロパティ変更時のみ実行されるだろう。
他の同類フックとは異なり、Emacsはこれらの関数を呼び出し時にinhibit-modification-hooks
を非nil
にバインドしない。関数がバッファーを変更するようなら、バッファー変更による変更フックの実行を防ぐために、この変数を非nil
にバインドすることを考慮する必要がある。そうでなければ再帰呼び出しに備えなければならない。Change Hooksを参照のこと。
オーバーレイもmodification-hooks
プロパティをサポートするが詳細は若干異なる(Overlay Propertiesを参照)。
insert-in-front-hooks
insert-behind-hooks
あるバッファーへの挿入操作は後続文字のinsert-in-front-hooks
プロパティ、および先行文字のinsert-behind-hooks
プロパティにリストされる関数の呼び出しも行う。これらの関数は挿入されるテキストの先頭と終端という2つの引数を受け取る。関数は優先される実際の挿入が行われた後に呼び出される。
これらの関数を呼び出す際にはinhibit-modification-hooks
は非nil
にバインドされる。関数がバッファーを変更する場合には、これらの変更にたいして変更フックが実行されるように、inhibit-modification-hooks
をnil
にバインドしたいと思うかもしれない。しかしこれを行うことによって、あなたの変更フックが再帰的に呼び出されるかもしれないので、確実にそれに備えること。
バッファー内のテキスト変更時にに呼び出される他のフックについてはChange Hooksも参照のこと。
point-entered
point-left
スペシャルプロパティpoint-entered
とpoint-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-left
とpoint-entered
のフック実行を抑制する。Inhibit point motion hooksを参照のこと。
これらのプロパティは時代遅れであり、かわりにcursor-sensor-functions
を使用してほしい。
cursor-sensor-functions
このスペシャルプロパティはカーソル移動に反応する関数リストを記録する。このリスト内の各関数は影響を受けるウィンドウ、既知のカーソルの以前の位置、このプロパティをもつテキストにカーソルが入ったか離れたかに依存するシンボルentered
かleft
という3つの受け取って再表示の直前に呼び出される。関数はマイナーモードcursor-sensor-mode
がオンのときのみ呼び出される。
変数cursor-sensor-inhibit
が非nil
ならcursor-sensor-functions
プロパティは無視される。
composition
このテキストプロパティは文字シーケンスをコンポーネントから構成される単一グリフ(single
glyph)として表示するために使用される。しかしこのプロパティの値自身は完全にEmacsの内部的なものであり、たとえばput-text-property
などで直接操作しないこと。
minibuffer-message
このテキストプロパティは、アクティブミニバッファーの一時的なメッセージを表示する場所を指定する。具体的にはこのプロパティをもつミニバッファーテキストの最初の文字が、その前に表示する一時的なメッセージを所有する。デフォルトではミニバッファーテキスト終端に一時的なメッセージが表示される。このテキストプロパティはset-message-function
のデフォルト値の関数が使用する(Displaying Messagesを参照)。
この時代遅れの変数が非nil
のときは、point-left
とpoint-entered
のフックは実行されずintangible
プロパティは効果をもたない。この変数はグローバルにセットせずlet
でバインドすること。この変数の影響を受けるプロパティは時代遅れなので、それらを効果的に無効にするためにデフォルト値はt
。
この変数が非nil
なら、それはヘルプ文字列を表示するために呼び出される関数を指定する。これらはhelp-echo
プロパティ、メニューヘルプ文字列(Simple Menu ItemsとExtended Menu Itemsを参照)、ツールバーヘルプ文字列(Tool Barを参照)かもしれない。指定された関数は、ヘルプ文字列の最初の文字が非nil
のhelp-echo-inhibit-substitution
をもっていなければ、表示するためのヘルプ文字列(関数に与えられる前にsubstitute-command-keys
を通じて渡される)を単一の引数として呼び出される。Keys in Documentationを参照のこと。show-help-function
を使用するモードの例は、Tooltipモード(Tooltips in The GNU Emacs Manualを参照)のコード例を参照のこと。
この変数が非nil
なら、特定の条件が合致された際のみ適用される属性を指定するフェイスフィルターは常にマッチするとみなされる。
Next: Format Properties, Previous: Property Search, Up: Text Properties [Contents][Index]