[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35. Emacsの表示

この章ではEmacsのユーザに対する表示機能に関連した機能について説明します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.1 画面の再表示

関数redraw-frame は指定されたフレーム全体の内容を再表示します。 See section フレーム

Function: redraw-frame frame

この関数はフレームframeの内容を消去し再表示します。

さらに強力なのはredraw-display です。

Command: redraw-display

この関数は表示されているフレームすべての内容を消去し再表示します。

ユーザからの入力の処理は再表示よりも絶対に優先されます。入力がある場合に これらの関数を呼んでも、すぐには何もしませんが、すべての入力を処理した後 で、全体の再表示がいつか必ず起こります。

通常Emacsをサスペンドしたりリジュームしたりしたときも画面が再表示 されます。端末エミュレータによってはEmacsのような画面指向のプログラムの ために、普通の逐次的な表示とは別の表示内容を保持するものがあ りますが、このような端末を使っているときには再開時の再表示を禁止した いと思うかもしれません。

Variable: no-redraw-on-reenter

この変数はEmacsがサスペンドされてそれからリジュームされたときに画面全体を 再表示すべきかどうかを制御します。非nilの場合は再表示を行ない、 nilの場合は再表示を行ないません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.2 画面サイズ

画面サイズ関数は端末の高さ・幅にアクセスしたり、設定したりします。 複数のフレームを使っている場合には、選択されているフレームに対して働きま す (see section フレーム)。

Function: screen-height

この関数は画面上で表示に使用可能な行数を返します。

 
(screen-height)
     ⇒ 50
Function: screen-width

この関数は画面上で表示に使用可能な桁数を返します。

 
(screen-width)
     ⇒ 80
Function: set-screen-height lines &optional not-actual-size

この関数は端末がlines行を表示可能であることを宣言します。 既存のウィンドウのサイズはこれに合うように同じ比率で変更されます。

not-actual-sizenilでない場合、Emacsは lines行を出力しますが、実際の画面の高さの値を変更しません。 (カーソルを正しく位置づけるためには実際のサイズが正しいことが必要なので すが)。端末が実際に持っている高さよりも小さい値を使うと、小さい画面で 何が起こるかを再現するためとか、画面全体を使うと端末の動作がおかしくなる 場合に便利でしょう。

linesが以前の値と違う場合には、画面全体が消去されてから新しいサイ ズで再表示されます。

この関数はnilを返します.

Function: set-screen-width columns &optional not-actual-size

この関数は端末がcolumns桁を表示可能であることを宣言します。 詳細はset-screen-heightを参照。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.3 切捨て表示

テキストの行がウィンドウの右端を超えた場合には、その行は画面の次の行に続 きが表示されるか、右端を切捨てて一行に表示されるか、の選択肢があります。 長いテキスト行を表示するために使われる行のことを継続(continuation) 行といいます。普通、右端の桁にある`$'は行の切捨てを示します。また右端 の`\'は行が次の行に"wrap"、つまり続いていることを示しています。 (表示テーブルを使えばほかの表示をすることもできます。 表示テーブルを参照。)

継続は行詰め込み(filling)とは違うことに注意してください。継続は画面の上 だけで起こり、バッファの内容に対しては起こらないし、また継続はちょうど画 面の左端で行を分割するのであって、単語の境界ではありません。 See section 行詰め

User Option: truncate-lines

このバッファ・ローカル変数はウィンドウの右端にはみだす行をEmacsがどう表示 するかを制御します。既定値はnilで、継続表示を指定します。その値が nilでない場合は、はみだす行は切り捨て表示されます。

変数truncate-partial-width-windowsnilでない場合は、 truncate-linesの値に関わらず(一つのフレームの中で)横に並んだウィ ンドウではいつも切捨て表示が採用されます。

User Option: default-truncate-lines

この変数はtruncate-linesに対してローカル値がないバッファに対して 使われる既定値です。

User Option: truncate-partial-width-windows

この変数は横に並んだウィンドウで、ウィンドウの右端を越えて伸びる行の表示 の仕方を制御します(see section ウィンドウの分割)。 非nilの場合は、そのような行は切捨て表示されます。それ以外は truncate-linesの指示にしたがいます。

表示テーブルを使えば行の継続や行の切捨てを示す表示を変えること ができます。表示テーブルを参照してください。

バッファに非常に長い行があるときに継続表示をさせると、それに対 する計算のためにEmacsの再表示が遅くなることがあります。また桁位置の計 算や字下げ関数も遅くなります。この場合には cache-long-line-scanstに設定するとよいかもしれません。

Variable: cache-long-line-scans

この変数を非nilにすると、字下げやカーソル移動関数、Emacsの再 表示がバッファのスキャンの結果をキャッシュして、バッファが変更されないかぎりそれ を参照することによって再スキャンを避けるようになります。

このキャッシュを使うようにすると短い行の処理はいくぶん遅くなります。

この変数は各バッファで自動的にローカルになります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.4 エコー領域

エコー領域(echo area)messageプリミティブによって作られる メッセージを表示するために、またキーストロークをエコーするために使われます。 このエコー領域と画面の同じ場所にミニバッファが(アクティブなとき には)表示されてはいますが、ミニバッファと同じものではありません。 GNU Emacs Manualにエコー領域とミニバッファが画面スペースの使 用で衝突した場合にそれをどう解決するかのルールが規定されています (see (emacs)Minibuffer section `The Minibuffer' in The GNU Emacs Manual)。 エラー・メッセージはエコー領域に表示されます。エラーを参照してく ださい。

エコー領域に出力するにはLispの表示関数(printing functions)でストリー ムをtにすればできますが、次の方法でもできます。

Function: message string &rest arguments

この関数は1行のメッセージをエコー領域に表示します。 引数のstringはC言語のprintfの制御文字列と同様です。 その変換の仕様については文字と文字列間の変換formatを参照して ください。messageはそれによって作られた文字列を返します。

バッチ・モードではmessageはメッセージのテキストを標準エラー・ストリー ムに表示して改行します。

stringnilにすると messageはエコー領域の表示を消去します。そのときミニバッファが アクティブであれば、これと同時にミニバッファの内容が画面上に見える ようになります。

 
(message "Minibuffer depth is %d."
         (minibuffer-depth))
 -| Minibuffer depth is 0.
⇒ "Minibuffer depth is 0."

---------- Echo Area ----------
Minibuffer depth is 0.
---------- Echo Area ----------

エコー領域に表示されたメッセージのほとんどは、`*Messages*'バッ ファにも記録されています。

User Option: message-log-max

この変数は`*Messages*'バッファに何行まで保持するかを指定します。 値がtの場合は、制限なしになります。nilの場合はメッセージの 記録(logging)はまったく行なわれません。次の例はメッセージを表示するだけで 記録されないようにする方法です。

 
(let (message-log-max)
  (message …))
Variable: echo-keystrokes

この変数はコマンド文字をエコーするまでどのぐらいの時間をあけるかを決めま す。値は整数で、エコーするまでに待つ秒数を指定します。ユーザがプレ フィックス・キー(C-xなど)をタイプしたあと、この変数の値の秒数のあい だ次のキーをタイプせずにいると、そのプレフィックス・キーがエコー領域にエコーされ ます。それに続く同じコマンドの中の文字もエコーされます。

値が0の場合には、コマンド入力はエコーされません。

Variable: cursor-in-echo-area

この変数はメッセージがエコー領域に表示されたときに、カーソルがどこに現 れるかを制御します。これが非nilの場合は、カーソルはメッセージの最 後に現れます。それ以外は、カーソルはポイントに現れ、エコー領域にはまっ たく現れません。

値は通常nilで、Lispプログラムが短時間だけtに束縛します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.5 不可視テキスト(invisible text)

invisible属性によって文字を不可視(invisible)にして、画面上 に現れないようにすることができます。これはテキストの属性でもよいし、オー バレイの属性でもかまいません。

一番簡単な場合として、invisible属性が非nilなら文字が不可視 になります。これはデフォルトの場合で、変数 buffer-invisibility-specの既定値を変えなければinvisibility 属性(訳注: invisible属性の誤りか)はこのように働きます。この機能は 選択的表示(selective display) (see section 選択表示)によく似ていま すが、より一般的ですっきりしています。

より一般的には、変数buffer-invisibility-specを使って invisible属性のどの値がテキストを非表示にするのかを制御できます。 これによってテキストをあらかじめサブセットに分類してそれぞれ に異なったinvisible値を与えておき、あとで buffer-invisibility-specの値を変えることでそのいろいろなサブセッ トの可視、不可視を切替えるということができます。

buffer-invisibility-specによる可視性の制御は、特にデータベースの エントリの一覧を表示するプログラムで便利でしょう。これを使うとデータベー スのエントリの一部だけを見せるという方法で、便利なフィルタリング・コマンド を実装することができます。この変数を設定する方法は非常に高速であり、バッ ファのテキストをすべてスキャンして変更すべき属性を探すのに比べてずっと速くな ります。

Variable: buffer-invisibility-spec

この変数はどのinvisible属性が実際に文字を不可視にするかを指定しま す。

t

invisible属性が非nilならば文字が不可視になります。これが既 定値です。

list

リストの各要素が文字を不可視にします。 つまりこのリストの要素の中のあるものが文字に適用されるものならば、そ の文字は不可視になるということです。このリストの要素としては次の2種類の ものが許されます。

atom

invisible属性値がatomであるか、atomをメンバにもつリス トである場合に、文字が不可視になります。

(atom . t)

invisible属性値がatomであるか、atomをメンバにもつリス トである場合に、文字が不可視になります。さらに、この文字が行末にあって、 直後に可視の改行が続いているならば、省略記号が表示されます。

通常、テキストに働くコマンドやポイントを動かすコマンドはテキストが不可視 かどうかには関知しません。しかし、ユーザレベルの行移動コマンドは不可視な 改行をないものとして扱います。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.6 選択表示

選択表示(selective display)とは画面上で行を隠す機能で、2種類あります。

第1の方法は明示的な選択表示で、Lispプログラムの中で使うために設計さ れています。プログラムがテキストを変更することでどの行を隠すかを制御しま す。Outlineモードは伝統的にこの方法を使っていました。この方法は一部 不可視テキスト機能(see section 不可視テキスト(invisible text))で置き換えられており、これを使っ た新しいOutlineモードがあります。

第2の方法は隠す行の選択が字下げの仕方に基づいて自動的に行なわれる ものです。この方法はユーザレベルの機能として設計されています。

明示的な選択表示を制御する方法は改行(control-j)をキャリッジ・リターン (control-m)に置き換えるというものです。するとそれまでその改行に続く行で あったものが見えなくなります。厳密には行を分けるのは改行だけなので、一時 的にですがもはや行があるとはいえず、前の行の一部になっています。

選択表示は編集コマンドには直接影響を与えません。たとえばC-f (forward-char)は何のためらいもなくポイントを見えないテキストの中 に移動します。しかし、改行文字をキャリッジ・リターン文字で置き換えたこと に影響されるコマンドがあります。たとえばnext-lineは見えない行を飛び 越えます。これはこのコマンドが改行文字だけを探すからです。選択表示を使う モードが、改行を考慮するコマンドや、テキストの一部を見えるようにしたり、 見えなくしたりするコマンドを定義することもあるでしょう。

選択表示されているバッファをファイルに書き出す時には、すべての control-mは改行として出力されます。つまり次にファイルを読み込んだときに は、普通どおりに見え、隠されたテキストは全くありません。 選択表示はEmacsの中だけで効果があるのです。

Variable: selective-display

このバッファ・ローカル変数は選択表示を作動させます。つまり行や行の一部が見 えなくされる可能性があるということです。

バッファの一部が見えなくなっている場合には、垂直方向の移動コマンドはその 部分が存在しないかのように動作し、next-lineコマンドは1回で見えな い行をいくつも飛び越えることができます。 しかし文字単位の移動コマンド(forward-charなど)は見えない部分を飛 び越えないので、見えない部分にテキストを挿入・削除することが(わかりにく くはありますが)可能です。

次の例に、バッファfoo表示の様子selective-displayの値によってどのように変化するかを示します。 バッファの内容は変化しません。

 
(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 ----------
Variable: selective-display-ellipses

このバッファ・ローカル変数が非nilならば、Emacsは見 えないテキストが続いている行の最後に`…'を表示します。 次の例は前の例の続きです。

 
(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 表示テーブル


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.7 オーバレイ矢印

オーバレイ矢印(overlay arrow)は、バッファ中のある行にユーザに編集 させるというより読ませる目的でユーザの注意を向けたいときに便利です。たとえば、 デバッガのインタフェースとして使われるモードでは、オーバレイ矢印がこれか ら実行されようとしている行を示します。

Variable: overlay-arrow-string

この変数はある行に注意を惹くために表示される文字列を保持します。 矢印機能が使われていない場合はnilです。

Variable: overlay-arrow-position

この変数はオーバレイ矢印をどこに表示するかを示すマーカを保持します。この マーカは行頭を指していなければなりません。その行の頭に矢印テキストが表示 され、本来ならそこに表示されているはずのテキストは下に隠されます。 もっとも、一般に矢印は短く、行は字下げで始まるので、普通は重要なものが隠 されてしまうことはありません。

オーバレイ文字列はマーカが指しているバッファでだけ表示されます。したがっ てある時点にオーバレイ矢印を持ちうるバッファは一つだけです。

これと同じことはbefore-string属性をもつオーバレイを作ることでもで きます。See section オーバレイの属性


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.8 一時表示

一時表示(temporary displays)は、コマンドがユーザに編集させるのではなく読 ませる目的でバッファに出力するために使われます。ヘルプ・コマンドがよくこの 機能を使います。

Special Form: with-output-to-temp-buffer buffer-name forms…

この関数はformsをその出力がすべてbuffer-nameで名前を指定され るバッファに入れられるようにして実行します。その後そのバッファはいずれか のウィンドウに表示しますが、選択はされません。

文字列buffer-nameは一時バッファを指定しますが、これは既存のもので ある必要はありません。この引数はバッファでなく文字列でなければなりません。 そのバッファはまず内容が消され(確認なし)、 with-output-to-temp-bufferが終了したあとには、変更なしと印がつけ られます。

with-output-to-temp-bufferstandard-outputを一時バッファ に束縛して、formsを評価しています。このforms中の、Lisp出力関 数を使った出力はとくに指定しなければこのバッファに向けられます (画面表示やエコー領域のメッセージも一般的には「出力」といえますが、この 関数には影響されません)。 See section 出力関数

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 ----------
Variable: temp-buffer-show-function

この変数が非nilであれば、with-output-to-temp-bufferがそれ を関数として呼び出し、ヘルプ・バッファの表示をさせます。その関数は引数を 一つ受けますが、これは関数が表示を行うべきバッファです。

バージョン18以前のEmacsではこの変数は temp-buffer-show-hookという名前でした。

Function: momentary-string-display string position &optional char message

この関数は現在のバッファのpositionstringを一時的に表示しま す。undoリストの状態やバッファの変更ステータスには影響を与えません。

一時的な表示は次の入力イベントまで表示されています。次の入力イベントが charならば、momentary-string-displayはそれを無視して戻りま すが、それ以外のイベントはバッファされたままになり、その後入力として使わ れます。つまりcharをタイプすると文字列の表示が消えるだけですが、 (たとえば)C-fをタイプすると文字列の表示が消えたあと、(多分)ポイン トが前方に移動します。引数charの既定値はスペースです。

momentary-string-displayの返り値には特に意味はありません。

文字列stringが制御文字を含んでいなければ、 before-string属性をもつオーバレイを作ることで、 同じことをより一般的な方法ですることができます。

messageが非nilならば、stringがバッファに表示されるの と同時に、それがエコー領域に表示されます。これがnilのときは、 既定値の「作業を続けるにはcharを押してください」という意味のメッセー ジが表示されます。

次の例では、ポイントは最初二行目の行頭にあるとします。

 
---------- 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 ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.9 オーバレイ

オーバレイ(overlays)を使って、表現形としてバッファのテキストの見え 方を変えることができます。 オーバレイは特定のバッファに属するオブジェクトで、決まった始めと終りの 点を持っています。また、ユーザが設定したり、読みとったりできる属性もあり、 オーバレイ中のテキストの表示方法に影響します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.9.1 オーバレイの属性

オーバレイの属性はある面ではテキスト属性に似ていますが、似ている点よりも 違っている点の方が重要です。テキスト属性はテキストの一部とみなされますが、 オーバレイは特にテキストの一部とはみなされません。ですから、テキストをバッ ファ間でコピーしてもテキスト属性は保存されますが、オーバレイを保存するよ うなことはしていません。バッファのテキスト属性を変更すると、バッファは変 更されたとマークされますが、オーバレイを移動したりその属性値を変更したり しても変更されたとマークはされません。またテキスト属性の変更と違って、オー バレイの変更はバッファのundoリストにも記録されません。

priority

この属性の値(非負の数値でなければなりません)は、そのオーバレイの優先度を 決めます。優先度が問題になるのは二つ以上のオーバレイが同じ文字の上に重なっ ており、しかも両方が表示するフェースを指定している場合です。この場合、 priorityの値が大きいものが優先され、そのフェース属性が優先度の低いオー バレイのフェース属性に優先して使われます。

現在は、すべてのオーバレイはテキスト属性よりも高い優先度を持ちます。負の 優先度についてはその意味をまだ決めていないので、使わないようにしてくださ い。

window

window属性が非nilならば、オーバレイはそのウィンドウだけに 適用されます。

category

オーバレイにcategory属性があれば、それをオーバレイの カテゴリ(category)といいます。これはシンボルでなければなりません。その シンボルの属性がオーバレイの属性の既定値として働きます。

face

この属性はテキストのフォントと色を制御するものです。値はフェースの名前か、 フェースの名前のリストです。詳細はSee section フェース。 この機能は一時的なものになるかもしれません。将来テキストの表示方法を指定 するためのほかの方法で置き換える可能性があります。

mouse-face

この属性はマウスがオーバレイの範囲内にあるとき、faceの代わりに使 われます。この機能もface同様一時的なものである可能性があります。

modification-hooks

この属性の値は、オーバレイ内の文字が変更されたり、その厳密な意味での 内部に文字が挿入されたときに呼び出される関数のリストです。

フック関数はこの変化の前後両方に呼び出されます。その関数が受けとった情報 を保存して、呼出しの間の情報を比較すれば、バッファのテキストにどうい う変化が起こったのかを正確に知ることができます。

変化の前に呼ばれるときには、各関数は四つの引数を受けとります。これらは オーバレイ、nil、変更されようとしているテキスト範囲の始点と終点、 です。

変化の後に呼ばれるときには、各関数は五つの引数を受けとります。すなわちオー バレイ、t、今変更されたテキスト範囲の始点と終点、その範囲で置き換 えられたテキストの変更前の長さ、です。 (挿入に対しては変更前の長さは0、削除に対してはその削除された文字の数で変 更後の範囲の始点と終点が同じになっています)。

insert-in-front-hooks

この属性の値は、オーバレイの始点のすぐ右側にテキストが挿入される直前と直 後に呼び出されるべき関数のリストです。関数の呼出し方は modification-hooksの関数と同じです。

insert-behind-hooks

この属性の値はオーバレイの終点のすぐ右側にテキストが挿入される直前と直後 に呼び出されるべき関数のリストです。関数の呼出し方は modification-hooksの関数と同じです。

invisible

invisible属性はオーバレイ中のテキストを不可視にすることができます。 不可視というのはつまり画面には表示されないということです。 詳しくはSee section 不可視テキスト(invisible text)

intangible

intangible属性をオーバレイにつけると、ちょうどintangibleテ キスト属性と同じように働きます。詳しくはSee section 特殊な意味をもつ属性

before-string

この属性の値はオーバレイの始点に加えて表示する文字列です。その文字列はどんな 意味でもバッファの中には存在せず画面上にあるだけです。文字列には1桁で表示される文字以外は含めない方がいいでしょう。タブや改行などの制御 文字を含めるとおかしな結果になります。

after-string

この属性の値は、オーバレイの終点に加えて表示する文字列です。その文字列はどんな 意味でもバッファの中には存在せず画面上にあるだけです。文字列には1桁で表示される文字以外は含めない方がいいでしょう。タブや改行などの制御 文字を含めるとおかしな結果になります。

evaporate

この属性が非nilならば、オーバレイは空になったとき(つまりまったく 文字を覆わなくなったとき)に自動的に削除されます。

以下はオーバレイの属性を読み書きするための関数です。

Function: overlay-get overlay prop

この関数はoverlayに記録されている属性propがあれば、その値を 返します。overlayがその属性には値を記録していない場合でも、 category属性があってそれがシンボルならば、そのシンボルの prop属性が使われます。それもなければ値はnilです。

Function: overlay-put overlay prop value

この関数はoverlayに記録されている属性propの値をvalueに 設定します。valueを返します。

get-char-propertyというある文字に対してオーバレイ属性とテキスト属 性の両方を調べる関数もありますので参照してください。 See section テキスト属性の調査


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.9.2 オーバレイの管理

この節ではオーバレイの生成、削除、移動、内容検査のための関数を説明します。

Function: make-overlay start end &optional buffer

この関数はbufferに属し、startからendの範囲の オーバレイを生成して返します。startendもバッファ中の位置を 指定するもの、つまり整数か、マーカーでなければなりません。bufferを 省略すると、オーバレイは現在のバッファに作られます。

Function: overlay-start overlay

この関数はoverlayが始まる位置を返します。

Function: overlay-end overlay

この関数はoverlayが終る位置を返します。

Function: overlay-buffer overlay

この関数はoverlayが属するバッファを返します。

Function: delete-overlay overlay

この関数はoverlayを削除します。オーバレイはLispオブジェクトとして は存在し続けますが、それが属していたバッファの一部ではなくなり、表示には なんの影響も与えなくなります。

Function: move-overlay overlay start end &optional buffer

この関数はoverlaybufferの範囲startからendに移 動します。startendもバッファ中の位置を 指定するもの、つまり整数か、マーカーでなければなりません。 bufferを省略すると、オーバレイのバッファは変わりません。

返り値はoverlayです.

オーバレイの終点を変更する正当な手段はこの関数だけです。オーバレイの中の マーカを直接変更してしまうと、ほかの重要なデータ構造の更新が行なわれず失われ るオーバレイが出ることになりかねないので、やめてください。

Function: overlays-at pos

この関数は位置posを含むオーバレイすべてのリストを返します。リスト 中の順番は特に規定されていません。posを含むオーバレイとは、 posかそれよりも前に始まり、posよりも後ろで終るオーバレイです。

Function: next-overlay-change pos

この関数はオーバレイの始点・終点の中でposよりも後ろにある次のもの を返します。

Function: previous-overlay-change pos

この関数はオーバレイの始点・終点の中でposよりも前にある次のもの を返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.10 フェース

フェース(face)とはグラフィカル属性の集まりに名前をつけたものです。 グラフィカ ル属性にはフォント、文字色、背景色、下線を引くかどうか、があります。フェース は画面上のテキストの表示方法を制御します。

フェースにはそれぞれのフェースid番号(face id number)があり、Emacs の内部ではそれによっ てフェースを互いに区別しています。しかしほとんどの目的にはLispプログラ ム中でフェースを名前で参照することができます。

Function: facep object

この関数はobjectがフェースの名前シンボルであるとき(または内部でフェースの 情報を記憶するのに使われているベクタの一種であるとき)にtを返します。 そうでない場合はnilを返します。

フェース名はすべてのフレームで意味を持ち、特に変更しなければすべてのフレーム で同じ意味を持ちます。望むならあるフェース名が特定のフレームで別個の意味をもつようにすることも可能です。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.10.1 標準フェース

次の表は標準のフェースすべてとその使用法のリストです。

default

このフェースは普通のテキストに使われます。

modeline

このフェースはモード行とメニュー・バーに使われます。

region

このフェースはTransient Markモードでリージョンを強調表示するとき に使われます。

secondary-selection

このフェースはユーザの選択した第2セレクションを示すために使われます。

highlight

このフェースはいろいろな強調表示に使うことを意図したものです。

underline

これはテキストに下線を引くフェースです。

bold

このフェースは使用可能ならボールド(太字体)フォントを使います。フレームのフォ ントのボールド版があればそれを使います。使いたいのであればユーザが自分で ボールド版のあるフォントを既定フォントにしなければなりません。

italic

このフェースはフレームのフォントのイタリック(斜体)版があればそれを使いま す。

bold-italic

このフェースはフレームのフォントのボールド・イタリック(太斜体)版があればそ れを使います。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.10.2 表示の際のフェースの合併

ここで表示にどのフェースを使うかを指定する方法をすべて示します。

もしこれらの諸指定から文字に対して複数のフェースが指定される場合は、 Emacsはそれら指定されたフェースの属性を合併(merge)します。まず特別なグリ フのフェースの属性が1番で、次にリージョンの強調表示(それが適用可能な場 合)、その次にオーバレイからのフェースの属性、さらにテキスト属性からのも の、そして最後が既定値フェースです。

複数のオーバレイがある一つの文字を覆っている場合には、オーバレイの中で優 先度がもっとも高いものがそれより低いものに優先して使われます。 See section オーバレイ

フォントや色などの属性が上記のどれによっても指定されていない場合は、フレー ム自身のフォントと色が使われます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.10.3 フェースに働く関数

フェースが指定できる属性にはフォント、文字色、背景色、下線有無があります。 これらにnilを設定することにより特に指定しないままにしておくことも できます。

以下フェースを生成・変更するためのプリミティブを示します。

Function: make-face name

この関数はnameという名前の新しいフェースを定義します。初期値として すべての属性はnilになっています。nameという名前のフェースが すでにある場合にはなにもしません。

Function: face-list

この関数は定義されているフェース名全部のリストを返します。

Function: copy-face old-face new-name &optional frame new-frame

この関数はnew-nameというフェースを、old-faceという既存のフェ イスのコピーとして定義します。new-nameというフェースがまだなければ 生成します。

オプション引数frameが与えられると、この関数はそのフレームだけに働 きます。与えない場合は、各フレームに対して働き、各フレームの old-faceから同じフレームのnew-faceに属性をコピーします。

オプション引数new-frameが与えられると、copy-faceframeold-faceからnew-framenew-nameに属性をコ ピーします。

以下に示す関数によって既存のフェースの属性を変更することができます。 frameを指定すると、そのフレームだけに働きます。指定しなければすべ てのフレームに働くとともに、新規のフレームに適用される既定値も変更されま す。

Function: set-face-foreground face color &optional frame
Function: set-face-background face color &optional frame

これらの関数はフェースfaceの文字色(背景色)をcolorに設定しま す。引数colorは色の名前を表す文字列でなければなりません。

白黒画面では網かけパターン(stipple pattern)によって何段階かの濃淡表示が 実装されています。

Function: set-face-stipple face pattern &optional frame

この関数はフェースfaceの背景網かけパターンを patternに設定します。引数 patternはXサーバによって定義されている網かけパターンの名前でなけれ ばなりません。あるいはnilでもよく、網かけを使わないとい う意味になります。

濃淡表示をするときに自動的に網かけパターンが使われるので、 普通網かけパターンを気にする必要はありません。

Function: set-face-font face font &optional frame

この関数はフェースfaceのフォントを設定します 引数fontは文字列でなければなりません。

Function: set-face-underline-p face underline-p &optional frame

この関数はフェースfaceの下線属性を設定します。 非nilは下線つきという意味でnilは下線なしです。

Function: invert-face face &optional frame

フェースfaceの文字色と背景色を交換します。フェースが文字色・背景色 両方を指定していない場合は、その文字色・背景色にはそれぞれ既定値の背景色・ 文字色が設定されます。

以下の関数はフェースの属性を調べるものです。 frameを指定しない場合は、新規のフレームのための既定値を参照します。

Function: face-foreground face &optional frame
Function: face-background face &optional frame

これらの関数はフェースfaceの文字色(背景色)を文字列で返します。

Function: face-stipple face &optional frame

この関数はフェースfaceの背景網かけパターンの名前を返します。背景網 かけパターンがなければnilを返します。

Function: face-font face &optional frame

この関数はフェースfaceのフォント名を返します。

Function: face-underline-p face &optional frame

この関数はフェースfaceの下線属性を返します。

Function: face-id face

この関数はフェースfaceのフェースid番号を返します。

Function: face-equal face1 face2 &optional frame

これはフェースface1face2が同じ表示属性を持っていれば tを返します。

Function: face-differs-from-default-p face &optional frame

これはfaceが既定値のフェースと異なった表示をするフェースならば tを返します。あるフェースが既定値のフェースと同じと判断されるのは、 属性値それぞれが既定値のフェースのものとと同じ値であるか、nil(つ まり既定値を継承している)場合です。

Variable: region-face

この変数の値はリージョンがアクティブになった場合にその中の文字を表示する ために使うフェースidを指定します(Transient Markモードのみ)。これで指定された フェースはそのリージョンのテキストに対するテキスト属性やオーバレイに由来 する一切のフェースに優先されます。Transient Markモードの詳細については See section マーク

通常これの値はregionという名前のフェースのid番号になっています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.11 対応括弧の点滅表示

この節ではユーザが閉じ括弧を挿入したときに Emacsが対応する開き括弧を示すメカニズムについて説明します。

Variable: blink-paren-function

この変数の値は(無引数の)関数です。この関数は閉じ括弧構文をもつ文 字が挿入されたときに呼び出されます。 blink-paren-functionの値はnilでもよく、この場合なにも行なわ れません。

注意: この変数はEmacsの古いバージョンでは blink-paren-hookという名前でしたが、フックの標準的な呼出し方に したがって呼び出されるものではないので、バージョン19では blink-paren-functionという名前に変更されました。

Variable: blink-matching-paren

この変数がnilのときはblink-matching-openは何もしません。

Variable: blink-matching-paren-distance

この変数は対応する括弧をスキャンする際に、これを越えたらあきらめるという 距離の最大値を指定します。

Variable: blink-matching-paren-delay

この変数は対応する括弧にカーソルが置かれる時間を秒単位で指定します。 1秒未満がいいようですが、既定値はすべてのシステムで使える1秒になっていま す。

Function: 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 ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.12 反転表示(Inverse Video)

User Option: inverse-video

この変数はEmacsが画面のテキストすべてを反転表示するかどうかを制御します。 非nilの場合は、反転表示をし、nilの場合は反転表示をしません。 既定値はnilです。

User Option: mode-line-inverse-video

この変数はモード行に反転表示を使うかどうかを制御します。これが非 nilならモード行は反転表示されます。 それ以外はモード行はテキスト同様に普通に表示されます。既定値は tです。

Xウィンドウのフレームではモード行の表示にmodelineというフェースが使わ れます。これは変更しなければ、通常普通のフェースの反転になっています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.13 普通の表示方法

普通の表示方法はそれぞれの文字をどう表示するかを定義しています。表示テー ブルを設定してこの表示方法を変えることができます。 (see section 表示テーブル)。以下に普通の表示方法を示します。

表示テーブルがあるときでも、そのアクティブな表示 テーブル中のエントリがnilであるような文字に対しては 普通の表示方法が適用されますから、表示テーブルを設定するときには、 普通でない動作をさせたい文字だけを指定すればいいのです。

これらの変数はある文字が画面に表示される方法に影響するものですが、 文字が占める桁数も変えるので、字下げ関数にも影響します。

User Option: ctl-arrow

このバッファ・ローカル変数は制御文字の表示方法を制御します。 非nilならば、キャレットのあとに文字をつけて`^A'のように表示します。 nilならばバックスラッシュのあとに8進3桁で`\001'のように表示し ます。

Variable: default-ctl-arrow

この変数の値はctl-arrowの値がバッファで再定義されていない場合の既 定値です。See section バッファローカルな変数のデフォルト値

User Option: tab-width

この変数の値はタブ・ストップの間隔で、Emacsバッファでタブ文字が表示される ときに使われます。既定値は8です。この機能はtab-to-tab-stopコマ ンドで使われるユーザが設定できるタブとは何の関係もないことに注意してくだ さい。See section 調節可能な「タブ・ストップ」


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.14 表示テーブル

表示テーブル(display tale)機能を使うと256種類の文字すべてについて、 それが画面で どう表示されるかを制御できます。この機能はASCII文字セット にない文字を使うヨーロッパの言語を表示するために便利です。

表示テーブルは各文字コードをグリフ(glyphs)の列に対応づけます。グ リフとは画面上で1文字分を占める像(image)です。さらに各グリフが端末でどう 表示されるかもグリフ・テーブル(glyph table)を使って制御できます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.14.1 表示テーブルの形式

表示テーブルは実は262要素の配列です。

Function: make-display-table

表示テーブルを作って返します。テーブルは初期値としてすべての要 素がnilになっています。

最初の256要素は文字コードに対応します。つまりn番目の要素は文字コー ドnをどう表示するかを指定しています。その値はnilか、グリフ値のベ クタ(see section グリフ)でなければなりません。要素がnilのときは、普通の 表示法にしたがって表示しろ、という意味です(see section 普通の表示方法)。

表示テーブルを使って改行文字の表示方法を変えると、バッファ 全体が一つの長い"行"として表示されてしまいます。

表示テーブルの残りの6要素は特別な目的に使われており、これが nilの場合は、次に示す既定値を使うという意味になります。

256

切捨て表示された行の末尾に表示されるグリフ(これの既定値は`$')。 See section グリフ

257

継続表示された行の末尾用のグリフ(既定値は`\')。

258

文字が8進コード表示されているということを示すグリフ(既定値は `\')。

259

制御文字を表すグリフ(既定値は`^')。

260

見えない行があることを示すグリフのベクタ(既定値は`...')。 See section 選択表示

261

横に並んだウィンドウの間に描かれる境界線に使われるグリフ(既定値は `|')。See section ウィンドウの分割

次の例は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 ?^ ??)))

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.14.2 アクティブな表示テーブル

ウィンドウごと、バッファごとに表示テーブルを指定することができ ます。バッファbがウィンドウwに表示されていたとすると、表示部 はウィンドウwの表示テーブルがあればそれを使います。それ がなければ、今度はバッファbの表示テーブルがあればそれを 使います。これもなければ標準の表示テーブルがあればそれを使いま す。ここで選択された表示テーブルはアクティブな(active)表示 テーブルと呼ばれます。

Function: window-display-table window

この関数はwindowの表示テーブルを返します。windowに 割り当てられた表示テーブルがなければnilを返します。

Function: set-window-display-table window table

この関数はwindowの表示テーブルをtableに設定します。 引数のtableは表示テーブルか、nilでなければなりま せん。

Variable: buffer-display-table

この変数はすべてのバッファで自動的にローカルになります。それぞれのバッファ での値はそのバッファのための表示テーブルです。そのバッファに割り当 てられた表示テーブルが特にない場合は値はnilです。

Variable: standard-display-table

この変数の値は既定値の表示テーブルで、ウィンドウにもバッファにも表示テー ブルがない場合に使われます。この変数の既定値はnilです。

あるウィンドウに使うべき表示テーブルがない場合--つまりウィン ドウにもなく、バッファにもなく、standard-display-tableにもない場 合--は、Emacsはそのウィンドウの中のすべての文字コードに対して普通の表示方法 (usual display conventions)を使います。See section 普通の表示方法


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.14.3 グリフ

グリフ(glyph)とは文字を一般化したもので、画面上の一つの文字位置を 占める像(image)を表します。グリフは文字同様Lispでは整数によって表現さ れます。

それぞれの整数のグリフとしての意味は変数glyph-tableの値であるグリ フ・テーブルで定義されます。

Variable: glyph-table

この変数の値は現在のグリフ・テーブルです。これはベクタでなければなりませ ん。これのg番めの要素がグリフ・コードgを定義します。値がベク タでなくnilである場合は、すべてのグリフはsimpleであるとされます (下記参照)。

以下にグリフ・テーブルの要素として可能なものを示します:

string

このグリフを表示する場合はstring中の文字を端末に送ります。この方法 は文字端末だけで使用可能で、Xでは使えません。

integer

このグリフをコードintegerの別名と定義します。別名を使ってグリフの フェース・コードを指定できます。下記参照。

nil

グリフはsimpleです。一般的な端末ではグリフ・コードを256で割った余りが出 力する文字になります。Xではグリフ・コードを256で割った余りが出力する文字で、 グリフ・コードを256で割ったものがその文字を出力するのに使われるフェ ースid番号(face id number)を指定します。See section フェース

グリフ・コードがグリフ・テーブルの長さと同じか、それより大きい場合は、コー ドは自動的にsimpleになります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.14.4 ISO Latin 1

ISO Latin 1をすべて扱える端末があるなら、次のようにすればその文字集合を 使うことができます。

 
(require 'disp-table)
;; 文字コード160〜255がそれ自身として表示されるように設定する。
;; (コード128〜159は制御文字。)
(standard-display-8bit 160 255)

もしISO Latin 1文字集合で書かれたバッファを編集するときに端末が ASCII文字集合以外を扱えないならば、`iso-ascii'をロードすれば、 ほかのISO文字をASCII文字の列でそれらしく表示するように表示テーブ ルを設定することができます。たとえば「ウムラウトつきのo」ならば `{"o}')として表示します。

西欧諸国の端末にはISO Latin 1はサポートせずにその国の言語独自の文字をサポー トしているものがあります。そのような端末を使ってその一言語で作業するため の表示テーブルを定義することもできます。たとえば `lisp/iso-swed.el'はスウェーデンの端末用です。

端末の型に対応してその端末用のLispファイルを書いておけば、あなたの端末のため の適切な表示テーブルを自動的にロードすることもできます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.15 ベルを鳴らす

Emacsにベル音を鳴らさせて(または画面を点滅させて)、ユーザの注意を引くこ とができます。ただしやりすぎは禁物です。あまり頻繁にベ ルがなるといらいらしかねません。またエラーを通知すべきときにベルを鳴らす だけ、ということのないようによく考えてください。(See section エラー。)

Function: ding &optional dont-terminate

この関数はベル音を鳴らすか、画面を点滅させるかします(下の visible-bellを参照)。同時にdont-terminateが非nilであ ればそのとき実行中のキーボード・マクロを終了させます。

Function: beep &optional dont-terminate

これはdingと同じものです。

Variable: visible-bell

この変数はベルが鳴ったことを表すためにEmacsが画面を点滅させるかどうかを 決めます。nilでない場合には点滅させ、nilの場合には点滅させ ません。これが有効なのは、Xウィンドウ下か、現在使っている端末のTermcapエ ントリに、ビジブル・ベル機能(`vb')が定義されている場合だけです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.16 ウィンドウ・システム

Emacsはいくつかのウィンドウ・システムのもとで動作します。中でも有名なの はXウィンドウ・システムでしょう。EmacsもXも「ウィンドウ」という用語を使 いますが、意味が違います。EmacsのフレームがXでいえば一つのウィンドウです。 Emacsのウィンドウ一つ一つに対してはXはまったく関知しません。

Variable: window-system

この変数はLispプログラムから、Emacsがどのウィンドウ・システムの下で動作 しているかを知るための変数です。その値はx(EmacsがXの下で動作して いる場合)のようなシンボルか、nil(Emacsが普通の端末で動作している 場合)です。

Variable: window-setup-hook

この変数は正規フックであり、Emacsがあなたの`.emacs'と(もしあれば) デフォルト初期化ファイルをロードして、さらに端末それぞれのLispコードをロー ドし、フックterm-setup-hookを実行したそのあとに実行されます。

このフックは内部処理で使用するもので、ウィンドウ・システムとの通信を確立し、 最初のウィンドウを作成します。ユーザはそれに干渉すべきではありません。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Yasutaka SHINDOH on September, 29 2006 using texi2html 1.76.