エコーエリア内に表示されるほとんどすべてのメッセージは、ユーザーが後で参照できるように*Messages*バッファー内にも記録されます。これにはmessage
により出力されたメッセージも含まれます。デフォルトではこのバッファーは読み取り専用でメジャーモードmessages-buffer-mode
を使用します。ユーザーによる*Messages*バッファーのkillを妨げるものは何もありませんが、次回のメッセージ表示でバッファーは再作成されます。*Messages*バッファーに直接アクセスする必要があり、それが確実に存在するようにしたいLispコードは、すべて関数messages-buffer
を使用するべきです。
この関数は*Messages*バッファーをリターンする。バッファーが存在しなければ作成してバッファーをmessages-buffer-mode
に切り替える。
この変数は*Messages*バッファー内に保持するべき行数を指定する。値t
は保持すべき行数に制限がないことを意味して、値nil
はメッセージのロギングを完全に無効にする。以下はメッセージを表示して、それがロギングされることを防ぐ例:
(let (message-log-max) (message ...))
この変数はメッセージのログの書き込み先となるバッファーの名前を保持する。デフォルトは*Messages*。(恐らくは後でバッファーをログファイルに書き込む等の理由で)一時的に出力を別バッファーにリダイレクトできると都合がよいパッケージがあれば、この変数に別のバッファー名をバインドすればよい(そのバッファーがまだ存在しなければ、そのバッファーが新たにmessages-buffer-mode
で作成されることに注意)。
*Messages*にたいするユーザーの利便性を向上させるために、ロギング機能は連続する同じメッセージを結合します。さらに2つのケースのために連続する関連メッセージの結合も行います。2つのケースとは応答を後にともなう質問(question followed by answer)、および一連のプログレスメッセージ(series of progress messages)です。
応答を後にともなう質問(question followed by an
answer)とは、1つ目が‘question’、2つ目が‘question...answer’のようにy-or-n-p
が生成するような2つのメッセージをもつ応答です。1つ目のメッセージは2つ目のメッセージ以上の追加情報を伝えないので、2つ目のメッセージをロギングして1つ目のメッセージは破棄します。
一連のプログレスメッセージ(series of progress
messages)は、make-progress-reporter
が生成するような連続するメッセージをもちます。これらは‘base...how-far’のような形式であり、how-farは毎回異なりますがbaseは常に同じです。このシリーズ内の各メッセージのロギングでは、そのメッセージが前のメッセージと連続していれば前のメッセージを破棄します。
関数make-progress-reporter
とy-or-n-p
は、メッセージログ結合機能をアクティブにするために何ら特別なことを行う必要はありません。これは‘...’で終わる共通のプレフィックスを共有する連続する2つのメッセージをログする際には常にこの処理を行います。