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

15. フレームとXウィンドウシステム

Xウィンドウシステムで使っているときには、 1つのEmacsセッションでXのレベルで複数のウィンドウを作ることができます。 Emacsに属するXの各ウィンドウは、 Emacsのウィンドウを1つ以上含めことができるフレーム(frame)を表示します。 フレームは、最初は汎用のEmacsのウィンドウを1つ含みますが、 上下左右に小さなウィンドウに分割できます。 フレームは通常、専用のエコー領域とミニバッファを含みますが、 それらを含まないものを作ることもできます。 その場合は、別のフレームのエコー領域やミニバッファを使います。

あるフレームでの編集は、別のフレームにも影響します。 たとえば、あるフレームでキルリングにテキストを入れると、 別のフレームでヤンクできます。 あるフレームでC-x C-cでEmacsを終ると、 すべてのフレームを終了します。 1つのフレームだけを削除するなら、C-x 5 0を使います。

混乱を避けるために、Emacsが実装している細分化できるものを 『ウィンドウ』と呼び、フレームを意味するときにはこの単語を使いません。

MS-DOS用にコンパイルしたEmacsは、 ウィンドウシステムのある種の特徴をエミュレートするので、 本章で説明する機能の多くを使うことができます。 詳しくは、See section MS-DOSのキーボードとマウス


15.1 編集用マウスコマンド

リージョンを選択したりコピーしたりするマウスコマンドは、 xtermプログラムとほぼ互換です。 Emacsと他のXクライアントプログラムとのあいだでコピーするには、 Xのマウスコマンドと同じものを使えます。

これらのマウスコマンドでリージョンを選択して、 そのあとすぐにファンクションキーDELETEを打つと、 選択したリージョンを削除します。 ファンクションキーBACKSPACEやASCII文字DELは、 これを行いません。 マウスコマンドとDELETEのあいだに別のキーを打ったときも、 これを行いません。

Mouse-1

クリックした位置にポイントを移動する(mouse-set-point)。 通常、左ボタン。

Drag-Mouse-1

ドラッグにより選択したテキストにリージョンを設定し、 キルリングにそれをコピーする(mouse-set-region)。 リージョンの始めと終りの両方をこのコマンド1つで指定できる。

ドラッグ中に、ウィンドウの上下からマウスが出ると、 マウスがウィンドウ内に戻ってくるまで、 ウィンドウを一定の割合でスクロールする。 こうして、画面全体に入りきらないリージョンでも選択できる。 一度にスクロールする行数は、 マウスがウィンドウの縁からどの程度離れているかに依存する。 変数mouse-scroll-min-linesには最小の行数を指定する。

Mouse-2

クリックした場所に、もっとも最近にキルしたテキストをヤンクする (mouse-yank-at-click)。 通常、中ボタン。

Mouse-3

このコマンドmouse-save-then-killは、 クリックした場所とリージョンの状態に依存して、 いくつかの機能がある。

もっとも基本的な場合は、ある場所でMouse-1をクリックしてから、 別の場所でMouse-3をクリックしたとき。 こうすると、これらの2点のあいだにあるテキストをリージョンとして選択する。 さらに、新しいリージョンをキルリングへもコピーするので、 別の場所へそれをコピーできる。

テキスト上でMouse-1をクリックしてから、 スクロールバーでスクロールしたあとでMouse-3をクリックすると、 スクロールする以前の(Mouse-1でクリックした)場所を覚えていて、 そこをリージョンの片方の端点として使う。 こうすると、画面に入りきらないリージョンでも選択できる。

より一般的には、強調表示されたリージョンがないならば、 Mouse-3は、ポイントとクリックした位置のあいだのテキストを リージョンとして選択する。 これは、ポイントがあった位置にマークを設定し、 クリックした位置にポイントを移動することで行う。

強調表示されたリージョンがある場合、あるいは、 ボタン1をドラッグしてリージョンを設定してある場合、 Mouse-3はクリックした場所に近い側のリージョンの端を クリック位置に移動して調整する。 また、調整したリージョンのテキストは、 キルリング内の古いリージョンのテキストを置き換える。

もともとMouse-1をダブルクリックあるいはトリプルクリックして、 リージョンを単語や行単位で設定した場合には、 Mouse-3によるリージョンの調整も単語や行単位で行われる。

連続して2度同じ場所でMouse-3を使うと、 すでに選択してあるリージョンをキルする。

Double-Mouse-1

このキーは、クリックした単語全体にリージョンを設定する。 『シンボル』の構文(Cの下線のような)の文字をクリックすると、 その文字を囲むシンボル全体にリージョンを設定する。

開き括弧や閉じ括弧の構文の文字をクリックすると、 その文字で始まり/終る括弧で囲まれた塊(sexp)にリージョンを設定する。 文字列区切りの構文(Cのシングルクォートやダブルクォート)の文字をクリック すると、(その文字が文字列の始まりか終りかを発見的方法を使って決めて) 文字列定数を囲むリージョンを設定する。

Double-Drag-Mouse-1

このキーは、 ドラッグした範囲内にある単語を囲むリージョンを設定する。

Triple-Mouse-1

このキーは、クリックした行全体を囲むリージョンを設定する。

Triple-Drag-Mouse-1

このキーは、ドラッグした範囲内にある行すべてを囲むリージョンを設定する。

マウスを使ったもっとも単純なテキストのキル方法は、 片方の端でMouse-1を押し、もう一方の端でMouse-3を2回押すことです。 See section 削除とキル。 バッファから削除しないでキルリングにテキストをコピーするには、 Mouse-3を一度だけ押します。 あるいは、Mouse-1でテキストを横断してドラッグするだけです。 そうすると、どこででも、それをヤンクすることでコピーできます。

キルしたりコピーしたりしたテキストをどこか別の場所にヤンクするには、 マウスをその場所に移動してMouse-2を押します。 See section ヤンク。 しかし、mouse-yank-at-pointnil以外ならば、 Mouse-2はポイント位置にヤンクします。 つまり、ウィンドウのどこをクリックしたのか、あるいは、 フレームのどのウィンドウをクリックしたのかは問題ではありません。 デフォルトの値はnilです。 この変数は二次セレクションのヤンクにも影響します。

別のXのウィンドウへテキストをコピーするには、 その部分をキルするかキルリングに保存します。 Xの管理下では、一次セレクションも設定します。 そのあとで、別のXのウィンドウで動いているプログラムの『ペースト』や 『ヤンク』コマンドを使って、セレクションからテキストを挿入します。

別のXのウィンドウからテキストをコピーするには、 そのウィンドウで動いているプログラムの『カット』や『コピー』コマンドを 使って目的のテキストをセレクションにします。 そのあとで、C-yMouse-2を使ってEmacsにヤンクします。

これらのカット/ペーストコマンドはMS-Windows上でも動作します。

Emacsがテキストをキルリングに入れたり、 キルリングのテキストを先頭へ巡回するとき、 EmacsはXサーバーの一次セレクションに設定します。 このために、別のXクライアントがテキストを参照できるのです。 テキストが十分に短い場合にのみ (x-cut-buffer-maxは最大文字数を指定する)、 Emacsはカットバッファにもテキストを収めます。 長い文字列をカットバッファへ置くには時間がかかります。

キルリングの始めのテキストをヤンクするコマンドは、 実際には、別のプログラムの一次セレクションをまず調べ、 そのあとで、カットバッファのテキストを調べます。 どちらにもヤンクするテキストがなれば、キルリングの内容を使います。


15.2 二次セレクション

二次セレクションは、Xにおいてテキストを選択する別の方法です。 これは、ポイントやマークを使わないので、 ポイントやマークを設定せずにテキストを削除するのに使えます。

M-Drag-Mouse-1

ボタンを押した場所を片方の端、ボタンを離した場所をもう一方の端として、 二次セレクションを設定する(mouse-set-secondary)。 強調表示されドラッグするにつれて変化する。

ドラッグ中にウィンドウの上下からマウスが出ると、 ウィンドウへマウスが戻ってくるまで、 ウィンドウを一定の割合でスクロールする。 こうして、画面全体に入りきらないリージョンも選択できる。

M-Mouse-1

二次セレクションの一方の端を設定する (mouse-start-secondary)。

M-Mouse-3

M-Mouse-1で指定した場所を一方の端として使い、 二次セレクションを設定する。 (mouse-secondary-save-then-kill)。 同じ位置での2回目のクリックは、 ちょうど作成した二次セレクションをキルする。

M-Mouse-2

クリックした位置に二次セレクションを挿入する (mouse-yank-secondary)。 ヤンクしたテキストの最後にポイントを置く。

M-Mouse-1のダブルクリックやトリプルクリックは、 Mouse-1のように単語や行単位に作用します。

mouse-yank-at-pointnil以外ならば、 M-Mouse-2はポイント位置にヤンクします。 そのときには、どこをクリックしたかは関係なく、 どのウィンドウをクリックしたかだけが関係します。 See section 編集用マウスコマンド


15.3 マウスで参照を辿る

いくつかのEmacsバッファでは、いろいろなものの一覧を表示します。 ファイル一覧、バッファ一覧、補完候補一覧、パターンに一致したものの一覧 などです。

これらのバッファにテキストをヤンクできても便利ということはないので、 これらの多くはMouse-2を特別に定義して、 クリックした項目を使ったり眺めたりするコマンドとしています。

たとえば、diredバッファのファイル名をMouse-2でクリックすると、 そのファイルを訪問します。 `*Compilation*'バッファのエラーメッセージをMouse-2で クリックすると、そのエラーメッセージに対応するソースコードへ行きます。 `*Completions*'バッファの補完候補をMouse-2でクリックすると、 その補完候補を選択します。

反応するテキストの上にマウスが移動するとテキストが強調表示されるので、 Mouse-2がいつ特別な意味を持つか普通はわかります。


15.4 メニューを出すマウスクリック

CTRLSHIFTキーで修飾されたマウスクリックは、 メニューを立ち上げます。

C-Mouse-1

バッファを選択するためのメニュー。

C-Mouse-2

整形済みのテキストに使うフェイスやテキスト属性を指定するためのメニュー。 see section 整形済みテキストの編集

C-Mouse-3

モードに特有のメニュー。 ほとんどのモードでは、このメニューは、 すべてのモード特有のメニューバーメニューを一緒にしたのと同じ項目を持つ。 いくつかのモードでは、このボタン (17) に異なるメニューを指定しているかもしれない。

S-mouse-1

フレームの主要フォントの指定に関するメニュー。


15.5 モード行のマウスコマンド

ウィンドウを選択したり操作するために、 ウィンドウのモード行でマウスクリックを使えます。

Mouse-1

モード行でMouse-1をクリックするとその上のウィンドウを選択する。 モード行をMouse-1でドラッグするとモード行を移動することができ、 そのウィンドウの高さを変更できる。

Mouse-2

モード行でMouse-2をクリックすると、 そのフレーム一杯にウィンドウを広げる。

Mouse-3

モード行でMouse-3をクリックすると、 その上のウィンドウを削除する。

C-Mouse-2

モード行でC-Mouse-2をクリックすると、 モード行をクリックした場所でその上のウィンドウを左右に分割する。

スクロールバーでC-Mouse-2をクリックすると、 対応するウィンドウを上下に分割します。 See section ウィンドウの分割


15.6 フレームの作成

プレフィックスキーC-x 5は、 C-x 4と同じようなサブコマンドがあるという点で似ています。 違いは、C-x 5コマンドは、 選択されているフレームで新たにウィンドウを作るのではなく、 新しいフレームを作ることです(see section 別のウィンドウに表示する)。 既存の見えているフレームやアイコン化されたフレームが、 要求された内容を表示しているなら、これらのコマンドは、 必要ならフレームをいちばん手前にもってきたりアイコンを開いてから、 既存のフレームを使います。

さまざまなC-x 5コマンドは、 選択するバッファの探し方や作成方法が異なります。

C-x 5 2

新しいフレームを作る(make-frame-command)。

C-x 5 b bufname RET

別のフレームでバッファbufnameを選択する。 これは、switch-to-buffer-other-frameを実行する。

C-x 5 f filename RET

ファイルfilenameを訪問して、別のフレームでそのバッファを選択する。 これは、find-file-other-frameを実行する。 see section ファイルを訪問する

C-x 5 d directory RET

別のフレームでディレクトリdirectoryに対するdiredバッファを選択する。 これは、dired-other-frameを実行する。 see section ディレクトリエディタdired

C-x 5 m

別のフレームでメイルメッセージの作成を始める。 これは、mail-other-frameを実行する。 これは、C-x mの他のフレームを使う変形版。 see section メイルの送信

C-x 5 .

別のフレームで現在のタグテーブルからタグを探す。 これは、find-tag-other-frameを実行し、 M-.の複数フレーム向けの変形版。 see section タグテーブル

C-x 5 r filename RET

ファイルfilenameを読み出し専用で訪問し、 別のフレームでそのバッファを選択する。 これは、find-file-read-only-other-frameを実行する。 see section ファイルを訪問する

default-frame-alistにフレームパラメータを設定することで、 新たに作成するフレームの見た目を制御できます。 初期フレームだけに影響するパラメータを指定するには、 変数initial-frame-alistを使います。 詳しくは、 See (elisp)Initial Parameters section `初期フレームのパラメータ' in Emacs Lisp リファレンスマニュアル

すべてのEmacsフレームに主要フォントを指定するもっとも簡単な方法は、 Xのリソース(see section フォント指定オプション)を使うことですが、 つぎに示すように、fontパラメータを指定するように default-frame-alistを変更してもできます。

 
(add-to-list 'default-frame-alist '(font . "10x20"))

15.7 スピードバーフレームの作成と使い方

Emacsのフレームは、スピードバーを持つことができます。 スピードバーは、縦長のウィンドウで、 訪問したりタグを探したりするためのスクロール可能な ファイルメニューとして働きます。 スピードバーを作るには、M-x speedbarと打ちます。 これは、選択されたフレームに対するスピードバーウィンドウを作ります。 そうすると、スピードバーのファイル名をクリックすると、 対応するEmacsフレームでそのファイルを訪問できます。 あるいは、タグの名前をクリックすると、 Emacsフレームでそのタグの箇所へ飛んで行きます。

最初、スピードバーには、カレントディレクトリの直下の内容を 1行につき1つのファイルで表示します。 各行には、`[+]'か`<+>'の箱があって、 それをMouse-2でクリックするとその項目の内容を『開け』ます。 その行の名前がディレクトリならば、それを開くと、 そのディレクトリの内容をその行の下に追加してスピードバーに表示します。 その行が普通のファイルならば、それを開くと、 そのファイル内のタグ一覧をスピードバーに追加して表示します。 ファイルが開かれていると、`[+]'は`[-]'に変わります。 ファイルを『閉じる』(内容を隠す)ためにその箱をクリックできます。

rmailモード、infoモード、GUDモードを含むいくつかのメジャーモードには、 選択可能な有用な項目をスピードバーに追加する特別な方法があります。 たとえば、rmailモードでは、スピードバーにはrmailファイル一覧を表示します。 カレントメッセージを別のrmailファイルに移すには、 目的のrmailファイルの`<M>'の箱をクリックするだけです。

スピードバーは1つのEmacsフレームに属し、つねにそのフレームに作用します。 複数のフレームを使うときには、 一部のフレームやすべてのフレームにスピードバーを作れます。 フレームのスピードバーを作るには、そのフレームでM-x speedbarと打ちます。


15.8 複数ディスプレイ

1つのEmacsは、複数のXディスプレイと通信できます。 最初は、Emacsは1つのディスプレイだけを使います。 環境変数DISPLAYや`--display'オプションに指定されたものです (see section 初期化オプション)。 他のディスプレイに接続するには、 コマンドmake-frame-on-displayを使います。

M-x make-frame-on-display RET display RET

ディスプレイdisplay上に新しいフレームを作成する。

1つのXサーバーは複数のスクリーンを扱えます。 1つのサーバーに属する2つのスクリーンにフレームを開くとき、 Emacsは1つのキーボードを共有していることを知っていて、 これらのスクリーンから到着するすべてのコマンドを1つの 入力ストリームとして扱います。

異なるXサーバー上にフレームを開くとき、 Emacsはそれぞれのサーバーに対して別々の入力ストリームを作ります。 こうすることで、2つのディスプレイ上で2人のユーザーが同時に打鍵でき、 Emacsはそれらの入力をごっちゃにすることはありません。 各サーバーにはそれ自身が選択しているフレームがあります。 特定のXサーバーで入力したコマンドは、 そのサーバーが選択しているフレームに適用されます。

これらの機能にも関わらず、異なるディスプレイで同じEmacsジョブを 使っている人達は、注意を怠ると、互いに干渉し合ってしまいます。 たとえば、誰かがC-x C-cと打つと、 その人達が共有している(1つの)Emacsジョブは終了してしまいます!


15.9 特別なバッファフレーム

ウィンドウが1つのときにはEmacsが普通2つめのウィンドウを作るような 特定のバッファでは、それ専用の特別なフレームに表示することができます。 こうするには、変数special-display-buffer-namesに バッファ名のリストを設定します。 そのリストに名前があるどのバッファも、 Emacsコマンドが『別のウィンドウに』表示したいときには、 特別なフレームを自動的に取得します。

たとえば、つぎのように変数を設定したとすると、 補完一覧、grepの出力、TeXモードのシェルバッファは、 それぞれ個別のフレームを取得します。

 
(setq special-display-buffer-names
      '("*Completions*" "*grep*" "*tex-shell*"))

これらのフレームとその中のウィンドウは、 別のバッファのために自動的に分割されたり再利用されることはありません。 手動で変更するまで、そのために作成されたバッファを表示し続けます。 特別なバッファを消去すると、そのフレームも自動的に削除されます。

より一般的には、正規表現のリストをspecial-display-regexpsに 設定できます。 すると、バッファの名前がそれらの正規表現に一致すると、 バッファは専用のフレームを取得します。 (繰り返すが、これは通常、別のウィンドウに表示するバッファにのみ適用する。)

変数special-display-frame-alistは、 このようなフレームに対するフレームパラメータを指定します。 これにはデフォルト値があるので、特に設定する必要はありません。

Lispがわかる人のためにですが、 special-display-buffer-namesspecial-display-regexpsの要素は、 リストでもかまいません。 その場合、最初の要素はバッファ名か正規表現です。 リストの残りは、フレームの作成方法を指定します。 これは、フレームパラメータの値を指定する連想リストにすることもできます。 これらの値は、special-display-frame-alistに 指定されたパラメータの値より優先されます。 あるいは、リストはつぎのような形式にすることもできます。

 
(function args...)

ここで、functionはシンボルです。 こうすると、functionを呼んでフレームを作ります。 関数呼び出しの最初の引数はバッファで、残りの引数はargsです。

似たような機能で、バッファをどの選択されているウィンドウに表示するか 指定できます。 See section 同じウィンドウへの強制表示。 同じウィンドウに表示する機能は、特別なフレームに表示する機能に優ります。 したがって、バッファ名をspecial-display-buffer-namesに追加しても 何の効果もなかったら、 その機能が同じバッファ名に対しても使われていないか調べてください。


15.10 フレームパラメータの設定

本節では、選択しているフレームの表示スタイルやウィンドウ管理のふるまいを 変更するコマンドを説明します。

M-x set-foreground-color RET color RET

選択しているフレームの前景色をcolorと指定する。

M-x set-background-color RET color RET

選択しているフレームの背景色をcolorと指定する。 これはmodelineフェイスの前景色も変更するので、 デフォルトと比較しても反転表示のままになる。

M-x set-cursor-color RET color RET

選択しているフレームのカーソルの表示色をcolorと指定する。

M-x set-mouse-color RET color RET

マウスカーソルが選択しているフレーム内にあるときの マウスカーソルの表示色をcolorと指定する。

M-x set-border-color RET color RET

選択しているフレームの境界色をcolorと指定する。

M-x list-colors-display

定義されている表示色の名称とそれがどう見えるか表示する。 このコマンドは少し遅い。

M-x auto-raise-mode

選択されているフレームをオートレイズするべきかどうか切り替える。 オートレイズとは、マウスカーソルがフレームに入るたびに、 そのフレームを手前にもってくること。

このオートレイズ機能はEmacs自身が実装していることに注意。 ウィンドウマネージャの中にも、オートレイズを実装しているものがある。 XのウィンドウマネージャでEmacsフレームのオートレイズを指定しているときには、 それが動作するはず。 しかし、それはEmacsの制御を超えているので、それに関しては auto-raise-modeは何の影響もない。

M-x auto-lower-mode

選択されているフレームをオートローワするべきかどうか切り替える。 オートローワとは、マウスカーソルがフレームから出るたびに、 そのフレームをXのウィンドウスタックの底に移すこと。

コマンドauto-lower-modeは、 Xのウィンドウマネージャが実装するオートローワには何の影響もない。 それを制御するには、適切なウィンドウマネージャの機能を使う必要がある。

M-x set-frame-font RET font RET

選択されたフレームに対する主要フォントとしてfontを指定する。 フェイス(see section 複数タイプフェイスの利用)が別のフォントを使うことを指定しているときを 除いて、主要フォントは、フレームに表示するすべてのテキストに対して使われる。 あなたのシステムで使えるフォント一覧を表示する方法については、 see section フォント指定オプション

ポップアップメニューから、フレームの主要フォントを設定することもできる。 このメニューを立ち上げるにはS-Mouse-1を押す。

Xツールキットを使うEmacsの版では、表示色とフォントを設定する関数は メニューやメニューバーには影響しません。 というのは、メニューやメニューバーは、 それら自身のウィジェットクラスを使って表示されているからです。 メニューとメニューバーの見た目を変更するには、 Xのリソースを使う必要があります(see section Xリソース)。 表示色に関しては、See section ウィンドウ表示色オプション。 フォントの選択については、See section フォント指定オプション

フレームパラメータとそのカスタマイズについては、 See (elisp)Frame Parameters section `フレームパラメータ' in Emacs Lisp リファレンスマニュアル


15.11 スクロールバー

Xを使っているときには、Emacsは通常、各Emacsウィンドウの左側に スクロールバー(scroll bar)を作ります。 スクロールバーは、ウィンドウの高さに延びていて、 内側に動く矩形の箱を表示します。 この箱は、現在表示されているバッファ内の部分を表しています。 スクロールバーの全体の高さは、バッファの全体の長さを表します。

Mouse-2(通常、中ボタン)を使って、 スクロールバーの内側の箱を上下に移動したりドラッグできます。 内側の箱をスクロールバーのいちばん上へ移動すると、 バッファの先頭を見ることができます。 スクロールバーのいちばん下に内側の箱を移動すると、バッファの末尾が見えます。

スクロールバーで左や右ボタンを使うと、制御された増分でスクロールできます。 Mouse-1(通常、左ボタン)は、 クリックした場所の高さの行をウィンドウの最上端の行へ移動します。 Mouse-3(通常、右ボタン)は、 ウィンドウの最上端の行をクリックした場所の高さの行へ移動します。 同じ位置で繰り返しクリックすると、 同じ分量のスクロールを繰り返します。

スクロール以外では、スクロールバーでC-Mouse-2をクリックすると、 ウィンドウを上下に分割できます。 クリックした場所の行で分割されます。

コマンドM-x scroll-bar-modeで、 スクロールバー(scroll-bar)モードをオン/オフできます。 引数を指定しなければ、スクロールバーの使用をトグルします。 引数を指定した場合、引数が正のときだけスクロールバーを使うようにします。 このコマンドは、これから作成されるフレームを含めてすべての フレームに作用します。 Xのリソース`verticalScrollBars'を使って、 スクロールバー(scroll-bar)モードの初期設定を制御できます。 See section Xリソース

選択されているフレームに対してのみスクロールバーをオン/オフするには、 M-x toggle-scroll-barコマンドを使います。


15.12 メニューバー

M-x menu-bar-modeでメニューバーの表示をオン/オフできます。 引数を指定しないと、このコマンドはマイナモードである メニューバー(menu-bar)モードをトグルします。 引数を指定した場合、引数が正ならメニューバー(menu-bar)モードをオンにし、 引数が正でないならオフにします。 Xのリソース`menuBarLines'を使って、 メニューバー(menu-bar)モードの初期設定を制御できます。 See section Xリソース。 熟練したユーザーは、メニューバーをしばしばオフにし、 特に文字端末上ではそうします。 というのは、テキスト表示に1行余分に使えるからです。

メニューバーでコマンドを起動する方法については、See section メニューバー


15.13 複数タイプフェイスの利用

XでEmacsを使っているとき、文字表示に複数のスタイルを設定できます。 制御できるスタイルは、フォントの種類、前景色、背景色、下線を引くかどうかです。 MS-DOS用Emacsは、各フェイスの前景色と背景色を制御して、 フェイスの一部だけを扱えます(see section EmacsとMS-DOS)。

表示スタイルを制御する方法は、名前付きフェイスを定義することです。 各フェイスでは、フォントの種類、前景色、背景色、下線フラグを指定できます。 しかし、これらすべてを指定する必要はありません。 バッファ内のテキストの一部分に対して使用するフェイスを指定することで、 そのテキストの見た目を制御できます。

テキスト中のある文字に対して使う表示スタイルは、 いくつかのフェイスを組み合わせて決定されます。 重ね合わせやテキスト属性で指定されていない表示スタイルは、 フレームそのものから得ます。

整形済みテキストを編集するモードであるエンリッチ(enriched)モードには、 フェイスを指定するためのコマンドやメニューがあります。 バッファ内のテキストに対するフォントの指定方法については、See section 整形済みテキストのフェイス。 前景色と背景色の指定方法については、See section 整形済みテキストの表示色

フェイスの見た目を変更するには、カスタマイズバッファを使います See section フェイスのカスタマイズ。 Xのリソースを使って、特定のフェイスの属性を指定できます (see section Xリソース)。

現在定義されているフェイスとその見た目を調べるには、 M-x list-faces-displayと打ちます。 あるフェイスを違うフレームでは違って見えるようにできます。 このコマンドは、コマンドを打ったフレーム上での見た目を表示します。 つぎは、標準的に定義されているフェイス一覧です。

default

このフェイスは、他のフェイスを指定していない普通のテキストに使われる。

modeline

このフェイスはモード行に対して使われる。 デフォルトでは、defaultフェイスの反転表示を設定。 see section 表示を制御する変数

highlight

このフェイスは、さまざまモードでのテキストの強調表示部分に対して使われる。

region

このフェイスは、選択されているリージョン (暫定マーク(transient-mark)モードがオンのとき。下記参照) の表示に使われる。

secondary-selection

このフェイスは、二次セレクションの表示に使われる (see section 二次セレクション)。

bold

このフェイスは、ボールド体(太字体)があるならば、 ボールド体を用いたデフォルトフォントの変種。

italic

このフェイスは、イタリック体(斜体)があるならば、 イタリック体を用いたデフォルトフォントの変種。

bold-italic

このフェイスは、ボールドイタリック体(太字斜体)があるならば、 ボールドイタリック体を用いたデフォルトフォントの変種。

underline

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

暫定マーク(transient-mark)モードがオンのときは、 マークが活性ならば、リージョンのテキストは強調表示されます。 これにはregionという名前のフェイスを使います。 このフェイスのスタイルを変更することで、 強調表示のスタイルを制御できます(see section フェイスのカスタマイズ)。 暫定マーク(transient-mark)とマークの活性/不活性について詳しくは、 See section 暫定マークモード(transient-markモード)

フェイスを使う簡単な方法の1つは、 フォントロック(font-lock)モードを使うことです。 特定のバッファにつねにローカルであるこのマイナモードは、 編集するテキストの構文に従ってフェイスを選択します。 このモードは、ほとんどの言語のコメントと文字列を認識できます。 いくつかの言語では、それ以外のさまざまな重要な構造も認識して、 適切に強調表示します。 フォントロック(font-lock)モードと構文の強調表示について詳しくは、 See section フォントロックモード

画面上で強調表示されたバッファは、 コマンドps-print-buffer-with-facesを使って印刷できます。 See section Postscriptの印刷


15.14 フォントロックモード

フォントロック(font-lock)モードはマイナモードです。 特定のバッファにつねにローカルであり、 編集しているテキストの構文に従ってさまざまなフェイスを 使って強調表示(または『フォント表示化』)します。 このモードは、ほとんどの言語のコメントや文字列を認識できます。 いくつかの言語では、他のさまざまな重要な構成要素も認識し、 正しく強調表示します。 たとえば、定義されている関数名や予約語です。

コマンドM-x font-lock-modeは、 引数に従ってフォントロック(font-lock)モードをオン/オフし、 引数がなければモードをトグルします。 関数turn-on-font-lockは、 フォントロック(font-lock)モードを無条件でオンにします。 このコマンドは、モードフック関数で使うと便利です。 たとえば、Cのファイルを編集しているときにはいつでも フォントロック(font-lock)モードをオンにするには、 つぎのようにします。

 
(add-hook 'c-mode-hook 'turn-on-font-lock)

フォントロック(font-lock)モードを扱える すべての(メジャー)モードで自動的にフォントロック(font-lock)モードを オンにするには、 関数global-font-lock-modeをつぎのように使います。

 
(global-font-lock-mode 1)

フォントロック(font-lock)モードでは、 テキストを編集していると、自動的に変更した行の強調表示を更新します。 ほとんどの変更は、後続行の強調表示には影響しませんが、 時折、影響することもあります。 ある範囲の行を強調表示し直すには、コマンドM-g M-gを使います (font-lock-fontify-block)。

ある種のメジャーモードでは、M-g M-gは、 現在の関数定義全体をフォント表示化し直します。 (変数font-lock-mark-block-functionは、 現在の関数定義の探し方を制御する。) 別のメジャーモードでは、 M-g M-gは、 ポイントのまえとあとの16行をフォント表示化し直します。

数引数nを指定すると、M-g M-gは、 モードに関係なく、 ポイントのまえとあとのn行をフォント表示化し直します。

フォントロック(font-lock)モードの利点を十分に活用するには、 ボールド体、イタリック体、ボールドイタリック体のデフォルトフォントを 選ぶ必要があります。 あるいは、カラーやグレースケールの画面が必要です。

変数font-lock-maximum-decorationは、 複数のレベルを提供するモードでのフォント表示化の好ましいレベルを指定します。 レベル1は最低限のフォント表示化です。 いくつかのモードでは、もっとも高い3のレベルまであります。 通常デフォルトは『可能な限り大きい数』です。 すべてのモードに適用する整数を指定できます。 あるいは、特定のメジャーモードに対して異なる数を指定できます。 たとえば、C/C++モードではレベル1を、 それ以外ではデフォルトのレベルを指定するには、つぎのようにします。

 
(setq font-lock-maximum-decoration
      '((c-mode . 1) (c++-mode . 1)))

フォント表示化は、大きなバッファに対してはとても遅くなりえますから、 抑制することもできます。 変数font-lock-maximum-sizeにバッファサイズを指定すると、 その値を越えるバッファについてはフォント表示化を抑制します。

コメントと文字列のフォント表示化(あるいは、『構文の』フォント表示化)は、 バッファのテキストの構文解析に頼っています。 速度向上のために、CモードやLispモードを含むいくつかのモードでは、 特別な習慣に頼っています。 最左桁にある開き括弧は、つねに関数定義の開始を表し、 そのため、つねに文字列やコメントの外側だということです。 (see section 関数定義(defun)。) この習慣に従わないと、フォントロック(font-lock)モードは、 文字列やコメントの内側にある最左桁の開き括弧のうしろでは、 違ったフォント表示化をすることもありえます。

変数font-lock-beginning-of-syntax-function (つねにバッファにローカル)は、フォントロック(font-lock)モードが、 コメントや文字列の外側であることが保証される位置を どのように探すかを指定します。 最左桁の括弧の習慣を使うモードでは、 変数のデフォルト値は、beginning-of-defunです。 つまり、フォントロック(font-lock)モードは 習慣を使うようにということです。 この変数にnilを設定すると、 フォントロック(font-lock)モードは、もはや習慣に頼りません。 これでまちがった結果を避けられますが、その代償は、 変更したテキストをフォント表示化するには、 バッファのテキストをバッファの先頭から再走査する必要がある場合もあります。

多くのモードに対するフォントロックの強調表示パターンはすでにありますが、 フォント表示化するパターンを追加したいこともあるでしょう。 関数font-lock-add-keywordsを使って、 特定のモードに対する個人用の強調表示パターンを追加できます。 たとえば、Cのコメントで単語`FIXME:'を強調表示するには、 つぎのように使います。

 
(font-lock-add-keywords
 'c-mode
 '(("\\<\\(FIXME\\):" 1 font-lock-warning-face t)))

15.15 フォントロックのモード

フォントロックには、大きなバッファに対して フォントロック(font-lock)モードを高速に動作させるモードがあります。 高速ロック(fast-lock)モードと遅延ロック(lazy-lock)モードです。 これらは、フォントロック(font-lock)モードの速度を向上するために 2つの異なる方法を使います。


15.15.1 高速ロックモード

大きなファイルを訪問したバッファに対して フォントロック(font-lock)モードを速くするには、 高速ロック(fast-lock)モードを使えます。 高速ロック(fast-lock)モードは、 各ファイルに対するフォント情報を 別のキャッシュファイル(cache file)に保存します。 ファイルを訪問するたびに、最初からテキストをフォント表示化し直すかわりに、 キャッシュファイルからフォント情報を読み直します。

コマンドM-x fast-lock-modeは、 引数に従って高速ロック(fast-lock)モードをオン/オフします (引数がないければトグル)。 フォントロック(font-lock)モードを使うときに、 いつでも高速ロック(fast-lock)モードをオンにするには、 つぎのようにします。

 
(setq font-lock-support-mode 'fast-lock-mode)

小さなバッファに対しては、キャッシュファイルを書く価値がありません。 それゆえ、変数fast-lock-minimum-sizeは、 フォント情報をキャッシュする最小のファイルサイズを指定します。

変数fast-lock-cache-directoriesは、 キャッシュファイルをどこに置くかを指定します。 その値は、ディレクトリ群のリストです。 "."は、編集しているファイルと同じディレクトリを表します。 デフォルト値は、("." "~/.emacs-flc")で、 可能ならば同じディレクトリを使い、 さもなければディレクトリ`~/.emacs-flc'を使うという意味です。

変数fast-lock-save-othersは、 あなたが所持していないファイルに対するキャッシュファイルを 高速ロック(fast-lock)モードが保存すべきかどうかを指定します。 値がnil以外ならば保存します(これがデフォルト)。


15.15.2 遅延ロックモード

大きなバッファに対してフォントロック(font-lock)モードを速くするには、 フォント表示化するテキストの量を減らす 遅延ロック(lazy-lock)モードを使えます。 遅延ロック(lazy-lock)モードでは、バッファのフォント表示化は要求駆動型です。 表示されようとしているバッファの部分だけをフォント表示化します。 また、変更部分のフォント表示化は延期され、 Emacsがある短い時間アイドルであったときにのみフォント表示化します。

コマンドM-x lazy-lock-modeは、 遅延ロック(lazy-lock)モードを引数に従ってオン/オフします (引数がなければトグル)。 フォントロック(font-lock)モードを使うときに、 いつでも遅延ロック(lazy-lock)モードをオンにするには、 つぎのようにします。

 
(setq font-lock-support-mode 'lazy-lock-mode)

小さなバッファに対してバッファのフォント表示化を避ける価値はありません。 ですから、変数lazy-lock-minimum-sizeは、 要求駆動型でバッファのフォント表示化を行う最小のバッファサイズを指定します。 これより小さなバッファは、普通のフォントロック(font-lock)モードのように 一度にフォント表示化します。

バッファを変更したとき、遅延ロック(lazy-lock)モードは 変更したテキストのフォント表示化を延期します。 変数lazy-lock-defer-timeは、 変更部分のフォント表示化を始めるまでに Emacsがアイドルであるべき秒数です。 この値が0ならは、普通のフォントロック(font-lock)モードと同じように、 変更はすぐにフォント表示化されます。

遅延ロック(lazy-lock)モードは、通常、 新たに見えてくるバッファ部分が初めて表示されるまえに その部分をフォント表示化します。 しかし、lazy-lock-defer-on-scrollingの値がnil以外ならば、 新たに見えてくるテキストは、Emacsがlazy-lock-defer-time秒だけ アイドルしたときにのみフォント表示化されます。

CやEmacs Lispモードを含むいくつかのモードでは、 ある1行の内容を変更すると後続行の文脈が変わり、 そのため、後続行をどうフォント表示化するかも変わります。 通常は、後続行を再フォント表示化するためにM-g M-gを打つ必要があります。 しかし、変数lazy-lock-defer-contextuallynil以外を設定していると、遅延ロック(lazy-lock)モードでは、 lazy-lock-defer-time秒後にこれを自動的に行います。

Emacsが長時間アイドルだと、遅延ロックは、 バッファのまだ表示されていない部分を、 のちの表示に備えてフォント表示化します。 これを内密のフォント表示化(stealth fontification)と呼びます。

変数lazy-lock-stealth-timeは、内密のフォント表示化を開始するまでに、 Emacsが何秒間アイドルであるべきかを指定します。 値がnilだと、内密のフォント表示化をしません。 変数lazy-lock-stealth-lineslazy-lock-stealth-verboseは、 内密のフォント表示化の粒度と冗長性を指定します。


15.15.3 高速ロックか遅延ロックか?

フォントロックで使えるモードの1つを選択する目安となる簡単な指針をあげます。

変数font-lock-support-modeは、 これらのどちらのモードを使うかを指定します。 たとえば、C/C++モードでは高速ロック(fast-lock)モードを使い、 それ以外のモードでは遅延ロック(lazy-lock)モードを使うように指定するには、 変数をつぎのように設定します。

 
(setq font-lock-support-mode
      '((c-mode . fast-lock-mode) (c++-mode . fast-lock-mode)
        (t . lazy-lock-mode)))

15.16 変更部分強調表示モード

バッファ内の最近に変更された部分を示すためにフェイス(典型的には表示色)を 用いるマイナモードをオンにするには、 M-x highlight-changes-modeを使います。


15.17 その他のXウィンドウシステムでの機能

つぎのコマンドは、フレームを作成したり削除したり操作したりします。

C-z

選択されているEmacsフレームをアイコン化する (iconify-or-deiconify-frame)。 Emacsを休止するというC-zの通常の意味は、 ウィンドウシステムでは有用ではない。 そのため、別のバインドになっている。

Emacsフレームのアイコンでこのコマンドを打つと、 アイコンをフレームに開く。

C-x 5 0

選択されているフレームを削除する(delete-frame)。 フレームがたった1つの場合には、このコマンドは許されない。

C-x 5 o

別のフレームを選択し、それをいちばん手前にもってきて、 そのフレームが選択されるようにマウスを飛び込ませる。 このコマンドを繰り返すと、端末上のすべてのフレームを巡回する。


15.18 非ウィンドウ端末

Emacsが扱えるウィンドウシステムを使えない端末では、 一度に1つのフレームしか表示できません。 しかし、複数のEmacsフレームを作って、それらのフレーム間を切り替えられます。 このような端末でのフレームの切り替えは、 異なるウィンドウ構成の端末での切り替えとたいへんよく似ています。

新しいフレームを作りそれに切り替えるには、C-x 5 2を使います。 既存のフレーム間を巡回するには、C-x 5 oを使います。 カレントフレームを削除するには、C-x 5 0を使います。

各フレームにはそれを区別する番号があります。 一度には1つのフレームだけしか表示できない端末では、 選択されているフレームの番号nが、 モード行の先頭近くに`Fn'という形式で現れます。

`Fn'は、実際にはフレームの名前です。 望むなら別の名前を指定でき、その名前でフレームを選択できます。 選択されたフレームに新しい名前を指定するには、 コマンドM-x set-frame-name RET name RETを使います。 その名前でフレームを選択するには、 M-x select-frame-by-name RET name RETを使います。 指定した名前は、フレームを選択するとモード行に表示されます。


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

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.