eintr: message

 
 1.8.5 The ‘message’ Function
 ----------------------------
 
 Like ‘+’, the ‘message’ function takes a variable number of arguments.
 It is used to send messages to the user and is so useful that we will
 describe it here.
 
    A message is printed in the echo area.  For example, you can print a
 message in your echo area by evaluating the following list:
 
      (message "This message appears in the echo area!")
 
    The whole string between double quotation marks is a single argument
 and is printed in toto.  (Note that in this example, the message itself
 will appear in the echo area within double quotes; that is because you
 see the value returned by the ‘message’ function.  In most uses of
 ‘message’ in programs that you write, the text will be printed in the
 echo area as a side-effect, without the quotes.  See
 ‘multiply-by-seven’ in detail multiply-by-seven in detail, for an
 example of this.)
 
    However, if there is a ‘%s’ in the quoted string of characters, the
 ‘message’ function does not print the ‘%s’ as such, but looks to the
 argument that follows the string.  It evaluates the second argument and
 prints the value at the location in the string where the ‘%s’ is.
 
    You can see this by positioning the cursor after the following
 expression and typing ‘C-x C-e’:
 
      (message "The name of this buffer is: %s." (buffer-name))
 
 In Info, ‘"The name of this buffer is: *info*."’ will appear in the echo
 area.  The function ‘buffer-name’ returns the name of the buffer as a
 string, which the ‘message’ function inserts in place of ‘%s’.
 
    To print a value as an integer, use ‘%d’ in the same way as ‘%s’.
 For example, to print a message in the echo area that states the value
 of the ‘fill-column’, evaluate the following:
 
      (message "The value of fill-column is %d." fill-column)
 
 On my system, when I evaluate this list, ‘"The value of fill-column is
 72."’ appears in my echo area(1).
 
    If there is more than one ‘%s’ in the quoted string, the value of the
 first argument following the quoted string is printed at the location of
 the first ‘%s’ and the value of the second argument is printed at the
 location of the second ‘%s’, and so on.
 
    For example, if you evaluate the following,
 
      (message "There are %d %s in the office!"
               (- fill-column 14) "pink elephants")
 
 a rather whimsical message will appear in your echo area.  On my system
 it says, ‘"There are 58 pink elephants in the office!"’.
 
    The expression ‘(- fill-column 14)’ is evaluated and the resulting
 number is inserted in place of the ‘%d’; and the string in double
 quotes, ‘"pink elephants"’, is treated as a single argument and inserted
 in place of the ‘%s’.  (That is to say, a string between double quotes
 evaluates to itself, like a number.)
 
    Finally, here is a somewhat complex example that not only illustrates
 the computation of a number, but also shows how you can use an
 expression within an expression to generate the text that is substituted
 for ‘%s’:
 
      (message "He saw %d %s"
               (- fill-column 32)
               (concat "red "
                       (substring
                        "The quick brown foxes jumped." 16 21)
                       " leaping."))
 
    In this example, ‘message’ has three arguments: the string, ‘"He saw
 %d %s"’, the expression, ‘(- fill-column 32)’, and the expression
 beginning with the function ‘concat’.  The value resulting from the
 evaluation of ‘(- fill-column 32)’ is inserted in place of the ‘%d’; and
 the value returned by the expression beginning with ‘concat’ is inserted
 in place of the ‘%s’.
 
    When your fill column is 70 and you evaluate the expression, the
 message ‘"He saw 38 red foxes leaping."’ appears in your echo area.
 
    ---------- Footnotes ----------
 
    (1) Actually, you can use ‘%s’ to print a number.  It is
 non-specific.  ‘%d’ prints only the part of a number left of a decimal
 point, and not anything that is not a number.