[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
本章では、Emacsがユーザーに提示する画面表示に関連する さまざまな機能について述べます。
38.1 スクリーン全体の再表示 | Clearing the screen and redrawing everything on it. | |
38.2 表示の切り詰め | Folding or wrapping long text lines. | |
38.3 エコー領域 | Where messages are displayed. | |
38.4 不可視なテキスト | Hiding part of the buffer text. | |
38.5 選択表示 | Hiding part of the buffer text (the old way). | |
38.6 オーバレイ矢印 | Display of an arrow to indicate position. | |
38.7 一時的な表示 | Displays that go away automatically. | |
38.8 オーバレイ | Use overlays to highlight parts of the buffer. | |
38.9 表示幅 | How wide is a character or string. | |
38.10 フェイス | A face defines a graphics appearance: font, color, etc. | |
38.11 括弧を点滅する | How Emacs shows the matching open parenthesis. | |
38.12 反転表示 | Specifying how the screen looks. | |
38.13 通常の画面表示慣習 | The usual conventions for displaying nonprinting chars. | |
38.14 表示テーブル | How to specify other conventions. | |
38.15 ベルを鳴らす | Audible signal to the user. | |
38.16 ウィンドウシステム | Which window system is being used. |
関数redraw-frame
は、指定したフレーム(see section 28. フレーム)の
内容全体を再表示します。
より強力なのはredraw-display
です。
ユーザー入力の処理のほうが再表示より絶対的に優先します。 入力があるときにこれらの関数を呼び出してもただちにはなにもしませんが、 入力をすべて処理し終えてから再表示します。
通常、Emacsを停止したり再開しても スクリーン全体を再表示します。 Emacsのようなディスプレイ向けプログラムと通常の逐次表示向けに、 表示内容を個別に記録できる端末エミュレータもあります。 そのような端末を使っているときには、 再開時の再表示を禁止した場合もあります。
nil
以外であると再描画の必要はないことを意味し、
nil
であると再描画が必要であることを意味する。
デフォルトはnil
である。
テキスト行がウィンドウの右端を越えていると、 その行をつぎのスクリーン行へ継続するか、 スクリーン行1行に切り詰めます。 長いテキスト行を表示するために使われる追加のスクリーン行を 継続行と呼びます。 通常、ウィンドウの最右端のコラムに現れる`$'で切り詰めたことを示し、 `\'でつぎの行に『折り返した』こと、 つまり、継続している行であることを示します。 (表示テーブルで別の文字を指定できる。 38.14 表示テーブルを参照。)
継続することと詰め込みは別のことです。 継続はスクリーン上だけのことであり、バッファ内容は変わりません。 また、継続では単語の境界ではなく、正確にスクリーンの右端で 行を分けます。 See section 31.11 詰め込み。
nil
であり継続を意味する。
値がnil
以外であると、そのような行を切り詰める。
変数truncate-partial-width-windows
がnil
以外であると、
(フレーム内で)左右に並んだウィンドウでは、
truncate-lines
の値に関わらずつねに切り詰る。
truncate-lines
のバッファローカルな値を持たない
バッファ向けのtruncate-lines
のデフォルト値である。
nil
以外であると、そのような行を切り詰める。
さもなければ、truncate-lines
に従って表示する。
ウィンドウで水平方向にスクロールしている(see section 27.12 水平スクロール)と、 強制的に切り詰めます。
継続や切り詰めを表す文字は、表示テーブルを使って変更できます。 See section 38.14 表示テーブル。
バッファにとても長い行があるときにそれらの表示に継続行を使うと、
それによりEmacsの再表示が遅くなります。
コラム計算や字下げ関数も遅くなります。
そのような場合には、cache-long-line-scans
にt
を
設定するのがよいです。
nil
以外であると、
字下げ/移動関数とEmacsの再表示において、
バッファを走査した結果をキャッシュし、
バッファが変更されていないときには
キャッシュを調べてバッファの対象領域の再走査を回避する。
キャッシュするようにすると、短い行の処理が多少遅くなる。
この変数は、すべてのバッファで自動的にバッファローカルである。
エコー領域(echo area)は、
基本関数message
でメッセージを表示したり、
打鍵を表示するために使われます。
(活性な)ミニバッファはエコー領域と
同じスクリーン上の位置に現れますが、
エコー領域とミニバッファは同じものではありません。
GNU Emacs マニュアルには、
エコー領域とミニバッファがスクリーンの同じ箇所を使う際の
衝突を回避する規則が述べてあります
(see section `ミニバッファ' in GNU Emacs マニュアル)。
エラーメッセージもエコー領域に現れます。
See section 9.5.3 エラー。
エコー領域に表示するには、
ストリーム(see section 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 section 20.4 コマンドループからの情報)が
nil
かリストのいずれかであると、
メッセージを表示するために対話ボックスかポップアップメニューを用いる。
さもなければエコー領域を用いる。
(これは、同様な決定をくだすy-or-n-p
の判定条件と同じである。
see section 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 ...)) |
値がゼロであると、コマンド入力を表示しない。
属性invisible
で文字群を不可視にできます。
つまり、それらをスクリーンに表示されないようにするのです。
テキスト属性(see section 31.19 テキスト属性)か
オーバレイの属性(see section 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
です。
選択表示とは、 スクリーン上の特定の行を隠すための関連する機能対を指します。
最初の変種は、明示的な選択表示で、 Lispプログラムで使用するために設計されています。 テキストを変更することでどの行を隠すかを制御します。 テキストを不可視にする機能(see section 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 section 38.14 表示テーブル。
オーバレイ矢印(overlay arrow)は、 バッファの特定の行にユーザーの注意を向けるために有用です。 たとえば、デバッガとのインターフェイスを取るためのモードでは、 オーバレイ矢印で実行するコードの行を示します。
nil
である。
オーバレイ文字列は、マーカが指すバッファでのみ表示される。 したがって、ある時点では、1つのバッファだけにオーバレイ矢印を表示できる。
同様のことは、属性before-string
のオーバレイを
作成してもできます。
See section 38.8.1 オーバレイ属性。
一時的な表示は、 出力をバッファに置き編集目的にではなく ユーザーに読むように提示するために Lispプログラムが使います。
文字列buffer-nameは、既存である必要はない一時的なバッファを指定する。
引数は、バッファではなく文字列であること。
(問い合わせずに)はじめにバッファを消去し、
with-output-to-temp-buffer
が終了すると未変更と印を付ける。
with-output-to-temp-buffer
は、
standard-output
に一時的なバッファを束縛し、
formsのフォーム群を評価する。
forms内で用いたLisp出力関数からの出力は
デフォルトでそのバッファに入る
(しかし、スクリーン表示やエコー領域のメッセージは、
用語の一般的な意味で『出力』であるが、
影響されない。)
see section 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 section 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 ---------- |
ユーザーに提示するためにスクリーン上でのバッファのテキストの見た目を 変えるためにオーバレイ(overlay)を使えます。 オーバレイは、特定のバッファに属するオブジェクトであり、 指定された開始位置と終了位置があります。 また、調べたり設定できる属性もあります。 これらの属性は、オーバレイの内側のテキストの表示に影響します。
38.8.1 オーバレイ属性 | How to read and set properties. What properties do to the screen display. | |
38.8.2 オーバレイの管理 | Creating, moving, finding overlays. |
オーバレイ属性はある意味でテキスト属性に似ていて、 どちらの属性でも文字の表示方法を変更できます。 しかし、多くの点で異なります。 テキスト属性は、テキストの一部であるとみなされますが、 オーバレイはテキストの一部とはみなしません。 したがって、さまざまなバッファや文字列のあいだでテキストをコピーしても テキスト属性は保存されますが、オーバレイは保存されません。 バッファ内のテキスト属性を変更するとバッファを変更済みと印を付けますが、 オーバレイを移動したりその属性を変更しても バッファの変更とは考えません。 テキスト属性の変更と異なり、 オーバレイの変更はバッファのアンドゥリストには記録されません。 比較のためにSee section 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 section 38.4 不可視なテキスト。
intangible
intangible
は、オーバレイにおいて
テキスト属性intangible
と同様に働く。
詳しくは、see section 31.19.4 特別な意味を持つ属性。
isearch-open-invisible
isearch-open-invisible-temporary
before-string
after-string
evaporate
nil
以外であると、
オーバレイが空に(つまり覆う文字がなく)なると、
自動的にオーバレイを削除する。
local-map
nil
以外であると、当該部分のテキストに対する
キーマップを指定する。
ポイントの直後の文字がオーバレイに入っていると、
属性の値はバッファローカルなキーマップに置き換わる。
see section 21.6 活性なキーマップ。
つぎは、オーバレイの属性を読み書きするための関数です。
category
がありそれがシンボルであれば、
そのシンボルの属性propを使う。
さもなければ値はnil
である。
与えられた文字のオーバレイ属性とテキスト属性の両方を調べる
関数get-char-property
も参照してください。
See section 31.19.1 テキスト属性を調べる。
本節では、オーバレイを作成、削除、移動したり、 それらの内容を調べる関数について述べます。
引数front-advanceとrear-advanceは、 オーバレイの開始位置と終了位置における挿入型を指定する。 see section 30.5 マーカの挿入型。
削除したオーバレイは恒久的に無意味ではない。
move-overlay
を呼び出して新たなバッファ内位置をそれに与えられる。
戻り値はoverlayである。
これは、オーバレイの端を変更する唯一の正しい方法である。 オーバレイのマーカを手で修正しようとしないこと。 他の重要なデータ構造を更新しそこない、 いくつかのオーバレイを『失う』ことにもなりかねない。
すべての文字が同じ表示幅ではありませんから、 これらの関数で文字の表示幅を検査できます。 関連する関数については、31.17.1 字下げ基本関数とSee section 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 " |
フェイス(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. |
つぎの表はすべての標準フェイスとその用途です。
default
modeline
region
secondary-selection
highlight
underline
bold
italic
bold-italic
新たなフェイスを定義する方法は、defface
を使うことです。
これは、カスタマイズバッファ
(see section `簡便なカスタマイズ方法' in GNU Emacs マニュアル)
を用いてユーザーがカスタマイズできる
カスタマイズ項目(see section 13. カスタマイズ定義の書き方)の一種を作成します。
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はすべてのフレームの背景は明るいとみなす。
テキストの表示に使用するフェイスを指定する方法はつぎのとおりです。
face
を持てる。
それがある場合、そのフェイスで表示される。
see section 31.19.4 特別な意味を持つ属性。
文字に属性mouse-face
がある場合は、
マウスが文字に『十分近い』ときには属性face
のかわりにそれを使う。
face
やmouse-face
を持てる。
そのオーバレイが覆うすべてのテキストに適用される。
region-face
を参照)
で強調表示する。
ある文字に対してこれらのさまざまな指定が 1つより多くのフェイスを指定する場合、 Emacsは指定されたさまざまなフェイスの属性を併合します。 特別な字形のフェイスが最初です。 適切ならば、つぎはリージョンの強調表示のフェイスです。 そのつぎはオーバレイのフェイスの属性、 さらにテキスト属性のフェイスが続き、 最後はデフォルトのフェイスです。
複数のオーバレイが1つの文字を覆う場合、 高い優先順位のオーバレイが低いものに優先します。 See section 38.8 オーバレイ。
フォントや表示色のような属性がうえのどれでも指定されていない場合には、 フレーム独自のフォントや表示色を使います。
フェイスの属性で指定できるのは、フォント、前景色、背景色、下線です。
フェイスでは値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
という名前のフェイスのフェイス番号である。
本節では、ユーザーが閉じ括弧を挿入したときに 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))) |
nil
以外は使うことを意味し、
nil
は使わないことを意味する。
デフォルトはnil
である。
nil
以外であると、モード行を反転表示する。
さもなければ、テキストと同様にモード行を普通に表示する。
デフォルトはt
である。
ウィンドウフレームでは、
modeline
という名前のフェイスを使ってモード行を表示する。
このフェイスは、変更していなければ、デフォルトフェイスの反転表示である。
通常の画面表示慣習は、各文字コードをどのように表示するかを定義します。 表示テーブル(see section 38.14 表示テーブル)を設定すれば、 これらの慣習を無効にできます。 通常の画面表示慣習をつぎに示します。
tab-width
で決定される位置まで空白として表示する。
ctl-arrow
の値に従って2つの表示方法の一方を使う。
ctl-arrow
がnil
以外であると、
これらのコードを2つの字形列に対応付け、
最初の字形は`^'のASCIIコードである。
(表示テーブルで`^'のかわりに使う字形を指定できる。)
さもなければ、これらは128から255の範囲のコードと同様に対応付ける。
通常の画面表示慣習は、たとえ表示テーブルがあっても、
活性な表示テーブルにおいてその文字に対する項目がnil
であるような
文字すべてに適用されます。
したがって、表示テーブルを設定するときには、
特別なふるまいをさせたい文字だけを指定すればよいのです。
これらの変数は、特定の文字群のスクリーンへの表示方法に影響します。
これらは文字が占めるコラム数を変化させるので、
字下げ関数にも影響します。
これらの変数は、モード行の表示方法にも影響します。
新たな値を用いてモード行の再表示を強制したいときには、
関数force-mode-line-update
(see section 22.3 モード行の書式)を
呼び出します。
nil
以外であると、`^A'のように
カレットに続けて文字を表示する。
nil
であると、`\001'のように
バックスラッシュに続けて3桁の8進数字で表示する。
ctl-arrow
を書き換えていないバッファ向けの
ctl-arrow
のデフォルト値である。
see section 10.10.3 バッファローカル変数のデフォルト値。
tab-to-tab-stop
で設定する
ユーザー設定可能なタブストップとはまったく独立であることに注意。
see section 31.17.5 調整可能な『タブストップ』。
表示テーブル(display table)機能を使って、 すべての可能な文字コードのスクリーンへの表示方法を制御できます。 これは、ASCII文字集合にない文字を用いる ヨーロッパの言語を表示するのに有用です。
表示テーブルは、各文字コードを字形(glyph)の列に対応付けます。 各字形は、スクリーン上で1文字を占める像です。 字形テーブル(glyph table)を使えば、 読者の端末に各字形を表示する方法を定義することもできます。
表示テーブルは、モード行の表示方法にも影響します。
新たな表示テーブルを用いてモード行の再表示を強制したいときには、
関数force-mode-line-update
(see section 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. |
表示テーブルは、実際にはサブタイプがdisplay-table
である
文字テーブル(see section 6.6 文字テーブル)です。
nil
である。
表示テーブルの通常の要素は、文字コードで添字付けします。
添字cの要素は、文字コードcの表示方法を指定します。
値はnil
であるか、字形の値のベクトル(see section 38.14.3 字形)です。
要素がnil
であると、その文字を通常の画面表示慣習
(see section 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
である。
各ウィンドウに表示テーブルを指定でき、 各バッファにも表示テーブルを指定できます。 バッファbがウィンドウwに表示されているとき、 ウィンドウwに表示テーブルがあればそれを使って表示します。 さもなければ、バッファbに表示テーブルがあればそれを使います。 それ以外では、標準の表示テーブルがあればそれを使います。 選択されている表示テーブルを活性な表示テーブルと呼びます。
nil
を返す。
nil
であること。
nil
であると、バッファに表示テーブルを
割り付けていないことを意味する。
nil
である。
特定のウィンドウにおいて使用する表示テーブルがない場合には、
つまり、ウィンドウで未指定であり、そのバッファでも未指定であり、
standard-display-table
がnil
である場合には、
そのウィンドウ内のすべての文字コードには通常の画面表示慣習を使います。
See section 38.13 通常の画面表示慣習。
字形(glyph)は、文字を一般化したものです。 スクリーン上で1文字を占める像を表します。 文字と同様に、字形はLispでは整数で表現します。
字形としての各整数の意味は、字形テーブルで定義されます。
これは変数glyph-table
の値です。
nil
であると、
すべての字形は単純(下記参照)である。
字形テーブルの要素として可能な型はつぎのとおりです。
nil
字形コードが字形テーブルの長さに等しいか大きいと、 そのコードは自動的に単純とします。
本節では、ユーザーの注意を引くためにEmacsにベルを鳴らせる (あるいはスクリーンを点滅させる)方法について述べます。 ベルを鳴らす頻度はなるべく控えめにしてください。 頻繁にベルが鳴るとわずらわしいものです。 エラーを通知するほうがふさわしいときには、 単にベルを鳴らさないように注意してください。 (see section 9.5.3 エラー。)
visible-bell
を参照)。
また、do-not-terminateがnil
であると
現在実行中のキーボードマクロを終了する。
ding
の同義語。
nil
以外であると点滅するを意味し、
nil
であると点滅しないを意味する。
これは、ウィンドウシステムを用いている場合か、
端末のtermcapの定義にビジュアルベル機能(`vb')がある
文字端末で有効である。
nil
以外であると、
Emacsに『ベルを鳴らす』方法を指定する。
この値は、引数なしの関数であること。
Emacsはいくつかのウィンドウシステムで、 特にXウィンドウシステムで動作します。 EmacsもXも用語『ウィンドウ』を使いますが、用法は異なります。 Emacsの1つのフレームは、Xでは1つのウィンドウです。 Emacsの個々のウィンドウについては、Xはまったくわかりません。
x
pc
w32
nil
term-setup-hook
を実行し終えてから、
このフック実行する。
このフックは内部目的用であり、 ウィンドウシステムとの通信を設定し、最初のウィンドウを作成する。 ユーザーが干渉すべきではない。
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |