GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Logging-Messages.html ・ emacs-doc.conao3.com

42.4.3 *Messages*におけるメッセージのログ記録

エコーエリアに表示されるほぼすべてのメッセージは、ユーザーが後で参照できるよう、*Messages* バッファにも記録されます。これには message で出力されるすべてのメッセージが含まれます。デフォルトでは、このバッファは読み取り専用であり、メジャーモード messages-buffer-mode が使用されます。ユーザーが *Messages* バッファを破棄することを妨げるものは何もありませんが、次にメッセージが表示される際に再作成されます。*Messages* バッファに直接アクセスする必要があり、かつその存在を確実にしたい Lisp コードは、関数 messages-buffer を使用する必要があります。

関数: messages-buffer

この関数は*Messages*バッファを返します。存在しない場合はバッファを作成し、messages-buffer-modeに切り替えます。

ユーザーオプション: message-log-max

この変数は、*Messages* バッファに保持する行数を指定します。値 t は、保持する行数に制限がないことを意味します。値 nil は、メッセージのログ記録を完全に無効にします。メッセージを表示しつつ、ログに記録されないようにする方法は以下の通りです。

(let (message-log-max)
  (message ...))
変数: messages-buffer-name

この変数は、メッセージをログ出力するバッファの名前を指定するもので、デフォルトは *Messages* です。パッケージによっては、出力を一時的に別のバッファにリダイレクトすること(後でバッファの内容をログファイルに書き出すためなど)が有用な場合があり、その場合はこの変数を別のバッファ名にバインドできます。(なお、このバッファは(まだ存在しない場合は)作成され、messages-buffer-mode に格納されます。)

*Messages* をユーザーにとってより使いやすくするため、ロギング機能では連続する同一メッセージを統合します。また、「質問に続く回答」および「一連の進捗メッセージ」という2つのケースにおいて、関連する連続メッセージも統合します。

質問とそれに続く回答は、y-or-n-p によって生成されるものと同様に、2つのメッセージを持ちます。1つ目は ‘question’、2つ目は ‘question...answer’ です。1つ目のメッセージは、2つ目のメッセージに含まれる内容以上の追加情報を伝えないため、2つ目のメッセージをログに記録すると、1つ目のメッセージはログから除外されます。

一連の進捗メッセージには、make-progress-reporter によって生成されるようなメッセージが連続して含まれます。これらは ‘base...how-far’ という形式をとり、base は毎回同一で、how-far は変動します。一連の各メッセージをログに記録すると、それらが連続している限り、直前のメッセージは破棄されます。

メッセージログの組み合わせ機能を有効にするために、関数 make-progress-reporter と y-or-n-p が特別な処理を行う必要はありません。‘...’ で終わる共通のプレフィックスを持つ2つの連続したメッセージがログに記録されるたびに、この機能が動作します。