| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
本章では、Emacsがユーザーに提示する画面表示に関連する さまざまな機能について述べます。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
関数redraw-frameは、指定したフレーム(see 節 28. フレーム)の
内容全体を再表示します。
より強力なのはredraw-displayです。
ユーザー入力の処理のほうが再表示より絶対的に優先します。 入力があるときにこれらの関数を呼び出してもただちにはなにもしませんが、 入力をすべて処理し終えてから再表示します。
通常、Emacsを停止したり再開しても スクリーン全体を再表示します。 Emacsのようなディスプレイ向けプログラムと通常の逐次表示向けに、 表示内容を個別に記録できる端末エミュレータもあります。 そのような端末を使っているときには、 再開時の再表示を禁止した場合もあります。
nil以外であると再描画の必要はないことを意味し、
nilであると再描画が必要であることを意味する。
デフォルトはnilである。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
テキスト行がウィンドウの右端を越えていると、 その行をつぎのスクリーン行へ継続するか、 スクリーン行1行に切り詰めます。 長いテキスト行を表示するために使われる追加のスクリーン行を 継続行と呼びます。 通常、ウィンドウの最右端のコラムに現れる`$'で切り詰めたことを示し、 `\'でつぎの行に『折り返した』こと、 つまり、継続している行であることを示します。 (表示テーブルで別の文字を指定できる。 38.14 表示テーブルを参照。)
継続することと詰め込みは別のことです。 継続はスクリーン上だけのことであり、バッファ内容は変わりません。 また、継続では単語の境界ではなく、正確にスクリーンの右端で 行を分けます。 See 節 31.11 詰め込み。
nilであり継続を意味する。
値がnil以外であると、そのような行を切り詰める。
変数truncate-partial-width-windowsがnil以外であると、
(フレーム内で)左右に並んだウィンドウでは、
truncate-linesの値に関わらずつねに切り詰る。
truncate-linesのバッファローカルな値を持たない
バッファ向けのtruncate-linesのデフォルト値である。
nil以外であると、そのような行を切り詰める。
さもなければ、truncate-linesに従って表示する。
ウィンドウで水平方向にスクロールしている(see 節 27.12 水平スクロール)と、 強制的に切り詰めます。
継続や切り詰めを表す文字は、表示テーブルを使って変更できます。 See 節 38.14 表示テーブル。
バッファにとても長い行があるときにそれらの表示に継続行を使うと、
それによりEmacsの再表示が遅くなります。
コラム計算や字下げ関数も遅くなります。
そのような場合には、cache-long-line-scansにtを
設定するのがよいです。
nil以外であると、
字下げ/移動関数とEmacsの再表示において、
バッファを走査した結果をキャッシュし、
バッファが変更されていないときには
キャッシュを調べてバッファの対象領域の再走査を回避する。
キャッシュするようにすると、短い行の処理が多少遅くなる。
この変数は、すべてのバッファで自動的にバッファローカルである。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
エコー領域(echo area)は、
基本関数messageでメッセージを表示したり、
打鍵を表示するために使われます。
(活性な)ミニバッファはエコー領域と
同じスクリーン上の位置に現れますが、
エコー領域とミニバッファは同じものではありません。
エコー領域に表示するには、
ストリーム(see 節 18.5 出力関数)として
tを指定したLisp表示関数を使うか、あるいはつぎのようにします。
printfの制御文字列と同様である。
書式指定について詳しくは、4.6 文字と文字列の変換の
formatを参照。
messageは構築した文字列を返す。
バッチモードでは、messageはメッセージテキストと改行を
標準エラーストリームへ出力する。
stringがnilであると、
messageはエコー領域をクリアする。
ミニバッファが活性であると、
これによりミニバッファの内容がスクリーンにただちに表示される。
(message "Minibuffer depth is %d."
(minibuffer-depth))
-| Minibuffer depth is 0.
=> "Minibuffer depth is 0."
---------- Echo Area ----------
Minibuffer depth is 0.
---------- Echo Area ----------
|
messageと同様にメッセージを表示するが、
エコー領域のかわりに対話ボックスを使うこともある。
この関数がマウスを用いて起動されたコマンドから呼ばれたとき、
より正確には、last-nonmenu-event(see 節 20.4 コマンドループからの情報)が
nilかリストのいずれかであると、
メッセージを表示するために対話ボックスかポップアップメニューを用いる。
さもなければエコー領域を用いる。
(これは、同様な決定をくだすy-or-n-pの判定条件と同じである。
see 節 19.6 Yes/Noの問い合わせ。)
呼び出しの周りでlast-nonmenu-eventに適切な値を束縛することで、
マウスを使うかエコー領域を使うか強制できる。
messageと同様にメッセージを表示するが、
可能な限り対話ボックス(やポップアップメニュー)を使う。
対話ボックスやポップアップメニューを扱えない端末などで
これらを使用できない場合には、
message-boxはmessageと同様にエコー領域を使う。
nilを返す。
nil以外であると、メッセージの末尾にカーソルを表示する。
さもなければ、エコー領域にではなく、ポイント位置にカーソルを表示する。
この値は普通はnilである。
Lispプログラムはこれにtを短い期間だけ束縛する。
(message nil)や他の理由で
エコー領域をクリアするたびに実行される。
エコー領域に表示したほとんどすべてのメッセージは バッファ`*Messages*'にも記録されます。
tは、保持する行数を制限しないことを意味する。
値nilは、メッセージをまったく記録しないことを意味する。
メッセージを表示しつつそれを記録しないようにするには
つぎのようにする。
(let (message-log-max) (message ...)) |
値がゼロであると、コマンド入力を表示しない。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
属性invisibleで文字群を不可視にできます。
つまり、それらをスクリーンに表示されないようにするのです。
テキスト属性(see 節 31.19 テキスト属性)か
オーバレイの属性(see 節 38.8 オーバレイ)を使います。
もっとも単純な場合、
属性invisibleがnil以外であると文字は見えなくなります。
これはデフォルトの場合、つまり、
buffer-invisibility-specのデフォルト値を変更していない場合であり、
このようにして属性invisibleは動作します。
より一般的には、変数buffer-invisibility-specを使って、
属性invisibleのどの値のものを不可視なテキストにするかを制御できます。
つまり、invisibleの異なる値を与えて
テキストをあらかじめいくつかのグループに分類しておき、
そのあとでbuffer-invisibility-specの値を変更して
さまざまなグループを可視/不可視にします。
buffer-invisibility-specで可視性を制御することは、
データベースの項目の一覧を表示するようなプログラムで特に有用です。
データベースの特定の項目だけを見るための
便利なフィルタコマンドを実装できます。
この変数に設定するのはとても速くでき、
変更すべき属性を探すためにバッファ内の全テキストを走査するよりも速いのです。
invisibleのどの種類を実際に
不可視な文字にするかを指定する。
t
invisibleがnil以外の文字を不可視にする。
これがデフォルト。
invisibleがこれらの条件の1つを満たすと、
その文字を不可視にする。
リストには2種類の要素がありうる。
atom
invisibleの値がatomであるか、
そのリストのメンバにatomがあると、
文字を不可視にする。
(atom . t)
invisibleの値がatomであるか、
そのリストのメンバにatomがあると、
文字を不可視にする。
さらに、その文字が行末にあり、直後に目に見える改行がある場合には、
`...'を表示する。
buffer-invisibility-specに要素を追加したり削除するために
2つの関数が特別にあります。
buffer-invisibility-specに要素elementを追加する。
buffer-invisibility-specから要素elementを削除する。
buffer-invisibility-specの使い方の慣習の1つに、
メジャーモードでは
buffer-invisibility-specの1要素と属性invisibleの値に
モード自体の名前を使うべきであるというのがあります。
;; `...'を表示したければ
(add-to-invisibility-spec '(my-symbol . t))
;; `...'を表示しくなければ
(add-to-invisibility-spec 'my-symbol)
(overlay-put (make-overlay beginning end)
'invisible 'my-symbol)
;; オーバレイを終了したら
(remove-from-invisibility-spec '(my-symbol . t))
;; 同じように
(remove-from-invisibility-spec 'my-symbol)
|
普通、テキストを操作したりポイントを移動するコマンドは、
テキストの可視性に注意しません。
ユーザーレベルの移動コマンドは、
line-move-ignore-invisibleがnil以外であれば
不可視な改行を明示的に無視しますが、
それはそのように明示的にプログラムしてあるからにすぎません。
インクリメンタルサーチでは、
不可視なテキストを含む一致箇所では、
不可視なオーバレイを一時的にあるいは恒久的に可視にできます。
これを可能にするには、オーバレイの属性isearch-open-invisibleが
nil以外である必要があります。
その属性の値は、オーバレイを引数として呼ばれる関数である必要があります。
その関数がオーバレイを恒久的に可視にします。
その関数は、探索から抜けるときに一致箇所が
オーバレイにまたがっているときに使われます。
探索中には、そのようなオーバレイは、
それらの属性invisibleとintangibleを一時的に変更することで
一時的に可視にされます。
特定のオーバレイに対して異なる扱いをしたければ、
属性isearch-open-invisible-temporaryに関数を与えておきます。
その関数は2つの引数で呼ばれます。
第1引数はオーバレイ、
第2引数は、オーバレイを可視にするt、あるいは、
オーバレイを再度不可視にするnilです。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
選択表示とは、 スクリーン上の特定の行を隠すための関連する機能対を指します。
最初の変種は、明示的な選択表示で、 Lispプログラムで使用するために設計されています。 テキストを変更することでどの行を隠すかを制御します。 テキストを不可視にする機能(see 節 38.4 不可視なテキスト)は、 この機能で部分的に置き換えてあります。
2番目の変種は、字下げに基づいて自動的に隠す行を選択します。 この変種は、ユーザーレベルの機能であるように設計されています。
明示的な選択表示を制御するには、 改行(コントロールJ)を復帰(コントロールM)に置き換えます。 置換前の改行に続いていたそれまでの行は見えなくなります。 厳密にいえば、改行だけが行を区切るため、 一時的にはもう行ではなくなっているのです。 つまり、先行する行の一部になっているのです。
選択表示は、編集コマンドに直接には影響しません。
たとえば、C-f(forward-char)は
躊躇なく不可視なテキストの中へポイントを移動します。
しかし、改行文字を復帰文字に置換すると
影響を受ける編集コマンドもあります。
たとえば、next-lineは、
改行だけを探すため不可視な行を飛び越してしまいます。
選択表示を使用するモードでは、
改行を考慮するようにコマンドを定義したり、
テキストの一部を可視/不可視にするコマンドを定義できます。
選択表示しているバッファをファイルに書き出すときには、 すべてのコントロールM(復帰)は改行として出力されます。 つまり、つぎにファイルを読み込むと不可視なものはなく、 普通に見えるのです。 選択表示の効果は、Emacsの内側だけで見えるのです。
selective-displayの値がtであると、
行内のコントロールM(復帰)以降の部分を表示しない。
これは明示的な選択表示である。
selective-displayの値が正整数であると、
字下げのコラム幅がその数より大きな行を表示しない。
バッファのある部分が不可視であると、
垂直方向に移動するコマンドは、
その部分が存在しないがごとく動作し、
1つのコマンドnext-lineで任意個数の不可視行を飛び越えられる。
しかし、(forward-charなどの)
文字単位の移動コマンドは不可視な部分を無視せず、
不可視な部分へのテキストの挿入/削除は可能である。
つぎの例では、selective-displayの値を変えて
バッファfooの見た目を示す。
バッファの内容に変更はない。
(setq selective-display nil)
=> nil
---------- Buffer: foo ----------
1 on this column
2on this column
3n this column
3n this column
2on this column
1 on this column
---------- Buffer: foo ----------
(setq selective-display 2)
=> 2
---------- Buffer: foo ----------
1 on this column
2on this column
2on this column
1 on this column
---------- Buffer: foo ----------
|
nil以外であると、
不可視なテキストが続く行末に`...'を表示する。
つぎの例は、上の例の続きである。
(setq selective-display-ellipses t)
=> t
---------- Buffer: foo ----------
1 on this column
2on this column ...
2on this column
1 on this column
---------- Buffer: foo ----------
|
表示テーブルを使って`...'にかわる別のテキストを指定できる。 see 節 38.14 表示テーブル。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
オーバレイ矢印(overlay arrow)は、 バッファの特定の行にユーザーの注意を向けるために有用です。 たとえば、デバッガとのインターフェイスを取るためのモードでは、 オーバレイ矢印で実行するコードの行を示します。
nilである。
オーバレイ文字列は、マーカが指すバッファでのみ表示される。 したがって、ある時点では、1つのバッファだけにオーバレイ矢印を表示できる。
同様のことは、属性before-stringのオーバレイを
作成してもできます。
See 節 38.8.1 オーバレイ属性。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
一時的な表示は、 出力をバッファに置き編集目的にではなく ユーザーに読むように提示するために Lispプログラムが使います。
文字列buffer-nameは、既存である必要はない一時的なバッファを指定する。
引数は、バッファではなく文字列であること。
(問い合わせずに)はじめにバッファを消去し、
with-output-to-temp-bufferが終了すると未変更と印を付ける。
with-output-to-temp-bufferは、
standard-outputに一時的なバッファを束縛し、
formsのフォーム群を評価する。
forms内で用いたLisp出力関数からの出力は
デフォルトでそのバッファに入る
(しかし、スクリーン表示やエコー領域のメッセージは、
用語の一般的な意味で『出力』であるが、
影響されない。)
see 節 18.5 出力関数。
formsの最後のフォームの値を返す。
---------- Buffer: foo ----------
This is the contents of foo.
---------- Buffer: foo ----------
(with-output-to-temp-buffer "foo"
(print 20)
(print standard-output))
=> #<buffer foo>
---------- Buffer: foo ----------
20
#<buffer foo>
---------- Buffer: foo ----------
|
nil以外であると、
ヘルプバッファを表示するために
with-output-to-temp-bufferがこの値を関数として呼び出す。
関数は1つの引数、つまり、表示すべきバッファを受け取る。
この関数では、
save-window-excursionを使いウィンドウとバッファを選択した内側で、
with-output-to-temp-bufferが普通に行うように
temp-buffer-show-hookを呼び出すのがよい。
with-output-to-temp-bufferが実行する。
フックを実行するときには、
ヘルプバッファがカレントバッファであり、
それを表示しているウィンドウが選択されているウィンドウである。
瞬間的な表示は、つぎの入力イベントまで持続する。
つぎの入力イベントがcharであると、
momentary-string-displayはそれを無視して戻る。
さもなければ、そのイベントは入力として使われるように保存される。
したがって、charを打つと文字列の表示が単に消えるだけであるが、
(たとえば)C-fを打つと文字列の表示が消えるだけでなく
(たぶん)ポイントを進めることになる。
引数charはデフォルトでは空白である。
momentary-string-displayの戻り値に意味はない。
文字列stringにコントロール文字が含まれなければ、
属性before-stringのオーバレイを作成(のちに削除)することで
より一般的な方法で同じことを行える。
see 節 38.8.1 オーバレイ属性。
messageがnil以外であると、
stringをバッファに表示中には、
messageをエコー領域に表示する。
nilであると、デフォルトは
「継続するには文字charを打つこと」
といったメッセージである。
つぎの例では、ポイントは始めは2行目の先頭に位置している。
---------- Buffer: foo ---------- This is the contents of foo. -!-Second line. ---------- Buffer: foo ---------- (momentary-string-display "**** Important Message! ****" (point) ?\r "Type RET when done reading") => t ---------- Buffer: foo ---------- This is the contents of foo. **** Important Message! ****Second line. ---------- Buffer: foo ---------- ---------- Echo Area ---------- Type RET when done reading ---------- Echo Area ---------- |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ユーザーに提示するためにスクリーン上でのバッファのテキストの見た目を 変えるためにオーバレイ(overlay)を使えます。 オーバレイは、特定のバッファに属するオブジェクトであり、 指定された開始位置と終了位置があります。 また、調べたり設定できる属性もあります。 これらの属性は、オーバレイの内側のテキストの表示に影響します。
38.8.1 オーバレイ属性 How to read and set properties. What properties do to the screen display. 38.8.2 オーバレイの管理 Creating, moving, finding overlays.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
オーバレイ属性はある意味でテキスト属性に似ていて、 どちらの属性でも文字の表示方法を変更できます。 しかし、多くの点で異なります。 テキスト属性は、テキストの一部であるとみなされますが、 オーバレイはテキストの一部とはみなしません。 したがって、さまざまなバッファや文字列のあいだでテキストをコピーしても テキスト属性は保存されますが、オーバレイは保存されません。 バッファ内のテキスト属性を変更するとバッファを変更済みと印を付けますが、 オーバレイを移動したりその属性を変更しても バッファの変更とは考えません。 テキスト属性の変更と異なり、 オーバレイの変更はバッファのアンドゥリストには記録されません。 比較のためにSee 節 31.19 テキスト属性。
priority
priorityの値の大きなものが他に優先し、
そのフェイス属性が他の低い順位の属性のフェイス属性に優先する。
現在、すべてのオーバレイ属性はテキスト属性に優先する。 負の優先順位の意味を決めかねているので、負の優先順位は避けてほしい。
window
windowがnil以外であると、
オーバレイをそのウィンドウだけに適用する。
category
categoryがあると、
それをオーバレイのカテゴリ(category)と呼ぶ。
これはシンボルであること。
シンボルの属性がオーバレイの属性のデフォルトの役割を果たす。
face
属性値がリストであると、その要素は、
(foreground-color . color-name)か
(background-color . color-name)の形でもよい。
これらの要素は、前景色だけや背景色だけを指定する。
したがって、使用する各色を表すフェイスを作成する必要はない。
mouse-face
faceのかわりに使われる。
modification-hooks
フック関数は、各変更の前後に呼び出される。 関数が受け取った情報を保存し呼び出しごとに比較すれば バッファテキストにどのような変更が行われたかを正確に判定できる。
変更前に呼ばれるときには、各関数は4つの引数を受け取る。
オーバレイ、nil、変更対象のテキスト範囲の先頭と末尾である。
変更後に呼ばれるときには、各関数は5つの引数を受け取る。
オーバレイ、t、変更済みのテキスト範囲の先頭と末尾、
その範囲の変更前のテキストの長さである。
(挿入では変更前の長さはゼロである。
削除では変更前の長さは削除された文字数であり、
変更後の先頭位置と末尾位置は同じである。)
insert-in-front-hooks
modification-hooksの関数群と同じである。
insert-behind-hooks
modification-hooksの関数群と同じである。
invisible
invisibleは、オーバレイ内のテキストを不可視にする。
つまり、それらはスクリーン上に現れない。
詳しくは、see 節 38.4 不可視なテキスト。
intangible
intangibleは、オーバレイにおいて
テキスト属性intangibleと同様に働く。
詳しくは、see 節 31.19.4 特別な意味を持つ属性。
isearch-open-invisible
isearch-open-invisible-temporary
before-string
after-string
evaporate
nil以外であると、
オーバレイが空に(つまり覆う文字がなく)なると、
自動的にオーバレイを削除する。
local-map
nil以外であると、当該部分のテキストに対する
キーマップを指定する。
ポイントの直後の文字がオーバレイに入っていると、
属性の値はバッファローカルなキーマップに置き換わる。
see 節 21.6 活性なキーマップ。
つぎは、オーバレイの属性を読み書きするための関数です。
categoryがありそれがシンボルであれば、
そのシンボルの属性propを使う。
さもなければ値はnilである。
与えられた文字のオーバレイ属性とテキスト属性の両方を調べる 関数code{get-char-property}も参照してください。 See 節 31.19.1 テキスト属性を調べる。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
本節では、オーバレイを作成、削除、移動したり、 それらの内容を調べる関数について述べます。
引数front-advanceとrear-advanceは、 オーバレイの開始位置と終了位置における挿入型を指定する。 see 節 30.5 マーカの挿入型。
削除したオーバレイは恒久的に無意味ではない。
move-overlayを呼び出して新たなバッファ内位置をそれに与えられる。
戻り値はoverlayである。
これは、オーバレイの端を変更する唯一の正しい方法である。 オーバレイのマーカを手で修正しようとしないこと。 他の重要なデータ構造を更新しそこない、 いくつかのオーバレイを『失う』ことにもなりかねない。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
すべての文字が同じ表示幅ではありませんから、 これらの関数で文字の表示幅を検査できます。 関連する関数については、31.17.1 字下げ基本関数とSee 節 29.2.5 スクリーン行分の移動
stringが幅widthに満たない場合、 stringの終りで結果は終る。 string内の1つの複数コラム文字がコラムwidthを越える場合には、 その文字は結果に含めない。 したがって、結果はwidthより短くなりえるがそれを越えることはない。
省略可能な引数start-columnは、開始コラムを指定する。
これがnil以外であると、文字列のはじめの
start-columnコラムを結果から省く。
string内の1つの複数コラム文字がコラムstart-columnを越える場合には、
その文字は結果に含めない。
省略可能な引数paddingがnil以外であると、
結果の文字列の先頭や末尾に付加して
ちょうどwidthコラムにするためのパディング文字である。
widthより短くなる場合に
結果の末尾にパディング文字を使う。
複数コラム文字がコラムstart-columnを越える場合には、
結果の先頭にパディング文字を使う。
(truncate-string-to-width "\tab\t" 12 4)
=> "ab"
(truncate-string-to-width "\tab\t" 12 4 ?\ )
=> " ab "
|
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
フェイス(face)とは、図形的な属性、つまり、 フォント、前景色、背景色、下線 の名前付きの集合体です。 フェイスはスクリーン上のテキストの表示を制御します。
各フェイスには固有のフェイス番号(face number)があり、 Emacs内部の下位レベルでフェイスを区別するために使われます。 しかし、ほとんどの目的には、 Lispプログラムでは名前でフェイスを参照できます。
tを返す。
さもなければnilを返す。
各フェイス名はすべてのフレームで有効であり、 デフォルトではすべてのフレームで同じ意味を持ちます。 しかし、望みの1つのフレームで特定のフェイス名に 特定の意味を持たせることもできます。
38.10.1 標準フェイス The faces Emacs normally comes with. 38.10.2 フェイスを定義する How to define a face with defface.38.10.3 表示向けにフェイスを併合する How Emacs decides which face to use for a character. 38.10.4 フェイスを扱う関数 How to define and examine faces.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
つぎの表はすべての標準フェイスとその用途です。
default
modeline
region
secondary-selection
highlight
underline
bold
italic
bold-italic
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
新たなフェイスを定義する方法は、deffaceを使うことです。
これは、カスタマイズバッファ
(see 節 `簡便なカスタマイズ方法' in
deffaceを実行すると、specに従ったフェイスを定義し、
ファイル`.emacs'から読み取った任意のカスタマイズを
specの指定に優先させる。
specの目的は、異なる種類の端末でフェイスがどのような
見た目になるかを指定することである。
(display atts)の形の要素から成る
連想リストであること。
要素のCARのdisplayは端末の種類を指定する。
CDRのattsはフェイスの属性とその値のリストであり、
その種類の端末上でそのフェイスがどのように見えるかを指定する。
可能な属性は、custom-face-attributesの値で定義される。
specの要素のdisplay部分は、要素を適用するフレームを決定する。 specの1つより多くの要素が指定されたフレームに一致する場合、 そのフレームに一致した最初の要素だけを用いる。 displayには2つの可能性がある。
t
tはspecの最後の(あるいは唯一)の要素に使う。
(characteristic value...)の形であること。
ここで、characteristicはフレームの分類方法であり、
valueはdisplayを適用すべき分類とみなす値である。
特性characteristicの可能な値はつぎのとおりである。
type
x、pc(MS-DOSのコンソール)、
w32(MS Windows 9X/NT)、ttyのいずれかである。
class
color、grayscale、monoのいずれかである。
background
lightかdarkのいずれかである。
displayの1つの要素において、 指定されたcharacteristicに 1つより多くのvalueを指定すると、 それらのいずれの値でも受け入れる。 displayに1つより多くの要素がある場合、 各要素は異なるcharacteristicを指定すること。 そうすれば、フレームの各特性は displayに指定されたそのフレーム向けの valueの1つに一致するはずである。
標準フェイスregionをdeffaceで
定義するとつぎのようになります。
(defface region
((((class color) (background dark))
(:background "blue"))
(t (:background "gray")))
"Used for displaying the region.")
|
内部的にはdeffaceは、
deffaceに指定されたフェイス属性の記録には
シンボルの属性face-defface-spec、
カスタマイズバッファでユーザーが保存した属性の記録には
saved-face、
説明文字列の記録にはface-documentationを使います。
nil以外であると、
フェイスの定義を解釈する際に用いる背景の型を指定する。
これがdarkであると、
実際の背景色に関わらずEmacsはすべてのフレームの背景は暗いとみなす。
これがlightであると、
Emacsはすべてのフレームの背景は明るいとみなす。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
テキストの表示に使用するフェイスを指定する方法はつぎのとおりです。
faceを持てる。
それがある場合、そのフェイスで表示される。
see 節 31.19.4 特別な意味を持つ属性。
文字に属性mouse-faceがある場合は、
マウスが文字に『十分近い』ときには属性faceのかわりにそれを使う。
faceやmouse-faceを持てる。
そのオーバレイが覆うすべてのテキストに適用される。
region-faceを参照)
で強調表示する。
ある文字に対してこれらのさまざまな指定が 1つより多くのフェイスを指定する場合、 Emacsは指定されたさまざまなフェイスの属性を併合します。 特別な字形のフェイスが最初です。 適切ならば、つぎはリージョンの強調表示のフェイスです。 そのつぎはオーバレイのフェイスの属性、 さらにテキスト属性のフェイスが続き、 最後はデフォルトのフェイスです。
複数のオーバレイが1つの文字を覆う場合、 高い優先順位のオーバレイが低いものに優先します。 See 節 38.8 オーバレイ。
フォントや表示色のような属性がうえのどれでも指定されていない場合には、 フレーム独自のフォントや表示色を使います。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
フェイスの属性で指定できるのは、フォント、前景色、背景色、下線です。
フェイスでは値nilを指定することでこれらを未指定にできます。
以下は、フェイスを作成したり変更する基本関数です。
nilとした
nameという名前の新たなフェイスを定義する。
nameという名前のフェイスが既存ならばなにもしない。
省略可能な引数フレームframeを指定すると、 この関数はそのフレームだけに適用する。 さもなければ、各フレームにおいて個別に、 そのフレームのold-faceの属性を 同じフレームのnew-faceにコピーする。
省略可能な引数フレームnew-frameを指定すると、
copy-faceは
フレームframeのold-faceの属性を
フレームnew-frameのnew-faceにコピーする。
以下の関数を使って既存のフレームの属性を変更できます。 フレームframeを指定すると、そのフレームだけに影響します。 さもなければ、新たなフレームに適用されるデフォルトに加えて すべてのフレームに影響します。
白黒スクリーンでは、濃淡は点猫パターンで実現する。
nilであること。
白黒階調の特定の濃淡を扱うために自動的に点猫パターンを使うため、 普通は点猫パターンに注意する必要はない。
nil以外は太字あり、nilは太字なしを意味する。
nil以外は斜体あり、nilは斜体なしを意味する。
nil以外は下線あり、nilは下線なしを意味する。
つぎの関数は、フェイスの属性を調べます。 フレームframeを指定しない場合、 新たなフレーム向けのデフォルトのデータを参照します。
nilを返す。
nilを返す。
tを返す。
tを返す。
フェイスの各属性がデフォルトフェイスの対応する属性に等しいか
(デフォルトから継承すること意味する)nilであると、
フェイスはデフォルトのフェイスと『等しい』とみなす。
通常、値はregionという名前のフェイスのフェイス番号である。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
本節では、ユーザーが閉じ括弧を挿入したときに Emacsが対応する開き括弧を指し示す機構について述べます。
blink-paren-functionの値がnilであると、なにもしない。
nilであると、blink-matching-openはなにもしない。
blink-paren-functionのデフォルト値である。
閉じ括弧構文の文字のうしろにポイントがあることを仮定し、
カーソルを対応する開き括弧へ一時的に移動する。
その文字がスクリーン上になければ、
その文字が現れる文脈をエコー領域に表示する。
遅れが大きくならないように、
blink-matching-paren-distance文字より離れては探さない。
つぎは、この関数を明示的に呼び出す例である。
(defun interactive-blink-matching-open ()
"Indicate momentarily the start of sexp before point."
(interactive)
(let ((blink-matching-paren-distance
(buffer-size))
(blink-matching-paren t))
(blink-matching-open)))
|
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
nil以外は使うことを意味し、
nilは使わないことを意味する。
デフォルトはnilである。
nil以外であると、モード行を反転表示する。
さもなければ、テキストと同様にモード行を普通に表示する。
デフォルトはtである。
ウィンドウフレームでは、
modelineという名前のフェイスを使ってモード行を表示する。
このフェイスは、変更していなければ、デフォルトフェイスの反転表示である。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
通常の画面表示慣習は、各文字コードをどのように表示するかを定義します。 表示テーブル(see 節 38.14 表示テーブル)を設定すれば、 これらの慣習を無効にできます。 通常の画面表示慣習をつぎに示します。
tab-widthで決定される位置まで空白として表示する。
ctl-arrowの値に従って2つの表示方法の一方を使う。
ctl-arrowがnil以外であると、
これらのコードを2つの字形列に対応付け、
最初の字形は`^'のASCIIコードである。
(表示テーブルで`^'のかわりに使う字形を指定できる。)
さもなければ、これらは128から255の範囲のコードと同様に対応付ける。
通常の画面表示慣習は、たとえ表示テーブルがあっても、
活性な表示テーブルにおいてその文字に対する項目がnilであるような
文字すべてに適用されます。
したがって、表示テーブルを設定するときには、
特別なふるまいをさせたい文字だけを指定すればよいのです。
これらの変数は、特定の文字群のスクリーンへの表示方法に影響します。
これらは文字が占めるコラム数を変化させるので、
字下げ関数にも影響します。
これらの変数は、モード行の表示方法にも影響します。
新たな値を用いてモード行の再表示を強制したいときには、
関数force-mode-line-update(see 節 22.3 モード行の書式)を
呼び出します。
nil以外であると、`^A'のように
カレットに続けて文字を表示する。
nilであると、`\001'のように
バックスラッシュに続けて3桁の8進数字で表示する。
ctl-arrowを書き換えていないバッファ向けの
ctl-arrowのデフォルト値である。
see 節 10.10.3 バッファローカル変数のデフォルト値。
tab-to-tab-stopで設定する
ユーザー設定可能なタブストップとはまったく独立であることに注意。
see 節 31.17.5 調整可能な『タブストップ』。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
表示テーブル(display table)機能を使って、 すべての可能な文字コードのスクリーンへの表示方法を制御できます。 これは、ASCII文字集合にない文字を用いる ヨーロッパの言語を表示するのに有用です。
表示テーブルは、各文字コードを字形(glyph)の列に対応付けます。 各字形は、スクリーン上で1文字を占める像です。 字形テーブル(glyph table)を使えば、 読者の端末に各字形を表示する方法を定義することもできます。
表示テーブルは、モード行の表示方法にも影響します。
新たな表示テーブルを用いてモード行の再表示を強制したいときには、
関数force-mode-line-update(see 節 22.3 モード行の書式)を
呼び出します。
38.14.1 表示テーブルの書式 What a display table consists of. 38.14.2 活性な表示テーブル How Emacs selects a display table to use. 38.14.3 字形 How to define a glyph, and what glyphs mean.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
表示テーブルは、実際にはサブタイプがdisplay-tableである
文字テーブル(see 節 6.6 文字テーブル)です。
nilである。
表示テーブルの通常の要素は、文字コードで添字付けします。
添字cの要素は、文字コードcの表示方法を指定します。
値はnilであるか、字形の値のベクトル(see 節 38.14.3 字形)です。
要素がnilであると、その文字を通常の画面表示慣習
(see 節 38.13 通常の画面表示慣習)に従って表示する指定です。
表示テーブルを使って改行文字の表示を変更すると、 バッファ全体は長い1つの『行』として表示されます。
表示テーブルには6つの『追加スロット』もあり、
それらは特別な目的を果たします。
それらの意味をつぎに示します。
スロットの内容がnilであると、
そのスロットに対して以下に述べる
デフォルトを使うことを意味します。
たとえば、ctl-arrowにnil以外の値を設定した効果を
模倣する表示テーブルの作成方法をつぎに示します。
(setq disptab (make-display-table))
(let ((i 0))
(while (< i 32)
(or (= i ?\t) (= i ?\n)
(aset disptab i (vector ?^ (+ i 64))))
(setq i (1+ i)))
(aset disptab 127 (vector ?^ ??)))
|
truncation、wrap、
escape、control、selective-display、
vertical-borderである。
truncation、wrap、
escape、control、selective-display、
vertical-borderである。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
各ウィンドウに表示テーブルを指定でき、 各バッファにも表示テーブルを指定できます。 バッファbがウィンドウwに表示されているとき、 ウィンドウwに表示テーブルがあればそれを使って表示します。 さもなければ、バッファbに表示テーブルがあればそれを使います。 それ以外では、標準の表示テーブルがあればそれを使います。 選択されている表示テーブルを活性な表示テーブルと呼びます。
nilを返す。
nilであること。
nilであると、バッファに表示テーブルを
割り付けていないことを意味する。
nilである。
特定のウィンドウにおいて使用する表示テーブルがない場合には、
つまり、ウィンドウで未指定であり、そのバッファでも未指定であり、
standard-display-tableがnilである場合には、
そのウィンドウ内のすべての文字コードには通常の画面表示慣習を使います。
See 節 38.13 通常の画面表示慣習。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
字形(glyph)は、文字を一般化したものです。 スクリーン上で1文字を占める像を表します。 文字と同様に、字形はLispでは整数で表現します。
字形としての各整数の意味は、字形テーブルで定義されます。
これは変数glyph-tableの値です。
nilであると、
すべての字形は単純(下記参照)である。
字形テーブルの要素として可能な型はつぎのとおりです。
nil
字形コードが字形テーブルの長さに等しいか大きいと、 そのコードは自動的に単純とします。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
本節では、ユーザーの注意を引くためにEmacsにベルを鳴らせる (あるいはスクリーンを点滅させる)方法について述べます。 ベルを鳴らす頻度はなるべく控えめにしてください。 頻繁にベルが鳴るとわずらわしいものです。 エラーを通知するほうがふさわしいときには、 単にベルを鳴らさないように注意してください。 (see 節 9.5.3 エラー。)
visible-bellを参照)。
また、do-not-terminateがnilであると
現在実行中のキーボードマクロを終了する。
dingの同義語。
nil以外であると点滅するを意味し、
nilであると点滅しないを意味する。
これは、ウィンドウシステムを用いている場合か、
端末のtermcapの定義にビジュアルベル機能(`vb')がある
文字端末で有効である。
nil以外であると、
Emacsに『ベルを鳴らす』方法を指定する。
この値は、引数なしの関数であること。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsはいくつかのウィンドウシステムで、 特にXウィンドウシステムで動作します。 EmacsもXも用語『ウィンドウ』を使いますが、用法は異なります。 Emacsの1つのフレームは、Xでは1つのウィンドウです。 Emacsの個々のウィンドウについては、Xはまったくわかりません。
x
pc
w32
nil
term-setup-hookを実行し終えてから、
このフック実行する。
このフックは内部目的用であり、 ウィンドウシステムとの通信を設定し、最初のウィンドウを作成する。 ユーザーが干渉すべきではない。
| [ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |