[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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 節 AJ.1 MS-DOSのキーボードとマウス (2005/05/08)。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
リージョンを選択したりコピーしたりするマウスコマンドは、 xterm
プログラムとほぼ互換です。 Emacsと他のXクライアントプログラムとのあいだでコピーするには、 Xのマウスコマンドと同じものを使えます。
これらのマウスコマンドでリージョンを選択して、 そのあとすぐにファンクションキーDELETEを打つと、 選択したリージョンを削除します。 ファンクションキーBACKSPACEやASCII文字DELは、 これを行いません。 マウスコマンドとDELETEのあいだに別のキーを打ったときも、 これを行いません。
mouse-set-point
)。 通常、左ボタン。
mouse-set-region
)。 リージョンの始めと終りの両方をこのコマンド1つで指定できる。
ドラッグ中に、ウィンドウの上下からマウスが出ると、 マウスがウィンドウ内に戻ってくるまで、 ウィンドウを一定の割合でスクロールする。 こうして、画面全体に入りきらないリージョンでも選択できる。 一度にスクロールする行数は、 マウスがウィンドウの縁からどの程度離れているかに依存する。 変数mouse-scroll-min-lines
には最小の行数を指定する。
mouse-yank-at-click
)。 通常、中ボタン。
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を使うと、 すでに選択してあるリージョンをキルする。
開き括弧や閉じ括弧の構文の文字をクリックすると、 その文字で始まり/終る括弧で囲まれた塊(sexp)にリージョンを設定する。 文字列区切りの構文(Cのシングルクォートやダブルクォート)の文字をクリック すると、(その文字が文字列の始まりか終りかを発見的方法を使って決めて) 文字列定数を囲むリージョンを設定する。
マウスを使ったもっとも単純なテキストのキル方法は、 片方の端でMouse-1を押し、もう一方の端でMouse-3を2回押すことです。 See 節 H.8 削除とキル (2005/03/20)。 バッファから削除しないでキルリングにテキストをコピーするには、 Mouse-3を一度だけ押します。 あるいは、Mouse-1でテキストを横断してドラッグするだけです。 そうすると、どこででも、それをヤンクすることでコピーできます。
キルしたりコピーしたりしたテキストをどこか別の場所にヤンクするには、 マウスをその場所に移動してMouse-2を押します。 See 節 H.9 ヤンク (2005/03/20)。 しかし、mouse-yank-at-point
がnil
以外ならば、 Mouse-2はポイント位置にヤンクします。 つまり、ウィンドウのどこをクリックしたのか、あるいは、 フレームのどのウィンドウをクリックしたのかは問題ではありません。 デフォルトの値はnil
です。 この変数は二次セレクションのヤンクにも影響します。
別のXのウィンドウへテキストをコピーするには、 その部分をキルするかキルリングに保存します。 Xの管理下では、一次セレクションも設定します。 そのあとで、別のXのウィンドウで動いているプログラムの『ペースト』や 『ヤンク』コマンドを使って、セレクションからテキストを挿入します。
別のXのウィンドウからテキストをコピーするには、 そのウィンドウで動いているプログラムの『カット』や『コピー』コマンドを 使って目的のテキストをセレクションにします。 そのあとで、C-yやMouse-2を使ってEmacsにヤンクします。
これらのカット/ペーストコマンドはMS-Windows上でも動作します。
Emacsがテキストをキルリングに入れたり、 キルリングのテキストを先頭へ巡回するとき、 EmacsはXサーバーの一次セレクションに設定します。 このために、別のXクライアントがテキストを参照できるのです。 テキストが十分に短い場合にのみ (x-cut-buffer-max
は最大文字数を指定する)、 Emacsはカットバッファにもテキストを収めます。 長い文字列をカットバッファへ置くには時間がかかります。
キルリングの始めのテキストをヤンクするコマンドは、 実際には、別のプログラムの一次セレクションをまず調べ、 そのあとで、カットバッファのテキストを調べます。 どちらにもヤンクするテキストがなれば、キルリングの内容を使います。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
二次セレクションは、Xにおいてテキストを選択する別の方法です。 これは、ポイントやマークを使わないので、 ポイントやマークを設定せずにテキストを削除するのに使えます。
mouse-set-secondary
)。 強調表示されドラッグするにつれて変化する。
ドラッグ中にウィンドウの上下からマウスが出ると、 ウィンドウへマウスが戻ってくるまで、 ウィンドウを一定の割合でスクロールする。 こうして、画面全体に入りきらないリージョンも選択できる。
mouse-start-secondary
)。
mouse-secondary-save-then-kill
)。 同じ位置での2回目のクリックは、 ちょうど作成した二次セレクションをキルする。
mouse-yank-secondary
)。 ヤンクしたテキストの最後にポイントを置く。M-Mouse-1のダブルクリックやトリプルクリックは、 Mouse-1のように単語や行単位に作用します。
mouse-yank-at-point
がnil
以外ならば、 M-Mouse-2はポイント位置にヤンクします。 そのときには、どこをクリックしたかは関係なく、 どのウィンドウをクリックしたかだけが関係します。 See 節 Q.1 編集用マウスコマンド。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
いくつかのEmacsバッファでは、いろいろなものの一覧を表示します。 ファイル一覧、バッファ一覧、補完候補一覧、パターンに一致したものの一覧 などです。
これらのバッファにテキストをヤンクできても便利ということはないので、 これらの多くはMouse-2を特別に定義して、 クリックした項目を使ったり眺めたりするコマンドとしています。
たとえば、diredバッファのファイル名をMouse-2でクリックすると、 そのファイルを訪問します。 `*Compilation*'バッファのエラーメッセージをMouse-2で クリックすると、そのエラーメッセージに対応するソースコードへ行きます。 `*Completions*'バッファの補完候補をMouse-2でクリックすると、 その補完候補を選択します。
反応するテキストの上にマウスが移動するとテキストが強調表示されるので、 Mouse-2がいつ特別な意味を持つか普通はわかります。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
CTRLやSHIFTキーで修飾されたマウスクリックは、 メニューを立ち上げます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ウィンドウを選択したり操作するために、 ウィンドウのモード行でマウスクリックを使えます。
スクロールバーでC-Mouse-2をクリックすると、 対応するウィンドウを上下に分割します。 See 節 P.2 ウィンドウの分割 (2004/03/23)。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
プレフィックスキーC-x 5は、 C-x 4と同じようなサブコマンドがあるという点で似ています。 違いは、C-x 5コマンドは、 選択されているフレームで新たにウィンドウを作るのではなく、 新しいフレームを作ることです(see 節 P.4 別のウィンドウに表示する)。 既存の見えているフレームやアイコン化されたフレームが、 要求された内容を表示しているなら、これらのコマンドは、 必要ならフレームをいちばん手前にもってきたりアイコンを開いてから、 既存のフレームを使います。
さまざまなC-x 5コマンドは、 選択するバッファの探し方や作成方法が異なります。
make-frame-command
)。switch-to-buffer-other-frame
を実行する。find-file-other-frame
を実行する。 see 節 N.2 ファイルを訪問する。dired-other-frame
を実行する。 see 節 AC. ディレクトリエディタdired。mail-other-frame
を実行する。 これは、C-x mの他のフレームを使う変形版。 see 節 AA. メイルの送信。find-tag-other-frame
を実行し、 M-.の複数フレーム向けの変形版。 see 節 X.2 タグテーブル。find-file-read-only-other-frame
を実行する。 see 節 N.2 ファイルを訪問する。 default-frame-alist
にフレームパラメータを設定することで、 新たに作成するフレームの見た目を制御できます。 初期フレームだけに影響するパラメータを指定するには、 変数initial-frame-alist
を使います。 詳しくは、 See Emacs Lisp リファレンスマニュアル。
すべてのEmacsフレームに主要フォントを指定するもっとも簡単な方法は、 Xのリソース(see 節 AF.7 フォント指定オプション)を使うことですが、 つぎに示すように、font
パラメータを指定するように default-frame-alist
を変更してもできます。
(add-to-list 'default-frame-alist '(font . "10x20")) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsのフレームは、スピードバーを持つことができます。 スピードバーは、縦長のウィンドウで、 訪問したりタグを探したりするためのスクロール可能な ファイルメニューとして働きます。 スピードバーを作るには、M-x speedbarと打ちます。 これは、選択されたフレームに対するスピードバーウィンドウを作ります。 そうすると、スピードバーのファイル名をクリックすると、 対応するEmacsフレームでそのファイルを訪問できます。 あるいは、タグの名前をクリックすると、 Emacsフレームでそのタグの箇所へ飛んで行きます。
最初、スピードバーには、カレントディレクトリの直下の内容を 1行につき1つのファイルで表示します。 各行には、`[+]'か`<+>'の箱があって、 それをMouse-2でクリックするとその項目の内容を『開け』ます。 その行の名前がディレクトリならば、それを開くと、 そのディレクトリの内容をその行の下に追加してスピードバーに表示します。 その行が普通のファイルならば、それを開くと、 そのファイル内のタグ一覧をスピードバーに追加して表示します。 ファイルが開かれていると、`[+]'は`[-]'に変わります。 ファイルを『閉じる』(内容を隠す)ためにその箱をクリックできます。
rmailモード、infoモード、GUDモードを含むいくつかのメジャーモードには、 選択可能な有用な項目をスピードバーに追加する特別な方法があります。 たとえば、rmailモードでは、スピードバーにはrmailファイル一覧を表示します。 カレントメッセージを別のrmailファイルに移すには、 目的のrmailファイルの`
スピードバーは1つのEmacsフレームに属し、つねにそのフレームに作用します。 複数のフレームを使うときには、 一部のフレームやすべてのフレームにスピードバーを作れます。 フレームのスピードバーを作るには、そのフレームでM-x speedbarと打ちます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
1つのEmacsは、複数のXディスプレイと通信できます。 最初は、Emacsは1つのディスプレイだけを使います。 環境変数DISPLAY
や`--display'オプションに指定されたものです (see 節 AF.2 初期化オプション)。 他のディスプレイに接続するには、 コマンドmake-frame-on-display
を使います。
1つのXサーバーは複数のスクリーンを扱えます。 1つのサーバーに属する2つのスクリーンにフレームを開くとき、 Emacsは1つのキーボードを共有していることを知っていて、 これらのスクリーンから到着するすべてのコマンドを1つの 入力ストリームとして扱います。
異なるXサーバー上にフレームを開くとき、 Emacsはそれぞれのサーバーに対して別々の入力ストリームを作ります。 こうすることで、2つのディスプレイ上で2人のユーザーが同時に打鍵でき、 Emacsはそれらの入力をごっちゃにすることはありません。 各サーバーにはそれ自身が選択しているフレームがあります。 特定のXサーバーで入力したコマンドは、 そのサーバーが選択しているフレームに適用されます。
これらの機能にも関わらず、異なるディスプレイで同じEmacsジョブを 使っている人達は、注意を怠ると、互いに干渉し合ってしまいます。 たとえば、誰かがC-x C-cと打つと、 その人達が共有している(1つの)Emacsジョブは終了してしまいます!
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ウィンドウが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-names
やspecial-display-regexps
の要素は、 リストでもかまいません。 その場合、最初の要素はバッファ名か正規表現です。 リストの残りは、フレームの作成方法を指定します。 これは、フレームパラメータの値を指定する連想リストにすることもできます。 これらの値は、special-display-frame-alist
に 指定されたパラメータの値より優先されます。 あるいは、リストはつぎのような形式にすることもできます。
(function args...) |
ここで、functionはシンボルです。 こうすると、functionを呼んでフレームを作ります。 関数呼び出しの最初の引数はバッファで、残りの引数はargsです。
似たような機能で、バッファをどの選択されているウィンドウに表示するか 指定できます。 See 節 P.5 同じウィンドウへの強制表示。 同じウィンドウに表示する機能は、特別なフレームに表示する機能に優ります。 したがって、バッファ名をspecial-display-buffer-names
に追加しても 何の効果もなかったら、 その機能が同じバッファ名に対しても使われていないか調べてください。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
本節では、選択しているフレームの表示スタイルやウィンドウ管理のふるまいを 変更するコマンドを説明します。
modeline
フェイスの前景色も変更するので、 デフォルトと比較しても反転表示のままになる。
このオートレイズ機能はEmacs自身が実装していることに注意。 ウィンドウマネージャの中にも、オートレイズを実装しているものがある。 XのウィンドウマネージャでEmacsフレームのオートレイズを指定しているときには、 それが動作するはず。 しかし、それはEmacsの制御を超えているので、それに関しては auto-raise-mode
は何の影響もない。
コマンドauto-lower-mode
は、 Xのウィンドウマネージャが実装するオートローワには何の影響もない。 それを制御するには、適切なウィンドウマネージャの機能を使う必要がある。
ポップアップメニューから、フレームの主要フォントを設定することもできる。 このメニューを立ち上げるにはS-Mouse-1を押す。
Xツールキットを使うEmacsの版では、表示色とフォントを設定する関数は メニューやメニューバーには影響しません。 というのは、メニューやメニューバーは、 それら自身のウィジェットクラスを使って表示されているからです。 メニューとメニューバーの見た目を変更するには、 Xのリソースを使う必要があります(see 節 AF.13 Xリソース)。 表示色に関しては、See 節 AF.8 ウィンドウ表示色オプション。 フォントの選択については、See 節 AF.7 フォント指定オプション。
フレームパラメータとそのカスタマイズについては、 See Emacs Lisp リファレンスマニュアル。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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 節 AF.13 Xリソース。
選択されているフレームに対してのみスクロールバーをオン/オフするには、 M-x toggle-scroll-barコマンドを使います。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
M-x menu-bar-modeでメニューバーの表示をオン/オフできます。 引数を指定しないと、このコマンドはマイナモードである メニューバー(menu-bar)モードをトグルします。 引数を指定した場合、引数が正ならメニューバー(menu-bar)モードをオンにし、 引数が正でないならオフにします。 Xのリソース`menuBarLines'を使って、 メニューバー(menu-bar)モードの初期設定を制御できます。 See 節 AF.13 Xリソース。 熟練したユーザーは、メニューバーをしばしばオフにし、 特に文字端末上ではそうします。 というのは、テキスト表示に1行余分に使えるからです。
メニューバーでコマンドを起動する方法については、See 節 B.4 メニューバー。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
XでEmacsを使っているとき、文字表示に複数のスタイルを設定できます。 制御できるスタイルは、フォントの種類、前景色、背景色、下線を引くかどうかです。 MS-DOS用Emacsは、各フェイスの前景色と背景色を制御して、 フェイスの一部だけを扱えます(see 節 AJ. EmacsとMS-DOS (2005/09/19))。
表示スタイルを制御する方法は、名前付きフェイスを定義することです。 各フェイスでは、フォントの種類、前景色、背景色、下線フラグを指定できます。 しかし、これらすべてを指定する必要はありません。 バッファ内のテキストの一部分に対して使用するフェイスを指定することで、 そのテキストの見た目を制御できます。
テキスト中のある文字に対して使う表示スタイルは、 いくつかのフェイスを組み合わせて決定されます。 重ね合わせやテキスト属性で指定されていない表示スタイルは、 フレームそのものから得ます。
整形済みテキストを編集するモードであるエンリッチ(enriched)モードには、 フェイスを指定するためのコマンドやメニューがあります。 バッファ内のテキストに対するフォントの指定方法については、See 節 U.11.4 整形済みテキストのフェイス。 前景色と背景色の指定方法については、See 節 U.11.5 整形済みテキストの表示色。
フェイスの見た目を変更するには、カスタマイズバッファを使います See 節 AE.2.2.3 フェイスのカスタマイズ。 Xのリソースを使って、特定のフェイスの属性を指定できます (see 節 AF.13 Xリソース)。
現在定義されているフェイスとその見た目を調べるには、 M-x list-faces-displayと打ちます。 あるフェイスを違うフレームでは違って見えるようにできます。 このコマンドは、コマンドを打ったフレーム上での見た目を表示します。 つぎは、標準的に定義されているフェイス一覧です。
default
modeline
default
フェイスの反転表示を設定。 see 節 J.7 表示を制御する変数。highlight
region
secondary-selection
bold
italic
bold-italic
underline
暫定マーク(transient-mark)モードがオンのときは、 マークが活性ならば、リージョンのテキストは強調表示されます。 これにはregion
という名前のフェイスを使います。 このフェイスのスタイルを変更することで、 強調表示のスタイルを制御できます(see 節 AE.2.2.3 フェイスのカスタマイズ)。 暫定マーク(transient-mark)とマークの活性/不活性について詳しくは、 See 節 H.2 暫定マークモード(transient-markモード) (2005/03/20)。
フェイスを使う簡単な方法の1つは、 フォントロック(font-lock)モードを使うことです。 特定のバッファにつねにローカルであるこのマイナモードは、 編集するテキストの構文に従ってフェイスを選択します。 このモードは、ほとんどの言語のコメントと文字列を認識できます。 いくつかの言語では、それ以外のさまざまな重要な構造も認識して、 適切に強調表示します。 フォントロック(font-lock)モードと構文の強調表示について詳しくは、 See 節 Q.14 フォントロックモード。
画面上で強調表示されたバッファは、 コマンドps-print-buffer-with-faces
を使って印刷できます。 @xref{Postscript}。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
フォントロック(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 節 V.4 関数定義(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))) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
フォントロックには、大きなバッファに対して フォントロック(font-lock)モードを高速に動作させるモードがあります。 高速ロック(fast-lock)モードと遅延ロック(lazy-lock)モードです。 これらは、フォントロック(font-lock)モードの速度を向上するために 2つの異なる方法を使います。
Q.15.1 高速ロックモード Saving font information in files. Q.15.2 遅延ロックモード Fontifying only text that is actually displayed. Q.15.3 高速ロックか遅延ロックか? Which support mode is best for you?
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
大きなファイルを訪問したバッファに対して フォントロック(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
以外ならば保存します(これがデフォルト)。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
大きなバッファに対してフォントロック(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-contextually
に nil
以外を設定していると、遅延ロック(lazy-lock)モードでは、 lazy-lock-defer-time
秒後にこれを自動的に行います。
Emacsが長時間アイドルだと、遅延ロックは、 バッファのまだ表示されていない部分を、 のちの表示に備えてフォント表示化します。 これを内密のフォント表示化(stealth fontification)と呼びます。
変数lazy-lock-stealth-time
は、内密のフォント表示化を開始するまでに、 Emacsが何秒間アイドルであるべきかを指定します。 値がnil
だと、内密のフォント表示化をしません。 変数lazy-lock-stealth-lines
とlazy-lock-stealth-verbose
は、 内密のフォント表示化の粒度と冗長性を指定します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
フォントロックで使えるモードの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))) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
バッファ内の最近に変更された部分を示すためにフェイス(典型的には表示色)を 用いるマイナモードをオンにするには、 M-x highlight-changes-modeを使います。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
つぎのコマンドは、フレームを作成したり削除したり操作したりします。
iconify-or-deiconify-frame
)。 Emacsを休止するというC-zの通常の意味は、 ウィンドウシステムでは有用ではない。 そのため、別のバインドになっている。
Emacsフレームのアイコンでこのコマンドを打つと、 アイコンをフレームに開く。
delete-frame
)。 フレームがたった1つの場合には、このコマンドは許されない。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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を使います。 指定した名前は、フレームを選択するとモード行に表示されます。
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |