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

42.4.1 エコーエリアへのメッセージ表示

この節では、エコー領域にメッセージを表示するための標準関数について説明します。

関数: message format-string &rest arguments

この関数は、エコー領域にメッセージを表示します。format-string はフォーマット文字列であり、arguments は format-message 関数と同様に、そのフォーマット指定に対応するオブジェクトです(フォーマット文字列を参照)。生成されたフォーマット済み文字列はエコー領域に表示され、そこに face テキストプロパティが含まれている場合は、指定されたフェイスで表示されます(フェイスを参照)。また、この文字列は *Messages* バッファにも追加されますが、テキストプロパティは含まれません(*Messages* でのメッセージログ出力を参照)。

通常、フォーマット内のグレイヴアクセントやアポストロフィは、対応する曲線引用符に変換されます。例えば、"Missing `%s'" は "Missing ‘foo’" になる場合があります。この変換を制御または抑制する方法については、テキスト引用スタイル を参照してください。

バッチモードでは、メッセージが標準エラーストリームに出力され、その後に改行が続きます。

inhibit-message が nil 以外の場合、エコーエリアにメッセージは表示されず、‘*Messages*’ にログ出力されるのみとなります。

format-string が nil または空文字列の場合、message はエコーエリアをクリアします。エコーエリアが自動的に拡張されていた場合は、これにより通常のサイズに戻ります。ミニバッファがアクティブな場合は、これによりミニバッファの内容が直ちに画面に戻ります。

(message "Reverting `%s'..." (buffer-name))
 ⊣ Reverting ‘subr.el’...
⇒ "Reverting ‘subr.el’..."

---------- Echo Area ----------
Reverting ‘subr.el’...
---------- Echo Area ----------

エコー領域またはポップバッファに、そのサイズに応じてメッセージを自動的に表示するには、display-message-or-buffer を使用します(以下を参照)。

警告: 独自の文字列をそのままメッセージとして使用したい場合は、単に (message string) と記述しないでください。string に ‘%’、‘`’、または ‘'’ が含まれている場合、再フォーマットされ、望ましくない結果を招く可能性があります。代わりに (message "%s" string) を使用してください。

以下の機能により、ユーザーやLispプログラムはecho-areaメッセージの表示方法を制御できます。

変数: set-message-function

この変数が nil 以外の場合、それはエコーエリアに表示するメッセージのテキストを1つの引数として受け取る関数である必要があります。その関数は message および関連関数によって呼び出されます。関数が nil を返した場合、メッセージは通常通りエコーエリアに表示されます。関数が文字列を返した場合、元のメッセージの代わりにその文字列がエコーエリアに表示されます。関数が nil 以外の値を返した場合、それはメッセージが既に処理済みであることを意味するため、message はエコーエリアに何も表示しません。

デフォルト値は、後述する set-minibuffer-message を呼び出します。

変数: clear-message-function

この変数が nil 以外の場合、引数を取らない関数である必要があります。message および関連関数は、引数 message が nil または空文字列であるときにこの関数を呼び出し、エコー領域をクリアします。

通常、この関数はエコーエリアにメッセージを表示した後、次の入力イベントが発生した際に呼び出されます。この関数は、set-message-function で指定された対応関数によって表示されたメッセージをクリアすることが期待されますが、必ずしもそうする必要はありません。エコーエリアをクリアしない状態に保ちたい場合は、シンボル dont-clear-message を返す必要があります。それ以外の値を返すと、エコーエリアがクリアされます。

デフォルト値は、アクティブなミニバッファに表示されているメッセージをクリアする関数です。

ユーザーオプション: set-message-functions

このユーザーオプションの値は、エコーエリアメッセージの表示処理のために呼び出される関数のリストです。各関数には、表示するメッセージのテキストという1つの引数が渡されます。関数が文字列を返した場合、その文字列が元のメッセージに置き換わり、リスト内の次の関数が新しいメッセージテキストとともに呼び出されます。関数が nil を返した場合は、同じテキストでリスト内の次の関数が呼び出されます。リストの最後の関数が nil を返した場合、メッセージテキストがエコーエリアに表示されます。関数が文字列以外の nil 以外の値を返した場合、メッセージは処理済みとみなされ、リスト内の以降の関数は呼び出されません。

このオプションの値となるリストに含めるべき3つの便利な関数について、以下に説明します。

関数: set-minibuffer-message message

この関数は、ミニバッファが非アクティブなときはエコーエリアに、アクティブなときはミニバッファの末尾に message を表示します。ただし、アクティブなミニバッファに表示されているテキストの一部の文字に minibuffer-message テキストプロパティ(特殊な意味を持つプロパティ を参照)が付与されている場合、そのプロパティを持つ最初の文字よりも前にメッセージが表示されます。

この関数は、デフォルトでは set-message-functions 内のリストの唯一の要素となります。

関数: inhibit-message message

echo-area message が、ユーザーオプション inhibit-message-regexps の値であるリスト内の任意の正規表現に一致する場合、この関数はそのメッセージの表示を抑制し、文字列ではない非 nil 値を返します。したがって、この関数がリスト set-message-functions に含まれている場合、message が inhibit-message-regexps 内の正規表現に一致しても、リスト内の残りの関数は呼び出されません。一致する message が決して表示されないようにするには、この関数を set-message-functions のリストの先頭要素に配置してください。

関数: set-multi-message message

この関数は、連続して出力された複数の echo-area メッセージを蓄積し、個々のメッセージを改行で区切った一つの文字列として返します。直近の multi-message-max 件までのメッセージを蓄積できます。最初のメッセージが出力されてから multi-message-timeout 秒以上経過すると、蓄積されたメッセージは破棄されます。

変数: inhibit-message

この変数が nil 以外の場合、message および関連関数はエコーエリアにメッセージを表示せず、また nil または空の引数を指定して message を呼び出した際に、以前のエコーエリアのメッセージをクリアすることもありません。ただし、エコーエリアのメッセージは引き続き *Messages* バッファに記録されます。

マクロ: with-temp-message message &rest body

このコンストラクトは、bodyの実行中、一時的にエコー領域にメッセージを表示します。messageを表示し、bodyを実行した後、直前のエコー領域の内容を復元しつつ、最後のボディフォームの値を返します。

関数: message-or-box format-string &rest arguments

この関数は message のようなメッセージを表示しますが、エコー領域ではなくダイアログボックスに表示する場合もあります。この関数が、マウスで呼び出されたコマンド内で呼び出された場合――より正確には、last-nonmenu-event(コマンドループからの情報を参照)が nil またはリストである場合――メッセージの表示にダイアログボックスまたはポップアップメニューを使用します。それ以外の場合は、エコー領域を使用します。(これは y-or-n-p が同様の判断を行う際に用いる基準と同じです。Yes-or-No クエリを参照してください。)

呼び出し箇所の周辺で last-nonmenu-event を適切な値にバインドすることで、マウスまたはエコー領域の使用を強制できます。

関数: message-box format-string &rest arguments

この関数は message のようなメッセージを表示しますが、可能な場合はダイアログボックス(またはポップアップメニュー)を使用します。端末がダイアログボックスやポップアップメニューをサポートしていないため使用できない場合は、message-box は message と同様にエコー領域を使用します。

関数: display-message-or-buffer message &optional buffer-name action frame

この関数は、文字列またはバッファのいずれかであるメッセージ message を表示します。これが max-mini-window-height で定義されたエコー領域の最大高さよりも短い場合は、message を用いてエコー領域内に表示されます。それ以外の場合は、display-buffer を用いてポップアップバッファに表示されます。

エコー領域に表示されている文字列、またはポップアップバッファが使用されている場合はそれを表示したウィンドウを返します。

message が文字列の場合、オプション引数 buffer-name は、ポップアップバッファを使用する際にその表示に用いられるバッファの名前であり、デフォルトは *Message* です。message が文字列でエコーエリアに表示される場合、その内容がいずれにせよバッファに挿入されるかどうかは規定されていません。

オプション引数 action および frame は display-buffer と同様であり、バッファが表示される場合にのみ使用されます。

関数: current-message

この関数は、現在エコー領域に表示されているメッセージ、あるいはメッセージがない場合は nil を返します。