@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. 
@c See the file elisp-jp.texi for copying conditions.
@c 複製の条件は elisp-jp.texi に書いてあります。
@setfilename ../info/display-jp
@node Display, Calendar, System Interface, Top
@chapter Emacsの表示

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

@menu
* Refresh Screen::      画面を消去しすべてを再表示する。
* Screen Size::         Emacsの画面の大きさ。
* Truncation::          長いテキスト行の表示方法。
* The Echo Area::       メッセージの表示場所。
* Invisible Text::      バッファ・テキストの部分的非表示。
* Selective Display::   バッファ・テキストの部分的非表示 (旧式)。
* Overlay Arrow::       場所を示す矢印の表示。
* Temporary Displays::  自動的に消される表示。
* Overlays::		オーバレイを使ったテキストの部分的ハイライト。
* Faces::		グラフィックスの見かけ(フォント、色など)を定義
                        するフェース。
* Blinking::            対応するカッコの示し方。
* Inverse Video::	画面の見かけ。
* Usual Display::	非印字文字の通常の表示方法。
* Display Tables::	ほかの表示方法の指定の仕方。
* Beeping::             ユーザに音で知らせる。
* Window Systems::      使われているウィンドウ・システム。
@end menu

@node Refresh Screen, Screen Size, Display, Display
@section 画面の再表示

関数@code{redraw-frame} は指定されたフレーム全体の内容を再表示します。
@xref{Frames}。

@c Emacs 19 feature
@defun redraw-frame frame
この関数はフレーム@var{frame}の内容を消去し再表示します。
@end defun

さらに強力なのは@code{redraw-display} です。

@deffn Command redraw-display
この関数は表示されているフレームすべての内容を消去し再表示します。
@end deffn

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

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

@defvar no-redraw-on-reenter
@cindex suspend (cf. @code{no-redraw-on-reenter})
@cindex resume (cf. @code{no-redraw-on-reenter})
@cindex サスペンド[さすぺんど]
@cindex リジューム[りじゅーむ]
この変数はEmacsがサスペンドされてそれからリジュームされたときに画面全体を
再表示すべきかどうかを制御します。非@code{nil}の場合は再表示を行ない、
@code{nil}の場合は再表示を行ないません。
@end defvar

@node Screen Size, Truncation, Refresh Screen, Display
@section 画面サイズ
@cindex size of screen
@cindex screen size
@cindex display lines
@cindex display columns
@cindex resize redisplay
@cindex サイズ、画面の[さいず、がめんの]
@cindex 画面サイズ[がめんさいず]
@cindex 行の表示[ぎようのひようじ]
@cindex 表示、行の[ひょうじ、ぎょうの]
@cindex 桁の表示[けたのひようじ]
@cindex 表示、桁の[ひょうじ、けたの]
@cindex サイズ変更による再表示[さいずへんこうによるさいひようじ]
@cindex 再表示、サイズ変更による[さいひようじ、さいずへんこうによる]

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

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

@example
@group
(screen-height)
     @result{} 50
@end group
@end example
@end defun

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

@example
@group
(screen-width)
     @result{} 80
@end group
@end example
@end defun

@defun set-screen-height lines &optional not-actual-size
この関数は端末が@var{lines}行を表示可能であることを宣言します。
既存のウィンドウのサイズはこれに合うように同じ比率で変更されます。

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

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

この関数は@code{nil}を返します.
@end defun

@defun set-screen-width columns &optional not-actual-size
この関数は端末が@var{columns}桁を表示可能であることを宣言します。
詳細は@code{set-screen-height}を参照。
@end defun

@node Truncation, The Echo Area, Screen Size, Display
@section 切捨て表示
@cindex line wrapping
@cindex continuation lines
@cindex @samp{$} in display
@cindex @samp{\} in display
@cindex 行の折り返し[ぎようのおりかえし]
@cindex 継続行[けいぞくぎよう]
@cindex @samp{$}、画面表示の[{$がめんひようじの}]
@cindex @samp{\}、画面表示の[{\、がめんひようじの}]

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

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

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

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

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

@defopt truncate-partial-width-windows
この変数は横に並んだウィンドウで、ウィンドウの右端を越えて伸びる行の表示
の仕方を制御します(@pxref{Splitting Windows})。
非@code{nil}の場合は、そのような行は切捨て表示されます。それ以外は
@code{truncate-lines}の指示にしたがいます。
@end defopt

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

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

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

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

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

@node The Echo Area, Invisible Text, Truncation, Display
@section エコー領域
@cindex error display
@cindex echo area
@cindex エラー表示[えらーひようじ]
@cindex エコー領域[えこーりよういき]

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

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

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

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

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

@example
@group
(message "Minibuffer depth is %d."
         (minibuffer-depth))
 @print{} Minibuffer depth is 0.
@result{} "Minibuffer depth is 0."
@end group

@group
---------- Echo Area ----------
Minibuffer depth is 0.
---------- Echo Area ----------
@end group
@end example
@end defun

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

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

@example
(let (message-log-max)
  (message @dots{}))
@end example
@end defopt

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

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

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

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

@node Invisible Text, Selective Display, The Echo Area, Display
@section 不可視テキスト(invisible text)

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

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

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

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

@defvar buffer-invisibility-spec
この変数はどの@code{invisible}属性が実際に文字を不可視にするかを指定しま
す。

@table @asis
@item @code{t}
@code{invisible}属性が非@code{nil}ならば文字が不可視になります。これが既
定値です。

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

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

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

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

@node Selective Display, Overlay Arrow, Invisible Text, Display
@section 選択表示
@cindex selective display
@cindex 選択表示[せんたくひようじ]

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

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

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

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

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

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

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

@itemize @bullet
@item
@code{selective-display}の値が@code{t}ならば、 control-mの後ろの行は表示
されません。

@item
@code{selective-display}の値が正の整数なら、その桁数よりも深く字下げ
された行は表示されません。
@end itemize

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

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

@example
@group
(setq selective-display nil)
     @result{} 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 ----------
@end group

@group
(setq selective-display 2)
     @result{} 2

---------- Buffer: foo ----------
1 on this column
 2on this column
 2on this column
1 on this column
---------- Buffer: foo ----------
@end group
@end example
@end defvar

@defvar selective-display-ellipses
このバッファ・ローカル変数が非@code{nil}ならば、Emacsは見
えないテキストが続いている行の最後に@samp{@dots{}}を表示します。
次の例は前の例の続きです。

@example
@group
(setq selective-display-ellipses t)
     @result{} t

---------- Buffer: foo ----------
1 on this column
 2on this column ...
 2on this column
1 on this column
---------- Buffer: foo ----------
@end group
@end example

表示テーブルを使ってこの省略記号(@samp{@dots{}})をほかのテキスト
に変えることもできます。@xref{Display Tables}。
@end defvar

@node Overlay Arrow, Temporary Displays, Selective Display, Display
@section オーバレイ矢印
@cindex overlay arrow
@cindex オーバレイ矢印[おーばれいやじるし]

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

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

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

オーバレイ文字列はマーカが指しているバッファでだけ表示されます。したがっ
てある時点にオーバレイ矢印を持ちうるバッファは一つだけです。
@c !!! overlay-arrow-position: しかしオーバレイ文字列は画面の更新が要求
@c されるまでほかのバッファに表示されたままになる。これは今直すべきではな
@c いか？
@end defvar

これと同じことは@code{before-string}属性をもつオーバレイを作ることでもで
きます。@xref{Overlay Properties}。

@node Temporary Displays, Overlays, Overlay Arrow, Display
@section 一時表示

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

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

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

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

@var{forms}の最後の形式の値が返されます。

@example
@group
---------- Buffer: foo ----------
 This is the contents of foo.
---------- Buffer: foo ----------
@end group

@group
(with-output-to-temp-buffer "foo"
    (print 20)
    (print standard-output))
@result{} #<buffer foo>

---------- Buffer: foo ----------
20

#<buffer foo>

---------- Buffer: foo ----------
@end group
@end example
@end defspec

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

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

@defun momentary-string-display string position &optional char message
この関数は現在のバッファの@var{position}に@var{string}を一時的に表示しま
す。undoリストの状態やバッファの変更ステータスには影響を与えません。

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

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

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

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

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

@example
@group
---------- Buffer: foo ----------
This is the contents of foo.
@point{}Second line.
---------- Buffer: foo ----------
@end group

@group
(momentary-string-display
  "**** Important Message! ****"
  (point) ?\r
  "Type RET when done reading")
@result{} t
@end group

@group
---------- Buffer: foo ----------
This is the contents of foo.
**** Important Message! ****Second line.
---------- Buffer: foo ----------

---------- Echo Area ----------
Type RET when done reading
---------- Echo Area ----------
@end group
@end example
@end defun

@node Overlays, Faces, Temporary Displays, Display
@section オーバレイ
@cindex overlays
@cindex オーバレイ[おーばれい]

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

@menu
* Overlay Properties::	属性の設定・読みとりの方法。
			属性の画面表示に対する働き。
* Managing Overlays::   オーバレイの作成、移動、検索。
@end menu

@node Overlay Properties, Managing Overlays, Overlays, Overlays
@subsection オーバレイの属性

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

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

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

@item window
@kindex window @r{(overlay property)}
@code{window}属性が非@code{nil}ならば、オーバレイはそのウィンドウだけに
適用されます。

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

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

@item mouse-face
@kindex mouse-face @r{(overlay property)}
この属性はマウスがオーバレイの範囲内にあるとき、@code{face}の代わりに使
われます。この機能も@code{face}同様一時的なものである可能性があります。

@item modification-hooks
@kindex modification-hooks @r{(overlay property)}
この属性の値は、オーバレイ内の文字が変更されたり、その厳密な意味での
内部に文字が挿入されたときに呼び出される関数のリストです。

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

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

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

@item insert-in-front-hooks
@kindex insert-in-front-hooks @r{(overlay property)}
この属性の値は、オーバレイの始点のすぐ右側にテキストが挿入される直前と直
後に呼び出されるべき関数のリストです。関数の呼出し方は
@code{modification-hooks}の関数と同じです。

@item insert-behind-hooks
@kindex insert-behind-hooks @r{(overlay property)}
この属性の値はオーバレイの終点のすぐ右側にテキストが挿入される直前と直後
に呼び出されるべき関数のリストです。関数の呼出し方は
@code{modification-hooks}の関数と同じです。

@item invisible
@kindex invisible @r{(overlay property)}
@code{invisible}属性はオーバレイ中のテキストを不可視にすることができます。
不可視というのはつまり画面には表示されないということです。
詳しくは@xref{Invisible Text}。

@item intangible
@kindex intangible @r{(overlay property)}
@code{intangible}属性をオーバレイにつけると、ちょうど@code{intangible}テ
キスト属性と同じように働きます。詳しくは@xref{Special Properties}。

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

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

@item evaporate
@kindex evaporate @r{(overlay property)}
この属性が非@code{nil}ならば、オーバレイは空になったとき(つまりまったく
文字を覆わなくなったとき)に自動的に削除されます。
@end table

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

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

@defun overlay-put overlay prop value
この関数は@var{overlay}に記録されている属性@var{prop}の値を@var{value}に
設定します。@var{value}を返します。
@end defun

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

@node Managing Overlays,  , Overlay Properties, Overlays
@subsection オーバレイの管理

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

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

@defun overlay-start overlay
この関数は@var{overlay}が始まる位置を返します。
@end defun

@defun overlay-end overlay
この関数は@var{overlay}が終る位置を返します。
@end defun

@defun overlay-buffer overlay
この関数は@var{overlay}が属するバッファを返します。
@end defun

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

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

返り値は@var{overlay}です.

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

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

@defun next-overlay-change pos
この関数はオーバレイの始点・終点の中で@var{pos}よりも後ろにある次のもの
を返します。
@end defun

@defun previous-overlay-change pos
この関数はオーバレイの始点・終点の中で@var{pos}よりも前にある次のもの
を返します。
@end defun

@node Faces, Blinking, Overlays, Display
@section フェース
@cindex face
@cindex フェース[ふぇーす]

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

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

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

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

@menu
* Standard Faces::      Emacsに普通についてくるフェース。
* Merging Faces::	文字に使用するフェースの決定方法。
* Face Functions::	フェースの定義、参照のしかた。
@end menu

@node Standard Faces, Merging Faces, Faces, Faces
@subsection 標準フェース

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

@table @code
@item default
@kindex default @r{(face name)}
このフェースは普通のテキストに使われます。

@item modeline
@kindex modeline @r{(face name)}
このフェースはモード行とメニュー・バーに使われます。

@item region
@kindex region @r{(face name)}
このフェースはTransient Markモードでリージョンを強調表示するとき
に使われます。

@item secondary-selection
@kindex secondary-selection @r{(face name)}
このフェースはユーザの選択した第2セレクションを示すために使われます。

@item highlight
@kindex highlight @r{(face name)}
このフェースはいろいろな強調表示に使うことを意図したものです。

@item underline
@kindex underline @r{(face name)}
これはテキストに下線を引くフェースです。

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

@item italic
@kindex italic @r{(face name)}
このフェースはフレームのフォントのイタリック(斜体)版があればそれを使いま
す。

@item bold-italic
@kindex bold-italic @r{(face name)}
このフェースはフレームのフォントのボールド・イタリック(太斜体)版があればそ
れを使います。
@end table

@node Merging Faces, Face Functions, Standard Faces, Faces
@subsection 表示の際のフェースの合併

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

@itemize @bullet
@item
既定値による指定。各フレームにはid番号が0である@dfn{既定フェース(default 
face)}があり、
とくにほかのフェースを指定しないテキストに使われます。

@item
テキスト属性による指定。文字には@code{face}属性をつけることができ、
その文字はそのフェースで表示されます。@xref{Special Properties}。

文字に@code{mouse-face}属性がある場合は、マウスがその文字の「十分近くに」
あるときに@code{face}属性の代わりに使われます。

@item
オーバレイによる指定。オーバレイにも@code{face}属性と
@code{mouse-face}属性がつけられて、オーバレイが覆っているテキストすべて
に働きます。

@item
アクティブなリージョンによる指定。Transient Markモードでは、リージョンは
特定のフェースを使って強調表示されます。(後述する@code{region-face}を参
照)。

@item
特別なグリフによる指定。各グリフは特定のフェースid番号を指定すること
ができます。@xref{Glyphs}。
@end itemize

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

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

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

@node Face Functions,  , Merging Faces, Faces
@subsection フェースに働く関数

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

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

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

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

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

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

オプション引数@var{new-frame}が与えられると、@code{copy-face}は
@var{frame}の@var{old-face}から@var{new-frame}の@var{new-name}に属性をコ
ピーします。
@end defun

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

@defun set-face-foreground face color &optional frame
@defunx set-face-background face color &optional frame
これらの関数はフェース@var{face}の文字色(背景色)を@var{color}に設定しま
す。引数@var{color}は色の名前を表す文字列でなければなりません。

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

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

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

@defun set-face-font face font &optional frame
この関数はフェース@var{face}のフォントを設定します
引数@var{font}は文字列でなければなりません。
@end defun

@defun set-face-underline-p face underline-p &optional frame
この関数はフェース@var{face}の下線属性を設定します。
非@code{nil}は下線つきという意味で@code{nil}は下線なしです。
@end defun

@defun invert-face face &optional frame
フェース@var{face}の文字色と背景色を交換します。フェースが文字色・背景色
両方を指定していない場合は、その文字色・背景色にはそれぞれ既定値の背景色・
文字色が設定されます。
@end defun

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

@defun face-foreground face &optional frame
@defunx face-background face &optional frame
これらの関数はフェース@var{face}の文字色(背景色)を文字列で返します。
@end defun

@defun face-stipple face &optional frame
この関数はフェース@var{face}の背景網かけパターンの名前を返します。背景網
かけパターンがなければ@code{nil}を返します。
@end defun

@defun face-font face &optional frame
この関数はフェース@var{face}のフォント名を返します。
@end defun

@defun face-underline-p face &optional frame
この関数はフェース@var{face}の下線属性を返します。
@end defun

@defun face-id face
この関数はフェース@var{face}のフェースid番号を返します。
@end defun

@defun face-equal face1 face2 &optional frame
これはフェース@var{face1}と@var{face2}が同じ表示属性を持っていれば
@code{t}を返します。
@end defun

@defun face-differs-from-default-p face &optional frame
これは@var{face}が既定値のフェースと異なった表示をするフェースならば
@code{t}を返します。あるフェースが既定値のフェースと同じと判断されるのは、
属性値それぞれが既定値のフェースのものとと同じ値であるか、@code{nil}(つ
まり既定値を継承している)場合です。
@end defun

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

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

@node Blinking, Inverse Video, Faces, Display
@section 対応括弧の点滅表示
@cindex parenthesis matching
@cindex blinking
@cindex balancing parentheses
@cindex close parenthesis
@cindex 括弧の対応[かっこのたいおう]
@cindex 点滅[てんめつ]
@cindex 釣り合う括弧[つりあうかっこ]
@cindex 閉じ括弧[とじかつこ]

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

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

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

@defvar blink-matching-paren
この変数が@code{nil}のときは@code{blink-matching-open}は何もしません。
@end defvar

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

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

@defun blink-matching-open
この関数は@code{blink-paren-function}の既定値です。閉じ括弧構文
をもつ文字のあとにポイントがあることを前提にして、
カーソルを一時的に対応する開き括弧構文文字に移動します。
その文字がすでに画面に表示されていなければ、その文字のコンテクストを
エコー領域に表示します。処理に長い時間かかってしまうのを防ぐために、この関数は
@code{blink-matching-paren-distance}文字を越えては検索しません。

次の例はこの関数を明示的に呼び出すものです。

@smallexample
@group
(defun interactive-blink-matching-open ()
@c Do not break this line! -- rms.
@c The first line of a doc string
@c must stand alone.
  "Indicate momentarily the start of sexp before point."
  (interactive)
@end group
@group
  (let ((blink-matching-paren-distance
         (buffer-size))
        (blink-matching-paren t))
    (blink-matching-open)))
@end group
@end smallexample
@end defun

@node Inverse Video, Usual Display, Blinking, Display
@section 反転表示(Inverse Video)
@cindex Inverse Video
@cindex 反転表示[はんてんひようじ]

@defopt inverse-video
@cindex highlighting
@cindex 強調表示[きようちようひようじ]
この変数はEmacsが画面のテキストすべてを反転表示するかどうかを制御します。
非@code{nil}の場合は、反転表示をし、@code{nil}の場合は反転表示をしません。
既定値は@code{nil}です。
@end defopt

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

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

@node Usual Display, Display Tables, Inverse Video, Display
@section 普通の表示方法

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

@itemize @bullet
@item
文字コード32から126まではグリフ・コード32から126に対応します。通常これはそ
れ自身が表示されることを意味しています。

@item
文字コード9は水平タブです。@code{tab-width}で決まる位置までの
空白として表示されます。

@item
文字コード10は改行です。

@item
これら以外のコードつまり0から31までとコード127は、@code{ctl-arrow}の値に
よって2種類に表示されます。これが非@code{nil}ならば、これらのコードは二つ
のグリフの列に対応し、1番目が@samp{^}の@sc{ASCII}コードとなります。(表示
テーブルによって@samp{^}以外のものを使うことが指定されているか
もしれません。) それ以外はこれらのコードは128から255のコードと同じように
対応づけられます。

@item
文字コード128から255は四つのグリフの列に対応します。1番目のグリフは
@samp{\}の@sc{ASCII}コードで、残りは文字コードを8進表示したものです。
(表示テーブルに@samp{\}以外のものを使うことが指定されているかもしれ
ません)。
@end itemize

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

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

@defopt ctl-arrow
@cindex control characters in display
@cindex 制御文字、表示の[せいぎよもじ、ひようじの]
このバッファ・ローカル変数は制御文字の表示方法を制御します。
非@code{nil}ならば、キャレットのあとに文字をつけて@samp{^A}のように表示します。
@code{nil}ならばバックスラッシュのあとに8進3桁で@samp{\001}のように表示し
ます。
@end defopt

@c Following may have overfull hbox.
@defvar default-ctl-arrow
この変数の値は@code{ctl-arrow}の値がバッファで再定義されていない場合の既
定値です。@xref{Default Value}。
@end defvar

@defopt tab-width
この変数の値はタブ・ストップの間隔で、Emacsバッファでタブ文字が表示される
ときに使われます。既定値は8です。この機能は@code{tab-to-tab-stop}コマ
ンドで使われるユーザが設定できるタブとは何の関係もないことに注意してくだ
さい。@xref{Indent Tabs}。
@end defopt

@node Display Tables, Beeping, Usual Display, Display
@section 表示テーブル

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

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

@menu
* Display Table Format::	表示テーブルの構成要素。
* Active Display Table::	Emacsが使用する表示テーブルを選択する方法。
* Glyphs::			グリフの定義方法、グリフの意味。
* ISO Latin 1::			表示テーブルを使って
                                  ISO Latin 1文字セットをサポートする方法。
@end menu

@node Display Table Format, Active Display Table, Display Tables, Display Tables
@subsection 表示テーブルの形式

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

@defun make-display-table
表示テーブルを作って返します。テーブルは初期値としてすべての要
素が@code{nil}になっています。
@end defun

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

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

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

@table @asis
@item 256
切捨て表示された行の末尾に表示されるグリフ(これの既定値は@samp{$})。
@xref{Glyphs}。
@item 257
継続表示された行の末尾用のグリフ(既定値は@samp{\})。
@item 258
文字が8進コード表示されているということを示すグリフ(既定値は
@samp{\})。
@item 259
制御文字を表すグリフ(既定値は@samp{^})。
@item 260
見えない行があることを示すグリフのベクタ(既定値は@samp{...})。
@xref{Selective Display}。
@item 261
横に並んだウィンドウの間に描かれる境界線に使われるグリフ(既定値は
@samp{|})。@xref{Splitting Windows}。
@end table

次の例は@code{ctl-arrow}を非@code{nil}に設定した場合の効果を真似る
表示テーブルを作る方法を示しています:

@example
(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 ?^ ??)))
@end example

@node Active Display Table, Glyphs, Display Table Format, Display Tables
@subsection アクティブな表示テーブル
@cindex active display table
@cindex アクティブな表示テーブル[あくていぶなひようじてーぶる]

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

@defun window-display-table window
この関数は@var{window}の表示テーブルを返します。@var{window}に
割り当てられた表示テーブルがなければ@code{nil}を返します。
@end defun

@defun set-window-display-table window table
この関数は@var{window}の表示テーブルを@var{table}に設定します。
引数の@var{table}は表示テーブルか、@code{nil}でなければなりま
せん。
@end defun

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

@defvar standard-display-table
この変数の値は既定値の表示テーブルで、ウィンドウにもバッファにも表示テー
ブルがない場合に使われます。この変数の既定値は@code{nil}です。
@end defvar

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

@node Glyphs, ISO Latin 1, Active Display Table, Display Tables
@subsection グリフ

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

@cindex glyph table
@cindex グリフ・テーブル[ぐりふてーぶる]
それぞれの整数のグリフとしての意味は変数@code{glyph-table}の値であるグリ
フ・テーブルで定義されます。

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

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

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

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

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

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

@node ISO Latin 1,  , Glyphs, Display Tables
@subsection ISO Latin 1

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

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

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

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

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

@node Beeping, Window Systems, Display Tables, Display
@section ベルを鳴らす
@cindex beeping
@cindex bell
@cindex ベルを鳴らす[べるをならす]
@cindex ベル[べる]

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

@defun ding &optional dont-terminate
@cindex keyboard macro termination
@cindex キーボード・マクロの終了[きーぼーどまくろのしゆうりよう]
この関数はベル音を鳴らすか、画面を点滅させるかします(下の
@code{visible-bell}を参照)。同時に@var{dont-terminate}が非@code{nil}であ
ればそのとき実行中のキーボード・マクロを終了させます。
@end defun

@defun beep &optional dont-terminate
これは@code{ding}と同じものです。
@end defun

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

@node Window Systems,  , Beeping, Display
@section ウィンドウ・システム

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

@defvar window-system
@cindex X Window System
@cindex Xウィンドウ・システム[Xうぃんどうしすてむ]
この変数はLispプログラムから、Emacsがどのウィンドウ・システムの下で動作
しているかを知るための変数です。その値は@code{x}(EmacsがXの下で動作して
いる場合)のようなシンボルか、@code{nil}(Emacsが普通の端末で動作している
場合)です。
@end defvar

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

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