Next: フォーマットされたテキストのプロパティ, Previous: テキストプロパティの検索関数, Up: テキストのプロパティ [Contents][Index]
以下はビルトインで特別な意味をもつテキストプロパティ名のテーブルです。以降のセクションではフィルとプロパティ継承を制御する特別なプロパティ名をいくつか追加でリストしています。これ以外のすべての名前は特別な意味をもたず自由に使用できます。
注意:
プロパティcomposition
、display
、invisible
、intangible
はすべてのEmacsコマンドの後に好ましい箇所にポイントを移動させることもできます。コマンド後のポイントの調整を参照してください。
category
ある文字がcategory
プロパティをもつ場合には、それをその文字のプロパティカテゴリー(property
category)と呼ぶ。これはシンボルであること。このシンボルのプロパティはその文字のプロパティのデフォルトとしての役割をもつ。
face
¶face
プロパティはその文字の外観を制御する(フェイスを参照)。このプロパティの値は以下が可能:
(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モードを参照)はほとんどのバッファーにおいて、コンテキストにもとづき文字の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
プロパティの値が関数なら、その関数は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
が行うように表示される。
left-fringe-help
¶right-fringe-help
スクリーン行の可視のテキストで、テキストプロパティleft-fringe-help
かright-fringe-help
に文字列の値がセットされたテキストがあると、そのテキストに対応するフリンジ上にマウスポインターを動かした際に、show-help-function
(Help displayを参照)経由でプロパティにセットされた文字列が表示される。これはフリンジカーソルとビットマップ(フリンジを参照)を併用している際に役に立つ。
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
¶非nil
のinvisible
プロパティにより、スクリーン上で文字を不可視にできる。詳細は不可視のテキストを参照のこと。
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
がオンになっている際には、再表示が発生する直前に非nil
のcursor-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-word
やbeginning-of-line
を含むいくつかの移動関数はフィールド境界で移動を停止する。フィールドの定義と使用を参照のこと。
cursor
¶カーソルは通常はカレントバッファー位置を“隠している”(つまりかわりに表示されている)オーバーレイ、およびテキストプロパティ文字列の先頭か終端に表示される。Emacsに指示するかわりに文字に非nil
のcursor
テキストプロパティを与えることにより、それら文字列内の任意の望む文字にカーソルを置くことができる。加えてcursor
プロパティの値が整数なら、それはカーソルがその文字上に表示されるようにオーバーレイまたはdisplay
プロパティが始まる位置から数えたバッファーの文字位置の数字を指定する。特にある文字のcursor
プロパティの値が数字nなら、カーソルは範囲[ovpos..ovpos+n)
内の任意のバッファー位置にあるその文字上に表示されるだろう。ここでovposはoverlay-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
テキストプロパティはwrap-prefix
変数の値より優先される)。切り詰めを参照のこと。
line-prefix
テキストがline-prefix
プロパティをもつなら、それが定義するプレフィクスは表示時にすべての非継続行の先頭に追加されるだろう。プロパティの値は文字列、イメージ(その他のディスプレー仕様を参照)、あるいはディスプレイプロパティ:width
や:align-to
(スペースの指定を参照)により指定された空白文字範囲かもしれない。これが効果を及ぼすためにはテキストリージョン全体、テキストの最初の行の最初の文字から最後の行の最後の文字までline-prefix
プロパティがセットされていなければならない。さもないとディスプレイエンジンがこのプロパティをチェックするのは行継続の直後だけなので、別の方法でテキストを行に分割してもプレフィックスの表示に失敗するかもしれない。
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-hooks
をnil
にバインドしたいと思うかもしれない。しかしこれを行うことによって、あなたの変更フックが再帰的に呼び出されるかもしれないので、確実にそれに備えること。
バッファー内のテキスト変更時にに呼び出される他のフックについてはフックの変更も参照のこと。
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
のデフォルト値の関数が使用する(エコーエリアへのメッセージの表示を参照)。
この時代遅れの変数が非nil
のときは、point-left
とpoint-entered
のフックは実行されずintangible
プロパティは効果をもたない。この変数はグローバルにセットせずlet
でバインドすること。この変数の影響を受けるプロパティは時代遅れなので、それらを効果的に無効にするためにデフォルト値はt
。
この変数が非nil
なら、それはヘルプ文字列を表示するために呼び出される関数を指定する。これらはhelp-echo
プロパティ、メニューヘルプ文字列(単純なメニューアイテムと拡張メニューアイテムを参照)、ツールバーヘルプ文字列(ツールバーを参照)かもしれない。指定された関数は、ヘルプ文字列の最初の文字が非nil
のhelp-echo-inhibit-substitution
をもっていなければ、表示するためのヘルプ文字列(関数に与えられる前にsubstitute-command-keys
を通じて渡される)を単一の引数として呼び出される。ドキュメント内でのキーバインディングの置き換えを参照のこと。show-help-function
を使用するモードの例は、Tooltipモード(Tooltips in The GNU Emacs Manualを参照)のコード例を参照のこと。
この変数が非nil
なら、特定の条件が合致された際のみ適用される属性を指定するフェイスフィルターは常にマッチするとみなされる。
Next: フォーマットされたテキストのプロパティ, Previous: テキストプロパティの検索関数, Up: テキストのプロパティ [Contents][Index]