Next: , Up: エコーエリア   [Contents][Index]


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

このセクションではエコーエリア内にメッセージを表示する標準的な関数を説明します。

Function: message format-string &rest arguments

この関数はエコーエリア内にメッセージを表示する。format-message関数(文字列のフォーマットを参照)の場合と同じようにformat-stringはフォーマット文字列、argumentsはそのフォーマット仕様にたいするオブジェクトである。フォーマットされた結果文字列はエコーエリア内に表示される。それにfaceテキストプロパティが含まれる場合には指定されたフェイスにより表示される(フェイスを参照)。この文字列は*Messages*バッファーにも追加されるがテキストプロパティは含まれない(*Messages*へのメッセージのロギングを参照)。

フォーマット内のグレイヴアクセントとアポストロフィーは"Missing `%s'"から"Missing ‘foo’"のように、通常は対応するcurved quoteとして結果内に変換される。この変換に影響を与えたり抑制する方法についてはテキストのクォートスタイルを参照のこと。

バッチモードでは後に改行が付加されたメッセージが標準エラーストリームにプリントされる。

inhibit-messageが非nilのときはエコーエリアにはメッセージを何も表示せずに‘*Messages*’へのロギングだけとなる。

format-stringnilか空文字列なら、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プログラムはエコーエリアメッセージの表示方法を制御できます。

Variable: set-message-function

この変数が非nilなら、エコーエリア内に表示するためのメッセージテキストを単一の引数とする関数であること。その関数はmessageおよび関連する関数から呼び出されることになる。その関数がnilをリターンすると、通常どおりメッセージはエコーエリアに表示される。関数が文字列をリターンすると、その文字列が元メッセージのかわりにエコーエリアに表示される。その関数が他の非nil値をリターンした場合にはメッセージが処理済みであることを意味するので、messageはエコーエリアに何も表示しない。その関数で表示されたメッセージのクリアーに使用可能なclear-message-functionも参照のこと。

デフォルト値では以下で説明するset-minibuffer-messageを呼び出す。

Variable: clear-message-function

この変数が非nilの場合には引数のない関数であること。messageおよび関連する関数は引数となるメッセージがnilか空文字列なら、エコーエリアをクリアーするために引数なしでその関数を呼び出す。

この関数は通常はエコーエリアメッセージの表示後、次の入力イベントの到着時に呼び出される。これはset-message-functionにより指定されたカウンターパートとなる関数が表示したメッセージのクリアーを期待される関数だが、必ずしもクリアーを行う必要はない。関数がクリアーしない状態でエコーエリアを残したければ、シンボルdont-clear-messageをリターンすること。それ以外の値であればエコーエリアがクリアーされたことを意味する。

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

User Option: set-message-functions

このユーザーオプションの値は、エコーエリアへのメッセージ表示を処理する関数のリストである。関数はそれぞれ表示するメッセージテキストを唯一の引数として呼び出される。その関数が文字列をリターンしたら元の文字列はその文字列で置換されて、リストの次の関数はその新たなメッセージテキストを引数として呼び出される関数がnilをリターンした場合には同じテキストでリストの次の関数が呼び出される。リストで最後の関数がnilをリターンすると、エコーエリにメッセージテキストを表示、文字列以外の非nil値をリターンした場合にはメッセージを処理済みとみなしてそれ以上リストの関数は呼び出さない。

このリストに配置する値として役に立つ3つの関数を以下に挙げる。

Function: set-minibuffer-message message

この関数はミニバッファーが非アクティブならエコーエリア、アクティブならミニバッファー終端にメッセージを表示する。しかしアクティブなミニバッファーに表示されるテキストの何らかの文字がminibuffer-messageテキストプロパティ(特殊な意味をもつプロパティを参照)をもつ場合には、メッセージはそのプロパティをもつ最初の文字の前に表示される。

デフォルトではこの関数がset-message-functionsのリストの唯一のメンバーである。

Function: inhibit-message message

この関数はエコーエリアのmessageがユーザーオプションinhibit-message-regexpsの値となっているリストのregexpのいずれかにマッチしたらそのメッセージの表示を抑制して文字列以外の非nil値をリターンする。したがってこの関数がリストset-message-functionsにあると、messageinhibit-message-regexpsのregexpにマッチする場合にはリストの残りの関数は呼び出されない。マッチするmessageの表示を確実に抑制するには、この関数をset-message-functionsのリストの最初の要素にすればよい。

Function: set-multi-message message

この関数は発行されていく複数のエコーエリアメッセージを逐一溜め込み、改行を区切られた個々のメッセージを単一の文字列としてリターンする。直近でmulti-message-max回までのメッセージを蓄積できる。蓄積されたメッセージは最初のメッセージの発行からmulti-message-timeout秒経過後に破棄される。

Variable: inhibit-message

この変数が非nilなら、messageおよび関連する関数はエコーエリアに何もメッセージは表示しない。ただしエコーエリアのメッセージは依然として*Messages*バッファーにはロギングされる。

Macro: with-temp-message message &rest body

この構文はbody実行の間にエコーエリア内にメッセージを一時的に表示する。これはmessageを表示してbodyを実行して、それからエコーエリアの前のコンテンツをリストアするとともにbodyの最後のフォームの値をリターンする。

Function: message-or-box format-string &rest arguments

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

呼び出しの前後でlast-nonmenu-eventを適切な値にバインドすることによりエコーエリアでのマウスの使用を強制できる。

Function: message-box format-string &rest arguments

この関数はmessageと同様にメッセージを表示するが、利用可能なら常にダイアログボックス(かポップアップメニュー)を使用する。端末がサポートしないためにダイアログボックスやポップアップメニューが使用できなければ、message-boxmessageと同様にエコーエリアを使用する。

Function: display-message-or-buffer message &optional buffer-name action frame

この関数はメッセージmessageを表示する。messageには文字列かバッファーを指定できる。これがmax-mini-window-heightで定義されるエコーエリアの最大高さより小さければ、messageを使用してエコーエリアに表示される。それ以外ならメッセージを表示するためにdisplay-bufferはポップアップバッファーを使用する。

エコーエリアに表示したメッセージ、またはポップアップバッファー使用時はその表示に使用したウィンドウをリターンする。

messageが文字列ならオプション引数buffer-nameはポップアップバッファー使用時にメッセージ表示に使用するバッファー名(デフォルトは*Message*)。messageが文字列でエコーエリアに表示されていれば、いずれにせよコンテンツをバッファーに挿入するかどうかは指定されない。

オプション引数actionframedisplay-bufferの場合と同様に、バッファーが表示されている場合のみ使用される。

Function: current-message

この関数はエコーエリア内にカレントで表示されているメッセージ、またはそれが存在しなければnilをリターンする。