Next: , Previous: , Up: プログラムのコンパイルとテスト   [Contents][Index]


28.2 Compilationモード

*compilation*バッファーは、Compilationモードと呼ばれるメジャーモードを使用します。Compilationモードは、バッファーのエラーメッセージをハイパーリンクに変換します。ポイントをそこに移動してRETをタイプするか、マウスでクリック(マウスで参照をフォローするを参照してください)すると、別のウィンドウでエラーメッセージのlocusをvisitします。locusとは、エラーが発生したファイルの特定の位置を意味します。

エラーメッセージや警告メッセージにたいするcompilation-errorcompilation-warningのように、*compilation*バッファーの外観は、*compilation*バッファーのハイライト箇所に使用されるフェイスをカスタマイズすることにより制御されます。これらのフェイスはerrorフェイスとwarningフェイスから継承されるので、親フェイスを直接カスタマイズすることも可能なことに注意してください。

カスタマイズに関する変数とフェイスの完全なリストを確認するには、M-x customize-group RET compilationを使用してください。

変数compilation-auto-jump-to-first-errorを非nil値に変更した場合、Emacsは、*compilation*バッファーに表れる最初のエラーメッセージのlocusを自動的にvisitします(自動的にエラーのlocusをvisitする条件を変更するために、この変数にif-location-knownfirst-knownを指定することもできる)。

Compilationモードは、以下の追加のコマンドを提供します。これらのコマンドは*grep*バッファーでも使用できます。このバッファーではエラーメッセージのかわりに、検索にたいするマッチにハイパーリンクが設定されます(Emacs下でのGrepによる検索を参照してください)。

M-g M-n
M-g n
C-x `

次のエラーメッセージ(またはマッチ)のlocusをvisitします(next-error)。

M-g M-p
M-g p

前のエラーメッセージ(またはマッチ)のlocusをvisitします(previous-error)。

M-n

locusをvisitせずに、ポイントを次のエラーメッセージ(またはマッチ)に移動します(compilation-next-error)。

M-p

locusをvisitせずに、ポイントを前のエラーメッセージ(またはマッチ)に移動します(compilation-previous-error)。

M-}

他のファイルで発生した次のエラーメッセージ(またはマッチ)にポイントを移動します(compilation-next-file)。

M-{

他のファイルで発生した前のエラーメッセージ(またはマッチ)にポイントを移動します(compilation-previous-file)。

C-c C-f

Next Error Followマイナーモードに切り替えます。これはcompilationバッファーでのカーソル移動にしたがって、ソースを自動的に表示するモードです。

g

出力が*compilation*バッファー内に表示されている、最後のコマンドを再実行します。

M-x next-error-select-buffer

next-errorprevious-errorの次回の呼び出しで使用されるバッファーを選択します。

順番にエラーをvisitするには、C-x ` (next-error)とタイプするか、これと等価なM-g M-nまたはM-g nとタイプします。このコマンドはCompilationモードのバッファーだけでなく、任意のバッファーから呼び出すことができます。コンパイル後に最初に呼び出すときは、最初のエラーメッセージのlocusをvisitします。連続したM-g M-nは、同じ方法で次のエラーをvisitします。*compilation*バッファーからRETまたはマウスクリックで特定のエラーをvisitした場合、M-g M-nはそのエラーの次のエラーからvisitしていきます。これ以上visitするエラーメッセージがない場合、M-g M-nはエラーをシグナルします。C-u M-g M-nはcompilationバッファーの先頭から再開して、最初のlocusをvisitします。

M-g M-pまたはM-g p (previous-error)は、反対方向にエラーを巡回します。

コマンドnext-errorおよびprevious-errorは、バッファー*compilation*または*grep*にリストされたエラー(またはマッチ)だけに作用されるわけではありません。これらのコマンドはM-x occur (その他の検索およびループコマンドを参照のようなコマンドで生成されたエラー(またはマッチ)を巡回する方法も知っています。カレントバッファーがエラーメッセージ、またはマッチを含む場合には、これらのコマンドはそれらを巡回するでしょう。そうでなければEmacsは(変数next-error-find-buffer-functionの値をnext-error-buffer-on-selected-frameにカスタマイズしていれば)選択されたフレームのウィンドウの中からエラーメッセージ(またはマッチ)を含むバッファー、次にnext-errorまたはprevious-errorが最後に使用したバッファー、最後にその他のすべてのバッファーを探します。これらのコマンドが巡回するために選択されたバッファーがカレントでウィンドウに表示されていなければ、そのバッファーが表示されるでしょう。その後のnext-error呼び出しで使用される別バッファーへの切り替えには、コマンドnext-error-select-bufferを使用できます。

デフォルトでは、コマンドnext-errorおよびprevious-errorは、重要でないメッセージはスキップします。変数compilation-skip-thresholdが、これを制御します。デフォルト値は1で、これは警告(warning)より重要でないメッセージをスキップします。2の場合、エラー(error)より重要でないものをスキップし、0はメッセージをスキップしません。

Emacsがエラーメッセージのlocusをvisitしているとき、関連するソース行が一時的にハイライトされます。選択されたバッファーのlocusのハイライトの持続時間は変数next-error-highlight、それ以外のバッファーではnext-error-highlight-no-selectにより決定されます。更にメッセージを含むバッファーでカレントエラーメッセージをハイライトする方法を定義する、変数next-error-message-highlightをカスタマイズすることもできます。

*compilation*バッファーが左フリンジ(ウィンドウのフリンジを参照してください)のあるウィンドウで表示されている場合、locusをvisitするコマンドはカレントエラーメッセージを指す矢印をフリンジに配します。テキスト端末のように、左フリンジがないウィンドウの場合、これらのコマンドは、カレントメッセージがウィンドウの一番上にくるようにウィンドウをスクロールします。変数compilation-context-linestに変更すると、かわりに列0の前に可視の矢印を挿入します。整数値nに変更した場合には、これらのコマンドはフリンジの有無に関わらずメッセージがウィンドウの上からn行目にくるようにウィンドウをスクロールします。デフォルト値のnilでは上述のように振る舞います。

コンパイル出力が非常に冗長になることもありますが、多くの場合にはユーザーにとって特に重要ではありません。ユーザーオプションcompilation-hidden-outputにregexpかregexpのリストをセットすることによって、それらにマッチする出力を非表示にできます。たとえば再帰的なMakefileからの冗長な出力を非表示にするために、以下のような指定ができます:

(setq compilation-hidden-output
      '("^make[^\n]+\n"))

コンパイラーからのメッセージを解析するために、Compilationモードは変数compilation-error-regexp-alistを使用します。これはさまざまなエラーメッセージのフォーマットをリストし、それらからlocusを抽出する方法をEmacsに指示します。同じような変数grep-regexp-alistは、grepコマンド(Emacs下でのGrepによる検索を参照してください)の出力を解析する方法を指示します。

Compilationモードは、スクリーン単位でスクロールを行うために、キーSPCおよびDELも定義します。M-n (compilation-next-error)およびM-p (compilation-previous-error)は、次または前のエラーメッセージに移動します。M-{ (compilation-next-file)およびM-} (compilation-previous-file)は、違うソースファイルの、次または前のエラーメッセージに移動します。

C-c C-fとタイプして、Next Error Followモードに切り替えることができます。このマイナーモードでは、compilationバッファーでの通常のカーソル移動により、自動的にソースを表示するバッファーが更新されます。たとえばカーソルをエラーメッセージに移動すると、そのエラーにたいするlocusが表示されます。

Compilationモードの機能は、Compilation Minorモード呼ばれるマイナーモードでも利用可能です。これは通常のコンパイル出力のバッファーだけでなく、任意のバッファーのエラーメッセージを解析します。M-x compilation-minor-modeとタイプすることにより、このマイナーモードが有効になります。たとえばRloginバッファー(リモートホストのシェルを参照してください)では、Compilation minorモードはリモートのソースファイルに、FTPを通じて自動的にアクセスします(ファイルの名前を参照してください)。