eintr: Getting Buffers

 
 2.2 Getting Buffers
 ===================
 
 The ‘buffer-name’ function returns the _name_ of the buffer; to get the
 buffer _itself_, a different function is needed: the ‘current-buffer’
 function.  If you use this function in code, what you get is the buffer
 itself.
 
    A name and the object or entity to which the name refers are
 different from each other.  You are not your name.  You are a person to
 whom others refer by name.  If you ask to speak to George and someone
 hands you a card with the letters ‘G’, ‘e’, ‘o’, ‘r’, ‘g’, and ‘e’
 written on it, you might be amused, but you would not be satisfied.  You
 do not want to speak to the name, but to the person to whom the name
 refers.  A buffer is similar: the name of the scratch buffer is
 ‘*scratch*’, but the name is not the buffer.  To get a buffer itself,
 you need to use a function such as ‘current-buffer’.
 
    However, there is a slight complication: if you evaluate
 ‘current-buffer’ in an expression on its own, as we will do here, what
 you see is a printed representation of the name of the buffer without
 the contents of the buffer.  Emacs works this way for two reasons: the
 buffer may be thousands of lines long—too long to be conveniently
 displayed; and, another buffer may have the same contents but a
 different name, and it is important to distinguish between them.
 
    Here is an expression containing the function:
 
      (current-buffer)
 
 If you evaluate this expression in Info in Emacs in the usual way,
 ‘#<buffer *info*>’ will appear in the echo area.  The special format
 indicates that the buffer itself is being returned, rather than just its
 name.
 
    Incidentally, while you can type a number or symbol into a program,
 you cannot do that with the printed representation of a buffer: the only
 way to get a buffer itself is with a function such as ‘current-buffer’.
 
    A related function is ‘other-buffer’.  This returns the most recently
 selected buffer other than the one you are in currently, not a printed
 representation of its name.  If you have recently switched back and
 forth from the ‘*scratch*’ buffer, ‘other-buffer’ will return that
 buffer.
 
    You can see this by evaluating the expression:
 
      (other-buffer)
 
 You should see ‘#<buffer *scratch*>’ appear in the echo area, or the
 name of whatever other buffer you switched back from most recently(1).
 
    ---------- Footnotes ----------
 
    (1) Actually, by default, if the buffer from which you just switched
 is visible to you in another window, ‘other-buffer’ will choose the most
 recent buffer that you cannot see; this is a subtlety that I often
 forget.