GNU Info

Info Node: (emacs-lisp-intro.info)Getting Buffers

(emacs-lisp-intro.info)Getting Buffers


Next: Switching Buffers Prev: Buffer Names Up: Practicing Evaluation
Enter node , (file) or (file)node

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 the expression in the usual way, `#<buffer *info*>'
appears 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.  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.


automatically generated by info2www version 1.2.2.9