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

1.8.5 message 関数

+と同様に、message関数は可変個の引数を取ります。ユーザーにメッセージを送信する際に使用され、非常に有用であるため、ここで解説します。

エコー領域にメッセージが出力されます。例えば、以下のリストを評価することで、エコー領域にメッセージを出力できます。

(message "This message appears in the echo area!")

ダブルクォートで囲まれた文字列全体が単一の引数となり、そのまま出力されます。(なお、この例ではメッセージ自体がダブルクォートで囲まれた状態でエコーエリアに表示されます。これは、message関数が返す値が表示されるためです。ご自身で作成されるプログラムでmessageを使用する場合の多くは、テキストは副作用としてクォートなしでエコーエリアに出力されます。この例については、multiply-by-sevenの詳細を参照してください。)

ただし、引用符で囲まれた文字列の中に ‘%s’ がある場合、message 関数は ‘%s’ をそのまま出力するのではなく、文字列に続く引数を参照します。第2引数を評価し、文字列内で ‘%s’ がある位置の値を出力します。

以下の式の後にカーソルを置いて C-x C-e と入力すると、これが確認できます。

(message "The name of this buffer is: %s." (buffer-name))

Infoでは、"The name of this buffer is: *info*."がエコーエリアに表示されます。関数buffer-nameはバッファ名を文字列として返し、関数messageがそれを%sの代わりに挿入します。

値を整数として出力するには、%sと同様に%dを使用します。例えば、echo領域にfill-columnの値を示すメッセージを出力するには、以下を評価します。

(message "The value of fill-column is %d." fill-column)

私の環境では、このリストを評価すると、エコー領域に"The value of fill-column is 72."が表示されます5。

引用符で囲まれた文字列内に複数の ‘%s’ がある場合、最初の ‘%s’ の位置にその文字列に続く第1引数の値が、2番目の ‘%s’ の位置に第2引数の値が、というように順に出力されます。

例えば、以下を評価すると、

(message "There are %d %s in the office!"
         (- fill-column 14) "pink elephants")

エコーエリアにかなり風変わりなメッセージが表示されます。私の環境では、"There are 58 pink elephants in the office!"と表示されています。

式 (- fill-column 14) が評価され、その結果得られた数値が ‘%d’ の代わりに挿入されます。また、ダブルクォートで囲まれた文字列 "pink elephants" は単一の引数として扱われ、‘%s’ の代わりに挿入されます。(つまり、ダブルクォートで囲まれた文字列は、数値と同様にそれ自体として評価されます。)

最後に、数値の計算例を示すだけでなく、式の中で式を用いることで ‘%s’ に代入されるテキストを生成する方法も示す、やや複雑な例を挙げます。

(message "He saw %d %s"
         (- fill-column 32)
         (concat "red "
                 (substring
                  "The quick brown foxes jumped." 16 21)
                 " leaping."))

この例では、message には文字列、"He saw %d %s"、式、(- fill-column 32)、および関数 concat で始まる式という3つの引数があります。(- fill-column 32) の評価結果が ‘%d’ の代わりに挿入され、concat で始まる式が返す値が ‘%s’ の代わりに挿入されます。

フィル列が70の状態で式を評価すると、エコー領域にメッセージ "He saw 38 red foxes leaping." が表示されます。


脚注

(5)

実は、%s を使って数値を出力できます。これは非限定的です。%d は数値の小数点より左側の部分のみを出力し、数値でないものは一切出力しません。