[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37. Emacsの画面表示

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Display"
"texi/elisp21/Emacsの画面表示"へのコメント(無し)

本章では、Emacsがユーザーに提示する画面表示に関連する さまざまな機能について述べます。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.1 スクリーン全体の再表示

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Refresh%20Screen"
"texi/elisp21/スクリーン全体の再表示"へのコメント(無し)

関数redraw-frameは、指定したフレーム(see 節 28. フレーム)の 内容全体を再表示します。

Function: redraw-frame frame
この関数は、フレームframeをクリアしてから再表示する。

より強力なのはredraw-displayです。

コマンド: redraw-display
この関数は、すべての可視フレームをクリアしてから再表示する。

ユーザー入力の処理のほうが再表示より絶対的に優先します。 入力があるときにこれらの関数を呼び出してもただちにはなにもしませんが、 入力をすべて処理し終えてから再表示します。

通常、Emacsを停止したり再開しても スクリーン全体を再表示します。 Emacsのようなディスプレイ向けプログラムと通常の逐次表示向けに、 表示内容を個別に記録できる端末エミュレータもあります。 そのような端末を使っているときには、 再開時の再表示を禁止した場合もあります。

Variable: no-redraw-on-reenter
この変数は、停止後に再開したあとで、 スクリーン全体を再表示するかどうかを制御する。 nil以外であると再描画の必要はないことを意味し、 nilであると再描画が必要であることを意味する。 デフォルトはnilである。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.2 表示の切り詰め

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Truncation"
"texi/elisp21/表示の切り詰め"へのコメント(無し)

テキスト行がウィンドウの右端を越えていると、 その行をつぎのスクリーン行へ継続するか、 スクリーン行1行に切り詰めます。 長いテキスト行を表示するために使われる追加のスクリーン行を 継続行と呼びます。 通常、ウィンドウの最右端のコラムに現れる`$'で切り詰めたことを示し、 `\'でつぎの行に『折り返した』こと、 つまり、継続している行であることを示します。 (表示テーブルで別の文字を指定できる。 37.14 表示テーブルを参照。)

継続することと詰め込みは別のことです。 継続はスクリーン上だけのことであり、バッファ内容は変わりません。 また、継続では単語の境界ではなく、正確にスクリーンの右端で 行を分けます。 See 節 31.11 詰め込み

User Option: truncate-lines
このバッファローカルな変数は、 ウィンドウの右端を越える行をどのように表示するかを制御する。 デフォルトはnilであり継続を意味する。 値がnil以外であると、そのような行を切り詰める。

変数truncate-partial-width-windowsnil以外であると、 (フレーム内で)左右に並んだウィンドウでは、 truncate-linesの値に関わらずつねに切り詰る。

User Option: default-truncate-lines
この変数は、truncate-linesのバッファローカルな値を持たない バッファ向けのtruncate-linesのデフォルト値である。

User Option: truncate-partial-width-windows
この変数は、左右に並んだウィンドウ(see 節 27.2 ウィンドウの分割)において、 ウィンドウの右端を越える行の表示を制御する。 nil以外であると、そのような行を切り詰める。 さもなければ、truncate-linesに従って表示する。

ウィンドウで水平方向にスクロールしている(see 節 27.12 水平スクロール)と、 強制的に切り詰めます。

継続や切り詰めを表す文字は、表示テーブルを使って変更できます。 See 節 37.14 表示テーブル

バッファにとても長い行があるときにそれらの表示に継続行を使うと、 それによりEmacsの再表示が遅くなります。 コラム計算や字下げ関数も遅くなります。 そのような場合には、cache-long-line-scanstを 設定するのがよいです。

Variable: cache-long-line-scans
この変数がnil以外であると、 字下げ/移動関数とEmacsの再表示において、 バッファを走査した結果をキャッシュし、 バッファが変更されていないときには キャッシュを調べてバッファの対象領域の再走査を回避する。

キャッシュするようにすると、短い行の処理が多少遅くなる。

この変数は、すべてのバッファで自動的にバッファローカルである。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.3 エコー領域

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=The%20Echo%20Area"
"texi/elisp21/エコー領域"へのコメント(無し)

エコー領域(echo area)は、 基本関数messageでメッセージを表示したり、 打鍵を表示するために使われます。 (活性な)ミニバッファはエコー領域と 同じスクリーン上の位置に現れますが、 エコー領域とミニバッファは同じものではありません。

GNU Emacs マニュアル
には、 エコー領域とミニバッファがスクリーンの同じ箇所を使う際の 衝突を回避する規則が述べてあります (see GNU Emacs マニュアル)。 エラーメッセージもエコー領域に現れます。 See 節 9.5.3 エラー

エコー領域に表示するには、 ストリーム(see 節 18.5 出力関数)として tを指定したLisp表示関数を使うか、あるいはつぎのようにします。

Function: message string &rest arguments
この関数は、エコー領域に1行のメッセージを表示する。 引数stringは、言語Cのprintfの制御文字列と同様である。 書式指定について詳しくは、4.6 文字と文字列の変換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 ----------

Function: message-or-box string &rest arguments
この関数はmessageと同様にメッセージを表示するが、 エコー領域のかわりに対話ボックスを使うこともある。 この関数がマウスを用いて起動されたコマンドから呼ばれたとき、 より正確には、last-nonmenu-event(see 節 20.4 コマンドループからの情報)が nilかリストのいずれかであると、 メッセージを表示するために対話ボックスかポップアップメニューを用いる。 さもなければエコー領域を用いる。 (これは、同様な決定をくだすy-or-n-pの判定条件と同じである。 see 節 19.6 Yes/Noの問い合わせ。)

呼び出しの周りでlast-nonmenu-eventに適切な値を束縛することで、 マウスを使うかエコー領域を使うか強制できる。

Function: message-box string &rest arguments
この関数はmessageと同様にメッセージを表示するが、 可能な限り対話ボックス(やポップアップメニュー)を使う。 対話ボックスやポップアップメニューを扱えない端末などで これらを使用できない場合には、 message-boxmessageと同様にエコー領域を使う。

Function: current-message
この関数は、エコー領域に現在表示されているメッセージを返す。 なければnilを返す。

Variable: cursor-in-echo-area
この変数は、エコー領域にメッセージを表示しているときに カーソルをどこに表示するかを制御する。 nil以外であると、メッセージの末尾にカーソルを表示する。 さもなければ、エコー領域にではなく、ポイント位置にカーソルを表示する。

この値は普通はnilである。 Lispプログラムはこれにtを短い期間だけ束縛する。

Variable: echo-area-clear-hook
このノーマルフックは、(message nil)や他の理由で エコー領域をクリアするたびに実行される。

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

User Option: message-log-max
この変数は、バッファ`*Messages*'に保持する行数を指定する。 値tは、保持する行数を制限しないことを意味する。 値nilは、メッセージをまったく記録しないことを意味する。 メッセージを表示しつつそれを記録しないようにするには つぎのようにする。

 
(let (message-log-max)
  (message ...))

Variable: echo-keystrokes
この変数は、コマンド文字を表示するまでの経過時間を決定する。 この値は整数であり、表示し始めるまでに待つ秒数を指定する。 ユーザーが(C-xなどの)プレフィックスキーを打ってから つぎを打つまでにこの秒数だけ遅れがあると、 プレフィックスキーをエコー領域に表示する。 (いったんキー列の表示を始めると、 同じキー列の以降の文字すべてを表示する。)

値がゼロであると、コマンド入力を表示しない。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.4 不可視なテキスト

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Invisible%20Text"
"texi/elisp21/不可視なテキスト"へのコメント(無し)

属性invisibleで文字群を不可視にできます。 つまり、それらをスクリーンに表示されないようにするのです。 テキスト属性(see 節 31.19 テキスト属性)か オーバレイの属性(see 節 37.8 オーバレイ)を使います。

もっとも単純な場合、 属性invisiblenil以外であると文字は見えなくなります。 これはデフォルトの場合、つまり、 buffer-invisibility-specのデフォルト値を変更していない場合であり、 このようにして属性invisibleは動作します。

より一般的には、変数buffer-invisibility-specを使って、 属性invisibleのどの値のものを不可視なテキストにするかを制御できます。 つまり、invisibleの異なる値を与えて テキストをあらかじめいくつかのグループに分類しておき、 そのあとでbuffer-invisibility-specの値を変更して さまざまなグループを可視/不可視にします。

buffer-invisibility-specで可視性を制御することは、 データベースの項目の一覧を表示するようなプログラムで特に有用です。 データベースの特定の項目だけを見るための 便利なフィルタコマンドを実装できます。 この変数に設定するのはとても速くでき、 変更すべき属性を探すためにバッファ内の全テキストを走査するよりも速いのです。

Variable: buffer-invisibility-spec
この変数は、属性invisibleのどの種類を実際に 不可視な文字にするかを指定する。

t
属性invisiblenil以外の文字を不可視にする。 これがデフォルト。

リスト
リストの各要素で不可視にする条件を指定する。 文字の属性invisibleがこれらの条件の1つを満たすと、 その文字を不可視にする。 リストには2種類の要素がありうる。

atom
文字の属性invisibleの値がatomであるか、 そのリストのメンバにatomがあると、 文字を不可視にする。

(atom . t)
文字の属性invisibleの値がatomであるか、 そのリストのメンバにatomがあると、 文字を不可視にする。 さらに、その文字が行末にあり、直後に目に見える改行がある場合には、 `...'を表示する。

buffer-invisibility-specに要素を追加したり削除するために 2つの関数が特別にあります。

Function: add-to-invisibility-spec element
(リストにelementが既存でなければ) buffer-invisibility-specに要素elementを追加する。

Function: remove-from-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-invisiblenil以外であれば 不可視な改行を明示的に無視しますが、 それはそのように明示的にプログラムしてあるからにすぎません。

インクリメンタルサーチでは、 不可視なテキストを含む一致箇所では、 不可視なオーバレイを一時的にあるいは恒久的に可視にできます。 これを可能にするには、オーバレイの属性isearch-open-invisiblenil以外である必要があります。 その属性の値は、オーバレイを引数として呼ばれる関数である必要があります。 その関数がオーバレイを恒久的に可視にします。 その関数は、探索から抜けるときに一致箇所が オーバレイにまたがっているときに使われます。

探索中には、そのようなオーバレイは、 それらの属性invisibleintangibleを一時的に変更することで 一時的に可視にされます。 特定のオーバレイに対して異なる扱いをしたければ、 属性isearch-open-invisible-temporaryに関数を与えておきます。 その関数は2つの引数で呼ばれます。 第1引数はオーバレイ、 第2引数は、オーバレイを可視にするt、あるいは、 オーバレイを再度不可視にするnilです。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.5 選択表示

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Selective%20Display"
"texi/elisp21/選択表示"へのコメント(無し)

選択表示とは、 スクリーン上の特定の行を隠すための関連する機能対を指します。

最初の変種は、明示的な選択表示で、 Lispプログラムで使用するために設計されています。 テキストを変更することでどの行を隠すかを制御します。 テキストを不可視にする機能(see 節 37.4 不可視なテキスト)は、 この機能で部分的に置き換えてあります。

2番目の変種は、字下げに基づいて自動的に隠す行を選択します。 この変種は、ユーザーレベルの機能であるように設計されています。

明示的な選択表示を制御するには、 改行(コントロールJ)を復帰(コントロールM)に置き換えます。 置換前の改行に続いていたそれまでの行は見えなくなります。 厳密にいえば、改行だけが行を区切るため、 一時的にはもう行ではなくなっているのです。 つまり、先行する行の一部になっているのです。

選択表示は、編集コマンドに直接には影響しません。 たとえば、C-fforward-char)は 躊躇なく不可視なテキストの中へポイントを移動します。 しかし、改行文字を復帰文字に置換すると 影響を受ける編集コマンドもあります。 たとえば、next-lineは、 改行だけを探すため不可視な行を飛び越してしまいます。 選択表示を使用するモードでは、 改行を考慮するようにコマンドを定義したり、 テキストの一部を可視/不可視にするコマンドを定義できます。

選択表示しているバッファをファイルに書き出すときには、 すべてのコントロールM(復帰)は改行として出力されます。 つまり、つぎにファイルを読み込むと不可視なものはなく、 普通に見えるのです。 選択表示の効果は、Emacsの内側だけで見えるのです。

Variable: 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 ----------

Variable: selective-display-ellipses
このバッファローカルな変数が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 節 37.14 表示テーブル



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.6 オーバレイ矢印

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Overlay%20Arrow"
"texi/elisp21/オーバレイ矢印"へのコメント(無し)

オーバレイ矢印(overlay arrow)は、 バッファの特定の行にユーザーの注意を向けるために有用です。 たとえば、デバッガとのインターフェイスを取るためのモードでは、 オーバレイ矢印で実行するコードの行を示します。

Variable: overlay-arrow-string
この変数は、特定の行に注意を向けるために表示する文字列を保持する。 矢印機能を使っていなければnilである。

Variable: overlay-arrow-position
この変数は、オーバレイ矢印を表示する箇所を表すマーカを保持する。 行頭を指すこと。 矢印のテキストはその行の先頭に現れ、 その場所に本来現れるべきテキストを隠す。 矢印は普通は短く、行には字下げがあるので、 重要なものは普通はなにも上書きされない。

オーバレイ文字列は、マーカが指すバッファでのみ表示される。 したがって、ある時点では、1つのバッファだけにオーバレイ矢印を表示できる。

同様のことは、属性before-stringのオーバレイを 作成してもできます。 See 節 37.8.1 オーバレイ属性



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.7 一時的な表示

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Temporary%20Displays"
"texi/elisp21/一時的な表示"へのコメント(無し)

一時的な表示は、 出力をバッファに置き編集目的にではなく ユーザーに読むように提示するために Lispプログラムが使います。

Special Form: with-output-to-temp-buffer buffer-name forms...
この関数は、buffer-nameという名前のバッファに formsの任意の出力が挿入されるように準備して formsを実行する。 そのバッファは適当なウィンドウに表示されるが、 そのバッファは選択されない。

文字列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 ----------
20

#

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

Variable: temp-buffer-show-function
この変数がnil以外であると、 ヘルプバッファを表示するために with-output-to-temp-bufferがこの値を関数として呼び出す。 関数は1つの引数、つまり、表示すべきバッファを受け取る。

この関数では、 save-window-excursionを使いウィンドウとバッファを選択した内側で、 with-output-to-temp-bufferが普通に行うように temp-buffer-show-hookを呼び出すのがよい。

Variable: temp-buffer-show-hook
このノーマルフックは、ヘルプバッファを表示後に with-output-to-temp-bufferが実行する。 フックを実行するときには、 ヘルプバッファがカレントバッファであり、 それを表示しているウィンドウが選択されているウィンドウである。

Function: momentary-string-display string position &optional char message
この関数は、カレントバッファ内の位置positionに 文字列stringを瞬間的に表示する。 アンドゥリストやバッファの変更状態には影響しない。

瞬間的な表示は、つぎの入力イベントまで持続する。 つぎの入力イベントがcharであると、 momentary-string-displayはそれを無視して戻る。 さもなければ、そのイベントは入力として使われるように保存される。 したがって、charを打つと文字列の表示が単に消えるだけであるが、 (たとえば)C-fを打つと文字列の表示が消えるだけでなく (たぶん)ポイントを進めることになる。 引数charはデフォルトでは空白である。

momentary-string-displayの戻り値に意味はない。

文字列stringにコントロール文字が含まれなければ、 属性before-stringのオーバレイを作成(のちに削除)することで より一般的な方法で同じことを行える。 see 節 37.8.1 オーバレイ属性

messagenil以外であると、 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 ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.8 オーバレイ

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Overlays"
"texi/elisp21/オーバレイ"へのコメント(無し)

ユーザーに提示するためにスクリーン上でのバッファのテキストの見た目を 変えるためにオーバレイ(overlay)を使えます。 オーバレイは、特定のバッファに属するオブジェクトであり、 指定された開始位置と終了位置があります。 また、調べたり設定できる属性もあります。 これらの属性は、オーバレイの内側のテキストの表示に影響します。

37.8.1 オーバレイ属性    How to read and set properties. What properties do to the screen display.
37.8.2 オーバレイの管理    Creating, moving, finding overlays.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.8.1 オーバレイ属性

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Overlay%20Properties"
"texi/elisp21/オーバレイ属性"へのコメント(無し)

オーバレイ属性はある意味でテキスト属性に似ていて、 どちらの属性でも文字の表示方法を変更できます。 しかし、多くの点で異なります。 テキスト属性は、テキストの一部であるとみなされますが、 オーバレイはテキストの一部とはみなしません。 したがって、さまざまなバッファや文字列のあいだでテキストをコピーしても テキスト属性は保存されますが、オーバレイは保存されません。 バッファ内のテキスト属性を変更するとバッファを変更済みと印を付けますが、 オーバレイを移動したりその属性を変更しても バッファの変更とは考えません。 テキスト属性の変更と異なり、 オーバレイの変更はバッファのアンドゥリストには記録されません。 比較のためにSee 節 31.19 テキスト属性

priority
この属性の値(非負の数であること)は、 オーバレイの優先順位を決定する。 優先順位は、複数のオーバレイが同じ文字を覆い、 いずれも表示用のフェイスを指定している場合に意味を持つ。 priorityの値の大きなものが他に優先し、 そのフェイス属性が他の低い順位の属性のフェイス属性に優先する。

現在、すべてのオーバレイ属性はテキスト属性に優先する。 負の優先順位の意味を決めかねているので、負の優先順位は避けてほしい。

window
属性windownil以外であると、 オーバレイをそのウィンドウだけに適用する。

category
オーバレイに属性categoryがあると、 それをオーバレイのカテゴリ(category)と呼ぶ。 これはシンボルであること。 シンボルの属性がオーバレイの属性のデフォルトの役割を果たす。

face
この属性は、テキストの表示方法、たとえば、 フォントや表示色を制御する。 その値は、フェイス名であるかフェイス名のリストである。 詳しくは、see 節 37.10 フェイス

属性値がリストであると、その要素は、 (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 節 37.4 不可視なテキスト

intangible
属性intangibleは、オーバレイにおいて テキスト属性intangibleと同様に働く。 詳しくは、see 節 31.19.4 特別な意味を持つ属性

isearch-open-invisible
この属性は、インクリメンタルサーチに対して、 一致箇所がオーバレイに重なったときに 不可視なオーバレイを恒久的に可視にする方法を指示する。 see 節 37.4 不可視なテキスト

isearch-open-invisible-temporary
この属性は、インクリメンタルサーチに対して、 探索中に不可視なオーバレイを一時的に可視にする方法を指示する。 see 節 37.4 不可視なテキスト

before-string
この属性の値は、オーバレイの先頭位置に追加表示する文字列である。 文字列はいかなる意味においてもバッファには現れず、 スクリーン上のみに現れる。 文字列は1コラムで表示される文字のみであること。 タブや改行を含むコントロール文字を含むと奇妙な結果を生じる。

after-string
この属性の値は、オーバレイの末尾位置に追加表示する文字列である。 文字列はいかなる意味においてもバッファには現れず、 スクリーン上のみに現れる。 文字列は1コラムで表示される文字のみであること。 タブや改行を含むコントロール文字を含むと奇妙な結果を生じる。

evaporate
この属性がnil以外であると、 オーバレイが空に(つまり覆う文字がなく)なると、 自動的にオーバレイを削除する。

local-map
この属性がnil以外であると、当該部分のテキストに対する キーマップを指定する。 ポイントの直後の文字がオーバレイに入っていると、 属性の値はバッファローカルなキーマップに置き換わる。 see 節 21.6 活性なキーマップ

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

Function: overlay-get overlay prop
この関数は、オーバレイoverlayに記録されている 属性propの値をあれば返す。 overlayにそのような属性に対する値が記録されていなくても、 属性categoryがありそれがシンボルであれば、 そのシンボルの属性propを使う。 さもなければ値はnilである。

Function: overlay-put overlay prop value
この関数は、オーバレイoverlayに属性propの値として valueを設定する。 valueを返す。

与えられた文字のオーバレイ属性とテキスト属性の両方を調べる 関数code{get-char-property}も参照してください。 See 節 31.19.1 テキスト属性を調べる



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.8.2 オーバレイの管理

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Managing%20Overlays"
"texi/elisp21/オーバレイの管理"へのコメント(無し)

本節では、オーバレイを作成、削除、移動したり、 それらの内容を調べる関数について述べます。

Function: make-overlay start end &optional buffer front-advance rear-advance
この関数は、バッファbufferに属する startからendまでを覆うオーバレイを作成しそれを返す。 startendのどちらもバッファ内位置を指定する 整数かマーカであること。 bufferを省略すると、カレントバッファにオーバレイを作成する。

引数front-advancerear-advanceは、 オーバレイの開始位置と終了位置における挿入型を指定する。 see 節 30.5 マーカの挿入型

Function: overlay-start overlay
この関数は、オーバレイoverlayの開始位置を整数で返す。

Function: overlay-end overlay
この関数は、オーバレイoverlayの終了位置を整数で返す。

Function: overlay-buffer overlay
この関数は、オーバレイoverlayが属するバッファを返す。

Function: delete-overlay overlay
この関数は、オーバレイoverlayを削除する。 Lispオブジェクトとしてはオーバレイは存在し続けるが、 それが属したバッファとの対応付けは消失し、 表示上の効果もなくなる。

削除したオーバレイは恒久的に無意味ではない。 move-overlayを呼び出して新たなバッファ内位置をそれに与えられる。

Function: move-overlay overlay start end &optional buffer
この関数は、オーバレイoverlayをバッファbufferに移し、 startからendを覆うようにする。 startendのどちらもバッファ内位置を指定し、 整数かマーカである。 bufferを省略すると、オーバレイは同じバッファに留まる。

戻り値はoverlayである。

これは、オーバレイの端を変更する唯一の正しい方法である。 オーバレイのマーカを手で修正しようとしないこと。 他の重要なデータ構造を更新しそこない、 いくつかのオーバレイを『失う』ことにもなりかねない。

Function: overlays-at pos
この関数は、カレントバッファの位置posを覆うすべての オーバレイのリストを返す。 このリスト内の順番に意味はない。 オーバレイが位置posかそのまえで始まり、かつ、 位置posかそのうしろで終るときに、 オーバレイは位置posを覆う。

Function: overlays-in beg end
この関数は、begからendまでの領域と 重なり合っているすべてのオーバレイのリストを返す。 『重なり合っている』とは、 少なくとも1文字がオーバレイに覆われていて、かつ、 その文字が指定された領域に入っていることを意味する。 しかし、空のオーバレイであっても それがbegにあるかbegendのあいだにあれば、 空のオーバレイも結果に含まれる。

Function: next-overlay-change pos
この関数は、位置posのうしろにある オーバレイのつぎの開始位置か終了位置を返す。

Function: previous-overlay-change pos
この関数は、位置posのまえにある オーバレイのまえの開始位置か終了位置を返す。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.9 表示幅

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Width"
"texi/elisp21/表示幅"へのコメント(無し)

すべての文字が同じ表示幅ではありませんから、 これらの関数で文字の表示幅を検査できます。 関連する関数については、31.17.1 字下げ基本関数とSee 節 29.2.5 スクリーン行分の移動

Function: char-width char
この関数は、文字charを選択されているウィンドウで カレントバッファに表示した場合のコラム幅を返す。

Function: string-width string
この関数は、文字列stringを選択されているウィンドウで カレントバッファに表示した場合のコラム幅を返す。

Function: truncate-string-to-width string width &optional start-column padding
この関数は、幅widthに収まる文字列stringの部分を 新たな文字列として返す。

stringが幅widthに満たない場合、 stringの終りで結果は終る。 string内の1つの複数コラム文字がコラムwidthを越える場合には、 その文字は結果に含めない。 したがって、結果はwidthより短くなりえるがそれを越えることはない。

省略可能な引数start-columnは、開始コラムを指定する。 これがnil以外であると、文字列のはじめの start-columnコラムを結果から省く。 string内の1つの複数コラム文字がコラムstart-columnを越える場合には、 その文字は結果に含めない。

省略可能な引数paddingnil以外であると、 結果の文字列の先頭や末尾に付加して ちょうどwidthコラムにするためのパディング文字である。 widthより短くなる場合に 結果の末尾にパディング文字を使う。 複数コラム文字がコラムstart-columnを越える場合には、 結果の先頭にパディング文字を使う。

 
(truncate-string-to-width "\tab\t" 12 4)
     => "ab"
(truncate-string-to-width "\tab\t" 12 4 ?\ )
     => "    ab  "



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.10 フェイス

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Faces"
"texi/elisp21/フェイス"へのコメント(無し)

フェイス(face)とは、図形的な属性、つまり、 フォント、前景色、背景色、下線 の名前付きの集合体です。 フェイスはスクリーン上のテキストの表示を制御します。

各フェイスには固有のフェイス番号(face number)があり、 Emacs内部の下位レベルでフェイスを区別するために使われます。 しかし、ほとんどの目的には、 Lispプログラムでは名前でフェイスを参照できます。

Function: facep object
この関数は、objectがフェイスを指名するシンボル (あるいは、フェイスデータを記録するために内部的に使われる種類のベクトル) であるとtを返す。 さもなければnilを返す。

各フェイス名はすべてのフレームで有効であり、 デフォルトではすべてのフレームで同じ意味を持ちます。 しかし、望みの1つのフレームで特定のフェイス名に 特定の意味を持たせることもできます。

37.10.1 標準フェイス    The faces Emacs normally comes with.
37.10.2 フェイスを定義する    How to define a face with defface.
37.10.3 表示向けにフェイスを併合する    How Emacs decides which face to use for a character.
37.10.4 フェイスを扱う関数    How to define and examine faces.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.10.1 標準フェイス

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Standard%20Faces"
"texi/elisp21/標準フェイス"へのコメント(無し)

つぎの表はすべての標準フェイスとその用途です。

default
このフェイスは通常のテキストに対して使う。

modeline
このフェイスはモード行とメニューバーに対して使う。

region
このフェイスは、暫定マーク(transient-mark)モードでリージョンを 強調表示するために使う。

secondary-selection
このフェイスは、指定した任意の二次セレクションを示すために使う。

highlight
このフェイスは、さまざま目的向けに強調表示するために使う。

underline
このフェイスは、テキストに下線を引く。

bold
このフェイスは、可能ならば太字(bold)フォントを使う。 フレームのフォントに太字(bold)変種があればそれを使う。 太字変種を使用したい場合には、 太字フォント変種を有するデフォルトフォントを選ぶのは読者の責任である。

italic
このフェイスは、フレームのフォントに 斜体(italic)変種があればそれを使う。

bold-italic
このフェイスは、フレームのフォントに 太字斜体(bold-italic)変種があればそれを使う。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.10.2 フェイスを定義する

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Defining%20Faces"
"texi/elisp21/フェイスを定義する"へのコメント(無し)

新たなフェイスを定義する方法は、deffaceを使うことです。 これは、カスタマイズバッファ (see GNU Emacs マニュアル) を用いてユーザーがカスタマイズできる カスタマイズ項目(see 節 13. カスタマイズ定義の書き方)の一種を作成します。

Macro: defface face spec doc [keyword value]...
specに従ったデフォルトを持つカスタマイズ可能なフェイスとして faceを宣言する。 シンボルfaceをクォートしないこと。 引数docは、フェイスの説明文字列を指定する。

deffaceを実行すると、specに従ったフェイスを定義し、 ファイル`.emacs'から読み取った任意のカスタマイズを specの指定に優先させる。

specの目的は、異なる種類の端末でフェイスがどのような 見た目になるかを指定することである。 (display atts)の形の要素から成る 連想リストであること。 要素のCARのdisplayは端末の種類を指定する。 CDRのattsはフェイスの属性とその値のリストであり、 その種類の端末上でそのフェイスがどのように見えるかを指定する。 可能な属性は、custom-face-attributesの値で定義される。

specの要素のdisplay部分は、要素を適用するフレームを決定する。 specの1つより多くの要素が指定されたフレームに一致する場合、 そのフレームに一致した最初の要素だけを用いる。 displayには2つの可能性がある。

t
specの要素はすべてのフレームで一致する。 したがって、specの以降の要素をけっして使わない。 通常、tspecの最後の(あるいは唯一)の要素に使う。

リスト
displayがリストであると、 各要素は(characteristic value...)の形であること。 ここで、characteristicはフレームの分類方法であり、 valuedisplayを適用すべき分類とみなす値である。 特性characteristicの可能な値はつぎのとおりである。

type
フレームが使用するウィンドウシステムの種類であり、 xpc(MS-DOSのコンソール)、 w32(MS Windows 9X/NT)、ttyのいずれかである。

class
フレームで扱える表示色の種類であり、 colorgrayscalemonoのいずれかである。

background
背景の種類であり、lightdarkのいずれかである。

displayの1つの要素において、 指定されたcharacteristicに 1つより多くのvalueを指定すると、 それらのいずれの値でも受け入れる。 displayに1つより多くの要素がある場合、 各要素は異なるcharacteristicを指定すること。 そうすれば、フレームの特性は displayに指定されたそのフレーム向けの valueの1つに一致するはずである。

標準フェイスregiondeffaceで 定義するとつぎのようになります。

 
(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を使います。

User Option: frame-background-mode
このオプションがnil以外であると、 フェイスの定義を解釈する際に用いる背景の型を指定する。 これがdarkであると、 実際の背景色に関わらずEmacsはすべてのフレームの背景は暗いとみなす。 これがlightであると、 Emacsはすべてのフレームの背景は明るいとみなす。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.10.3 表示向けにフェイスを併合する

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Merging%20Faces"
"texi/elisp21/表示向けにフェイスを併合する"へのコメント(無し)

テキストの表示に使用するフェイスを指定する方法はつぎのとおりです。

ある文字に対してこれらのさまざまな指定が 1つより多くのフェイスを指定する場合、 Emacsは指定されたさまざまなフェイスの属性を併合します。 特別な字形のフェイスが最初です。 適切ならば、つぎはリージョンの強調表示のフェイスです。 そのつぎはオーバレイのフェイスの属性、 さらにテキスト属性のフェイスが続き、 最後はデフォルトのフェイスです。

複数のオーバレイが1つの文字を覆う場合、 高い優先順位のオーバレイが低いものに優先します。 See 節 37.8 オーバレイ

フォントや表示色のような属性がうえのどれでも指定されていない場合には、 フレーム独自のフォントや表示色を使います。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.10.4 フェイスを扱う関数

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Face%20Functions"
"texi/elisp21/フェイスを扱う関数"へのコメント(無し)

フェイスの属性で指定できるのは、フォント、前景色、背景色、下線です。 フェイスでは値nilを指定することでこれらを未指定にできます。

以下は、フェイスを作成したり変更する基本関数です。

Function: make-face name
この関数は、すべての属性をnilとした nameという名前の新たなフェイスを定義する。 nameという名前のフェイスが既存ならばなにもしない。

Function: face-list
この関数は、定義済みのすべてのフェイス名のリストを返す。

Function: copy-face old-face new-name &optional frame new-frame
この関数は、既存のold-faceという名前のフェイスのコピーとして フェイスnew-nameを定義する。 new-nameが既存でなければ、フェイスnew-nameを作成する。

省略可能な引数フレームframeを指定すると、 この関数はそのフレームだけに適用する。 さもなければ、各フレームにおいて個別に、 そのフレームのold-faceの属性を 同じフレームのnew-faceにコピーする。

省略可能な引数フレームnew-frameを指定すると、 copy-faceは フレームframeold-faceの属性を フレームnew-framenew-faceにコピーする。

以下の関数を使って既存のフレームの属性を変更できます。 フレームframeを指定すると、そのフレームだけに影響します。 さもなければ、新たなフレームに適用されるデフォルトに加えて すべてのフレームに影響します。

Function: set-face-foreground face color &optional frame
Function: set-face-background face color &optional frame
これらの関数は、フェイスfaceの前景色(あるいは背景色)として colorを設定する。 引数colorは、表示色名の文字列であること。

白黒スクリーンでは、濃淡は点猫パターンで実現する。

Function: set-face-stipple face pattern &optional frame
この関数は、フェイスfaceの背景点猫パターンとして patternを設定する。 引数patternは、Xサーバーで定義された背景点猫パターンの名前であること。 あるいは、点猫を使わないことを意味するnilであること。

白黒階調の特定の濃淡を扱うために自動的に点猫パターンを使うため、 普通は点猫パターンに注意する必要はない。

Function: set-face-font face font &optional frame
この関数は、フェイスfaceのフォントを設定する。 引数fontは、読者のシステムの正しいフォント名か Emacsのフォントセット名(see 節 28.20 フォントセット)の文字列であること。 フォントを明示的に設定するとつねに正確にそれを使うため、 太字(bold)や斜体(italic)の属性の効果は消失することに注意。

Function: set-face-bold-p face bold-p &optional frame
この関数は、フェイスfaceの太字(bold)の属性を設定する。 nil以外は太字あり、nilは太字なしを意味する。

Function: set-face-italic-p face italic-p &optional frame
この関数は、フェイスfaceの斜体(italic)の属性を設定する。 nil以外は斜体あり、nilは斜体なしを意味する。

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-bold-p face &optional frame
この関数はフェイスfaceの太字(bold)属性を返す。

Function: face-italic-p face &optional frame
この関数はフェイスfaceの斜体(italic)属性を返す。

Function: face-underline-p face &optional frame
この関数はフェイスfaceの下線属性を返す。

Function: face-id face
この関数はフェイスfaceのフェイス番号を返す。

Function: face-documentation face
この関数はフェイスfaceの説明文字列を返す。 なければnilを返す。

Function: face-equal face1 face2 &optional frame
この関数は、フェイスface1face2が 表示上の同じ属性を持てばtを返す。

Function: face-differs-from-default-p face &optional frame
この関数は、フェイスfaceの表示がデフォルトのフェイスの表示と 異なる場合にはtを返す。 フェイスの各属性がデフォルトフェイスの対応する属性に等しいか (デフォルトから継承すること意味する)nilであると、 フェイスはデフォルトのフェイスと『等しい』とみなす。

Variable: region-face
この変数の値は、リージョンが活性(暫定マーク(transient-mark)モードのみ) の場合にリージョン内の文字の表示に使用するフェイス番号を指定する。 リージョン内の文字では、これが指定するフェイスが テキスト属性やオーバレイのすべてのフェイスに優先する。 暫定マーク(transient-mark)モードについて詳しくは、see 節 30.7 マーク

通常、値はregionという名前のフェイスのフェイス番号である。

Function: frame-update-face-colors frame
この関数は、フレームframeの前景色や背景色を変更後に フレームframe上のフェイスの表示を更新する。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.11 括弧を点滅する

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Blinking"
"texi/elisp21/括弧を点滅する"へのコメント(無し)

本節では、ユーザーが閉じ括弧を挿入したときに Emacsが対応する開き括弧を指し示す機構について述べます。

Variable: blink-paren-function
この変数の値は、閉じ括弧構文の文字が挿入されるたびに 呼び出される(引数なしの)関数であること。 blink-paren-functionの値がnilであると、なにもしない。

User Option: blink-matching-paren
この変数がnilであると、blink-matching-openはなにもしない。

User Option: blink-matching-paren-distance
この変数は、対応する括弧の走査を諦めるまでの最大距離を指定する。

User Option: blink-matching-delay
この関数は、対応する括弧にカーソルを留める秒数を指定する。 秒未満を指定してもしばしば結果は良好であるが、 デフォルトはすべてのシステムで動作する1である。

コマンド: 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 ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.12 反転表示

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Inverse%20Video"
"texi/elisp21/反転表示"へのコメント(無し)

User Option: inverse-video
この変数は、スクリーン上のすべてのテキストに 反転表示を使うかどうかを制御する。 nil以外は使うことを意味し、 nilは使わないことを意味する。 デフォルトはnilである。

User Option: mode-line-inverse-video
この変数は、モード行に反転表示を使うかどうかを制御する。 nil以外であると、モード行を反転表示する。 さもなければ、テキストと同様にモード行を普通に表示する。 デフォルトはtである。

ウィンドウフレームでは、 modelineという名前のフェイスを使ってモード行を表示する。 このフェイスは、変更していなければ、デフォルトフェイスの反転表示である。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.13 通常の画面表示慣習

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Usual%20Display"
"texi/elisp21/通常の画面表示慣習"へのコメント(無し)

通常の画面表示慣習は、各文字コードをどのように表示するかを定義します。 表示テーブル(see 節 37.14 表示テーブル)を設定すれば、 これらの慣習を無効にできます。 通常の画面表示慣習をつぎに示します。

通常の画面表示慣習は、たとえ表示テーブルがあっても、 活性な表示テーブルにおいてその文字に対する項目がnilであるような 文字すべてに適用されます。 したがって、表示テーブルを設定するときには、 特別なふるまいをさせたい文字だけを指定すればよいのです。

これらの変数は、特定の文字群のスクリーンへの表示方法に影響します。 これらは文字が占めるコラム数を変化させるので、 字下げ関数にも影響します。 これらの変数は、モード行の表示方法にも影響します。 新たな値を用いてモード行の再表示を強制したいときには、 関数force-mode-line-update(see 節 22.3 モード行の書式)を 呼び出します。

User Option: ctl-arrow
このバッファローカルな変数は、 コントロール文字の表示方法を制御する。 nil以外であると、`^A'のように カレットに続けて文字を表示する。 nilであると、`\001'のように バックスラッシュに続けて3桁の8進数字で表示する。

Variable: default-ctl-arrow
この変数の値は、ctl-arrowを書き換えていないバッファ向けの ctl-arrowのデフォルト値である。 see 節 10.10.3 バッファローカル変数のデフォルト値

User Option: tab-width
この変数の値は、Emacsのバッファ内のタブ文字の表示に使う タブストップの間隔である。 デフォルトは8である。 この機能は、コマンドtab-to-tab-stopで設定する ユーザー設定可能なタブストップとはまったく独立であることに注意。 see 節 31.17.5 調整可能な『タブストップ』



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.14 表示テーブル

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Display%20Tables"
"texi/elisp21/表示テーブル"へのコメント(無し)

表示テーブル(display table)機能を使って、 すべての可能な文字コードのスクリーンへの表示方法を制御できます。 これは、ASCII文字集合にない文字を用いる ヨーロッパの言語を表示するのに有用です。

表示テーブルは、各文字コードを字形(glyph)の列に対応付けます。 各字形は、スクリーン上で1文字を占める像です。 字形テーブル(glyph table)を使えば、 読者の端末に各字形を表示する方法を定義することもできます。

表示テーブルは、モード行の表示方法にも影響します。 新たな表示テーブルを用いてモード行の再表示を強制したいときには、 関数force-mode-line-update(see 節 22.3 モード行の書式)を 呼び出します。

37.14.1 表示テーブルの書式    What a display table consists of.
37.14.2 活性な表示テーブル    How Emacs selects a display table to use.
37.14.3 字形    How to define a glyph, and what glyphs mean.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.14.1 表示テーブルの書式

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Display%20Table%20Format"
"texi/elisp21/表示テーブルの書式"へのコメント(無し)

表示テーブルは、実際にはサブタイプがdisplay-tableである 文字テーブル(see 節 6.6 文字テーブル)です。

Function: make-display-table
表示テーブルを作成して返す。 テーブルのすべての要素の初期値はnilである。

表示テーブルの通常の要素は、文字コードで添字付けします。 添字cの要素は、文字コードcの表示方法を指定します。 値はnilであるか、字形の値のベクトル(see 節 37.14.3 字形)です。 要素がnilであると、その文字を通常の画面表示慣習 (see 節 37.13 通常の画面表示慣習)に従って表示する指定です。

表示テーブルを使って改行文字の表示を変更すると、 バッファ全体は長い1つの『行』として表示されます。

表示テーブルには6つの『追加スロット』もあり、 それらは特別な目的を果たします。 それらの意味をつぎに示します。 スロットの内容がnilであると、 そのスロットに対して以下に述べる デフォルトを使うことを意味します。

0
切り詰めたスクリーン行の末尾に使う字形 (デフォルトは`$')。 see 節 37.14.3 字形
1
継続している行の末尾に使う字形 (デフォルトは`\')。
2
文字を8進数文字コードで表示したことを表す字形 (デフォルトは`\')。
3
コントロール文字を表す字形 (デフォルトは`^')。
4
符可視な行があることを表す字形のベクトル (デフォルトは`...')。 see 節 37.5 選択表示
5
左右に隣り合ったウィンドウの境界に使う字形 (デフォルトは`|')。 see 節 27.2 ウィンドウの分割

たとえば、ctl-arrownil以外の値を設定した効果を 模倣する表示テーブルの作成方法をつぎに示します。

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

Function: display-table-slot display-table slot
この関数は表示テーブルdisplay-tableの 追加スロットslotの値を返す。 引数slotは0から5までの数であるか、 スロット名(シンボル)であること。 正しいシンボルは、truncationwrapescapecontrolselective-displayvertical-borderである。

Function: set-display-table-slot display-table slot value
この関数は表示テーブルdisplay-tableの 追加スロットslotに値valueを保存する。 引数slotは0から5までの数であるか、 スロット名(シンボル)であること。 正しいシンボルは、truncationwrapescapecontrolselective-displayvertical-borderである。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.14.2 活性な表示テーブル

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Active%20Display%20Table"
"texi/elisp21/活性な表示テーブル"へのコメント(無し)

各ウィンドウに表示テーブルを指定でき、 各バッファにも表示テーブルを指定できます。 バッファbがウィンドウwに表示されているとき、 ウィンドウwに表示テーブルがあればそれを使って表示します。 さもなければ、バッファbに表示テーブルがあればそれを使います。 それ以外では、標準の表示テーブルがあればそれを使います。 選択されている表示テーブルを活性な表示テーブルと呼びます。

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-tablenilである場合には、 そのウィンドウ内のすべての文字コードには通常の画面表示慣習を使います。 See 節 37.13 通常の画面表示慣習



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.14.3 字形

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Glyphs"
"texi/elisp21/字形"へのコメント(無し)

字形(glyph)は、文字を一般化したものです。 スクリーン上で1文字を占める像を表します。 文字と同様に、字形はLispでは整数で表現します。

字形としての各整数の意味は、字形テーブルで定義されます。 これは変数glyph-tableの値です。

Variable: glyph-table
この変数の値は、現在の字形テーブルである。 これはベクトルであること。 g番目の要素は、字形コードgを定義する。 値がベクトルではなくnilであると、 すべての字形は単純(下記参照)である。

字形テーブルの要素として可能な型はつぎのとおりです。

string
この字形を出力するために端末へstringの文字群を送出する。 これは文字端末では使えるがウィンドウシステムでは使えない。

integer
この字形コードを字形コードintegerの別称として定義する。 字形に対してフェイスコードを指定するために別称を使うことができる。 下記参照。

nil
この字形は単純である。 通常の端末では、字形コード mod 524288 は出力すべき文字である。 ウィンドウシステムでは、字形コード mod 524288 は出力すべき文字あり、 字形コードを524288で除した値は出力中に使用すべきフェイス番号 (see 節 37.10.4 フェイスを扱う関数)である。 (524288は 2**19。) see 節 37.10 フェイス

字形コードが字形テーブルの長さに等しいか大きいと、 そのコードは自動的に単純とします。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.15 ベルを鳴らす

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Beeping"
"texi/elisp21/ベルを鳴らす"へのコメント(無し)

本節では、ユーザーの注意を引くためにEmacsにベルを鳴らせる (あるいはスクリーンを点滅させる)方法について述べます。 ベルを鳴らす頻度はなるべく控えめにしてください。 頻繁にベルが鳴るとわずらわしいものです。 エラーを通知するほうがふさわしいときには、 単にベルを鳴らさないように注意してください。 (see 節 9.5.3 エラー。)

Function: ding &optional do-not-terminate
この関数は、ベルを鳴らすかスクリーンを点滅する (下記のvisible-bellを参照)。 また、do-not-terminatenilであると 現在実行中のキーボードマクロを終了する。

Function: beep &optional do-not-terminate
dingの同義語。

User Option: visible-bell
この変数は、ベルを鳴らすかわりにスクリーンを点滅させるかどうかを決定する。 nil以外であると点滅するを意味し、 nilであると点滅しないを意味する。 これは、ウィンドウシステムを用いている場合か、 端末のtermcapの定義にビジュアルベル機能(`vb')がある 文字端末で有効である。

Variable: ring-bell-function
これがnil以外であると、 Emacsに『ベルを鳴らす』方法を指定する。 この値は、引数なしの関数であること。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

37.16 ウィンドウシステム

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Window%20Systems"
"texi/elisp21/ウィンドウシステム"へのコメント(無し)

Emacsはいくつかのウィンドウシステムで、 特にXウィンドウシステムで動作します。 EmacsもXも用語『ウィンドウ』を使いますが、用法は異なります。 Emacsの1つのフレームは、Xでは1つのウィンドウです。 Emacsの個々のウィンドウについては、Xはまったくわかりません。

Variable: window-system
この変数は、Emacsが動作しているウィンドウシステムの種類を Lispプログラムに伝える。 可能な値はつぎのとおりである。

x
Xを用いて表示している。
pc
MSDOSを用いて表示している。
w32
Windows NTかWindows 95を用いて表示している。
nil
文字ベースの端末を用いて表示している。

Variable: window-setup-hook
この変数は、Emacsが初期化ファイルを処理したあとに実行する ノーマルフックである。 読者のファイル`.emacs'、(あれば)デフォルトの初期化ファイル、 端末固有のLispコードをすべてロードし、 フックterm-setup-hookを実行し終えてから、 このフック実行する。

このフックは内部目的用であり、 ウィンドウシステムとの通信を設定し、最初のウィンドウを作成する。 ユーザーが干渉すべきではない。


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端]