annotate lispref/buffers.texi @ 80402:bc43e42e2fb4

(url-digest-auth): Changed an if so that the interaction between the PROMPT and OVERWRITE arguments can no longer result in the user being queried twice for the same login and password information.
author Chong Yidong <cyd@stupidchicken.com>
date Mon, 31 Mar 2008 22:02:24 +0000
parents f42f3002a850
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 @c -*-texinfo-*-
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 @c This is part of the GNU Emacs Lisp Reference Manual.
75250
6d19c76d81c5 Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents: 72618
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001, 2002,
79750
a1e16e813aed Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 76996
diff changeset
4 @c 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 @c See the file elisp.texi for copying conditions.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 @setfilename ../info/buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 @node Buffers, Windows, Backups and Auto-Saving, Top
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 @chapter Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 @cindex buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 A @dfn{buffer} is a Lisp object containing text to be edited. Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 are used to hold the contents of files that are being visited; there may
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
13 also be buffers that are not visiting files. While several buffers may
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
14 exist at one time, only one buffer is designated the @dfn{current
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 buffer} at any time. Most editing commands act on the contents of the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 current buffer. Each buffer, including the current buffer, may or may
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 not be displayed in any windows.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 @menu
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 * Buffer Basics:: What is a buffer?
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
21 * Current Buffer:: Designating a buffer as current
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
22 so that primitives will access its contents.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 * Buffer Names:: Accessing and changing buffer names.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 * Buffer File Name:: The buffer file name indicates which file is visited.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 * Buffer Modification:: A buffer is @dfn{modified} if it needs to be saved.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 * Modification Time:: Determining whether the visited file was changed
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ``behind Emacs's back''.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 * Read Only Buffers:: Modifying text is not allowed in a read-only buffer.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 * The Buffer List:: How to look at all the existing buffers.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 * Creating Buffers:: Functions that create buffers.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 * Killing Buffers:: Buffers exist until explicitly killed.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
32 * Indirect Buffers:: An indirect buffer shares text with some other buffer.
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
33 * Buffer Gap:: The gap in the buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 @end menu
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 @node Buffer Basics
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 @comment node-name, next, previous, up
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 @section Buffer Basics
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
40 @ifnottex
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 A @dfn{buffer} is a Lisp object containing text to be edited. Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 are used to hold the contents of files that are being visited; there may
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
43 also be buffers that are not visiting files. Although several buffers
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
44 normally exist, only one buffer is designated the @dfn{current
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 buffer} at any time. Most editing commands act on the contents of the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 current buffer. Each buffer, including the current buffer, may or may
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 not be displayed in any windows.
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
48 @end ifnottex
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
50 Buffers in Emacs editing are objects that have distinct names and hold
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
51 text that can be edited. Buffers appear to Lisp programs as a special
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
52 data type. You can think of the contents of a buffer as a string that
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
53 you can extend; insertions and deletions may occur in any part of the
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
54 buffer. @xref{Text}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 A Lisp buffer object contains numerous pieces of information. Some of
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 this information is directly accessible to the programmer through
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
58 variables, while other information is accessible only through
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 special-purpose functions. For example, the visited file name is
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 directly accessible through a variable, while the value of point is
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 accessible only through a primitive function.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 Buffer-specific information that is directly accessible is stored in
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 @dfn{buffer-local} variable bindings, which are variable values that are
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 effective only in a particular buffer. This feature allows each buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 to override the values of certain variables. Most major modes override
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 variables such as @code{fill-column} or @code{comment-column} in this
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 way. For more information about buffer-local variables and functions
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 related to them, see @ref{Buffer-Local Variables}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 For functions and variables related to visiting files in buffers, see
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 @ref{Visiting Files} and @ref{Saving Buffers}. For functions and
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 variables related to the display of buffers in windows, see
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 @ref{Buffers and Windows}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 @defun bufferp object
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 This function returns @code{t} if @var{object} is a buffer,
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 @code{nil} otherwise.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
81 @node Current Buffer
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
82 @section The Current Buffer
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
83 @cindex selecting a buffer
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
84 @cindex changing to another buffer
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
85 @cindex current buffer
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
86
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
87 There are, in general, many buffers in an Emacs session. At any time,
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
88 one of them is designated as the @dfn{current buffer}. This is the
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
89 buffer in which most editing takes place, because most of the primitives
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
90 for examining or changing text in a buffer operate implicitly on the
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
91 current buffer (@pxref{Text}). Normally the buffer that is displayed on
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
92 the screen in the selected window is the current buffer, but this is not
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
93 always so: a Lisp program can temporarily designate any buffer as
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
94 current in order to operate on its contents, without changing what is
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
95 displayed on the screen.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
96
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
97 The way to designate a current buffer in a Lisp program is by calling
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
98 @code{set-buffer}. The specified buffer remains current until a new one
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
99 is designated.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
100
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
101 When an editing command returns to the editor command loop, the
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
102 command loop designates the buffer displayed in the selected window as
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
103 current, to prevent confusion: the buffer that the cursor is in when
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
104 Emacs reads a command is the buffer that the command will apply to.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
105 (@xref{Command Loop}.) Therefore, @code{set-buffer} is not the way to
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
106 switch visibly to a different buffer so that the user can edit it. For
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
107 that, you must use the functions described in @ref{Displaying Buffers}.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
108
52626
fe75563f4d13 Avoid @strong{Note:}.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
109 @strong{Warning:} Lisp functions that change to a different current buffer
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
110 should not depend on the command loop to set it back afterwards.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
111 Editing commands written in Emacs Lisp can be called from other programs
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
112 as well as from the command loop; it is convenient for the caller if
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
113 the subroutine does not change which buffer is current (unless, of
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
114 course, that is the subroutine's purpose). Therefore, you should
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
115 normally use @code{set-buffer} within a @code{save-current-buffer} or
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
116 @code{save-excursion} (@pxref{Excursions}) form that will restore the
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
117 current buffer when your function is done. Here is an example, the
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
118 code for the command @code{append-to-buffer} (with the documentation
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
119 string abridged):
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
120
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
121 @example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
122 @group
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
123 (defun append-to-buffer (buffer start end)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
124 "Append to specified buffer the text of the region.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
125 @dots{}"
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
126 (interactive "BAppend to buffer: \nr")
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
127 (let ((oldbuf (current-buffer)))
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
128 (save-current-buffer
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
129 (set-buffer (get-buffer-create buffer))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
130 (insert-buffer-substring oldbuf start end))))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
131 @end group
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
132 @end example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
133
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
134 @noindent
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
135 This function binds a local variable to record the current buffer, and
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
136 then @code{save-current-buffer} arranges to make it current again.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
137 Next, @code{set-buffer} makes the specified buffer current. Finally,
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
138 @code{insert-buffer-substring} copies the string from the original
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
139 current buffer to the specified (and now current) buffer.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
140
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44346
diff changeset
141 If the buffer appended to happens to be displayed in some window,
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
142 the next redisplay will show how its text has changed. Otherwise, you
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
143 will not see the change immediately on the screen. The buffer becomes
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
144 current temporarily during the execution of the command, but this does
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
145 not cause it to be displayed.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
146
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
147 If you make local bindings (with @code{let} or function arguments) for
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
148 a variable that may also have buffer-local bindings, make sure that the
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
149 same buffer is current at the beginning and at the end of the local
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
150 binding's scope. Otherwise you might bind it in one buffer and unbind
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
151 it in another! There are two ways to do this. In simple cases, you may
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
152 see that nothing ever changes the current buffer within the scope of the
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
153 binding. Otherwise, use @code{save-current-buffer} or
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
154 @code{save-excursion} to make sure that the buffer current at the
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
155 beginning is current again whenever the variable is unbound.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
156
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
157 Do not rely on using @code{set-buffer} to change the current buffer
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
158 back, because that won't do the job if a quit happens while the wrong
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
159 buffer is current. Here is what @emph{not} to do:
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
160
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
161 @example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
162 @group
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
163 (let (buffer-read-only
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
164 (obuf (current-buffer)))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
165 (set-buffer @dots{})
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
166 @dots{}
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
167 (set-buffer obuf))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
168 @end group
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
169 @end example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
170
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
171 @noindent
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
172 Using @code{save-current-buffer}, as shown here, handles quitting,
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
173 errors, and @code{throw}, as well as ordinary evaluation.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
174
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
175 @example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
176 @group
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
177 (let (buffer-read-only)
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
178 (save-current-buffer
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
179 (set-buffer @dots{})
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
180 @dots{}))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
181 @end group
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
182 @end example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
183
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
184 @defun current-buffer
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
185 This function returns the current buffer.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
186
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
187 @example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
188 @group
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
189 (current-buffer)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
190 @result{} #<buffer buffers.texi>
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
191 @end group
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
192 @end example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
193 @end defun
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
194
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
195 @defun set-buffer buffer-or-name
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
196 This function makes @var{buffer-or-name} the current buffer. This does
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
197 not display the buffer in any window, so the user cannot necessarily see
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
198 the buffer. But Lisp programs will now operate on it.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
199
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
200 This function returns the buffer identified by @var{buffer-or-name}.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
201 An error is signaled if @var{buffer-or-name} does not identify an
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
202 existing buffer.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
203 @end defun
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
204
66139
50ae7c160214 (Current Buffer): Replace `...' with `@dots{}' in `@defmac' and `@defspec'.
Juri Linkov <juri@jurta.org>
parents: 65051
diff changeset
205 @defspec save-current-buffer body@dots{}
49676
5d28b76b587c (Current Buffer): Describe `save-current-buffer' as a special form, not a macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 49600
diff changeset
206 The @code{save-current-buffer} special form saves the identity of the
5d28b76b587c (Current Buffer): Describe `save-current-buffer' as a special form, not a macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 49600
diff changeset
207 current buffer, evaluates the @var{body} forms, and finally restores
5d28b76b587c (Current Buffer): Describe `save-current-buffer' as a special form, not a macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 49600
diff changeset
208 that buffer as current. The return value is the value of the last
5d28b76b587c (Current Buffer): Describe `save-current-buffer' as a special form, not a macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 49600
diff changeset
209 form in @var{body}. The current buffer is restored even in case of an
5d28b76b587c (Current Buffer): Describe `save-current-buffer' as a special form, not a macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 49600
diff changeset
210 abnormal exit via @code{throw} or error (@pxref{Nonlocal Exits}).
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
211
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
212 If the buffer that used to be current has been killed by the time of
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
213 exit from @code{save-current-buffer}, then it is not made current again,
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
214 of course. Instead, whichever buffer was current just before exit
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
215 remains current.
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
216 @end defspec
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
217
66139
50ae7c160214 (Current Buffer): Replace `...' with `@dots{}' in `@defmac' and `@defspec'.
Juri Linkov <juri@jurta.org>
parents: 65051
diff changeset
218 @defmac with-current-buffer buffer-or-name body@dots{}
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
219 The @code{with-current-buffer} macro saves the identity of the current
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
220 buffer, makes @var{buffer-or-name} current, evaluates the @var{body}
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
221 forms, and finally restores the buffer. The return value is the value
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
222 of the last form in @var{body}. The current buffer is restored even
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
223 in case of an abnormal exit via @code{throw} or error (@pxref{Nonlocal
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
224 Exits}).
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
225
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
226 An error is signaled if @var{buffer-or-name} does not identify an
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
227 existing buffer.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
228 @end defmac
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
229
66139
50ae7c160214 (Current Buffer): Replace `...' with `@dots{}' in `@defmac' and `@defspec'.
Juri Linkov <juri@jurta.org>
parents: 65051
diff changeset
230 @defmac with-temp-buffer body@dots{}
53452
24cd9ffe4b6a Add anchor.
Luc Teirlinck <teirllm@auburn.edu>
parents: 53421
diff changeset
231 @anchor{Definition of with-temp-buffer}
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
232 The @code{with-temp-buffer} macro evaluates the @var{body} forms
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
233 with a temporary buffer as the current buffer. It saves the identity of
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
234 the current buffer, creates a temporary buffer and makes it current,
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
235 evaluates the @var{body} forms, and finally restores the previous
70642
3204a9fa48e4 (Current Buffer): Document that with-temp-buffer disables undo.
Eli Zaretskii <eliz@gnu.org>
parents: 70627
diff changeset
236 current buffer while killing the temporary buffer. By default, undo
3204a9fa48e4 (Current Buffer): Document that with-temp-buffer disables undo.
Eli Zaretskii <eliz@gnu.org>
parents: 70627
diff changeset
237 information (@pxref{Undo}) is not recorded in the buffer created by
3204a9fa48e4 (Current Buffer): Document that with-temp-buffer disables undo.
Eli Zaretskii <eliz@gnu.org>
parents: 70627
diff changeset
238 this macro (but @var{body} can enable that, if needed).
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
239
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
240 The return value is the value of the last form in @var{body}. You can
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
241 return the contents of the temporary buffer by using
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
242 @code{(buffer-string)} as the last form.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
243
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
244 The current buffer is restored even in case of an abnormal exit via
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
245 @code{throw} or error (@pxref{Nonlocal Exits}).
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
246
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
247 See also @code{with-temp-file} in @ref{Definition of with-temp-file,,
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
248 Writing to Files}.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
249 @end defmac
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
250
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 @node Buffer Names
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 @section Buffer Names
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 @cindex buffer names
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 Each buffer has a unique name, which is a string. Many of the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 functions that work on buffers accept either a buffer or a buffer name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 as an argument. Any argument called @var{buffer-or-name} is of this
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 sort, and an error is signaled if it is neither a string nor a buffer.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 Any argument called @var{buffer} must be an actual buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 object, not a name.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261
70627
61cffb1025d1 (Buffer Names): Add index entries for buffers whose names begin with a space.
Eli Zaretskii <eliz@gnu.org>
parents: 68648
diff changeset
262 @cindex hidden buffers
61cffb1025d1 (Buffer Names): Add index entries for buffers whose names begin with a space.
Eli Zaretskii <eliz@gnu.org>
parents: 68648
diff changeset
263 @cindex buffers without undo information
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 Buffers that are ephemeral and generally uninteresting to the user
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
265 have names starting with a space, so that the @code{list-buffers} and
40492
93b1df487abe (Buffer Names): Buffers whose names start with a space, but which visit
Eli Zaretskii <eliz@gnu.org>
parents: 39403
diff changeset
266 @code{buffer-menu} commands don't mention them (but if such a buffer
93b1df487abe (Buffer Names): Buffers whose names start with a space, but which visit
Eli Zaretskii <eliz@gnu.org>
parents: 39403
diff changeset
267 visits a file, it @strong{is} mentioned). A name starting with
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 space also initially disables recording undo information; see
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 @ref{Undo}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 @defun buffer-name &optional buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 This function returns the name of @var{buffer} as a string. If
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 @var{buffer} is not supplied, it defaults to the current buffer.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 If @code{buffer-name} returns @code{nil}, it means that @var{buffer}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 has been killed. @xref{Killing Buffers}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 (buffer-name)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 @result{} "buffers.texi"
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 (setq foo (get-buffer "temp"))
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 @result{} #<buffer temp>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (kill-buffer foo)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 @result{} nil
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 (buffer-name foo)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 @result{} nil
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 foo
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 @result{} #<killed buffer>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 @deffn Command rename-buffer newname &optional unique
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 This function renames the current buffer to @var{newname}. An error
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
305 is signaled if @var{newname} is not a string.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 @c Emacs 19 feature
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 Ordinarily, @code{rename-buffer} signals an error if @var{newname} is
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 already in use. However, if @var{unique} is non-@code{nil}, it modifies
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 @var{newname} to make a name that is not in use. Interactively, you can
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 make @var{unique} non-@code{nil} with a numeric prefix argument.
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
312 (This is how the command @code{rename-uniquely} is implemented.)
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
313
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
314 This function returns the name actually given to the buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 @end deffn
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 @defun get-buffer buffer-or-name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 This function returns the buffer specified by @var{buffer-or-name}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 If @var{buffer-or-name} is a string and there is no buffer with that
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 name, the value is @code{nil}. If @var{buffer-or-name} is a buffer, it
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44346
diff changeset
321 is returned as given; that is not very useful, so the argument is usually
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
322 a name. For example:
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 (setq b (get-buffer "lewis"))
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 @result{} #<buffer lewis>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 (get-buffer b)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 @result{} #<buffer lewis>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 (get-buffer "Frazzle-nots")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 @result{} nil
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 See also the function @code{get-buffer-create} in @ref{Creating Buffers}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 @c Emacs 19 feature
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
343 @defun generate-new-buffer-name starting-name &optional ignore
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 This function returns a name that would be unique for a new buffer---but
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 does not create the buffer. It starts with @var{starting-name}, and
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 produces a name not currently in use for any buffer by appending a
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
347 number inside of @samp{<@dots{}>}. It starts at 2 and keeps
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
348 incrementing the number until it is not the name of an existing buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349
26239
62de8a433d0e Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25950
diff changeset
350 If the optional second argument @var{ignore} is non-@code{nil}, it
59874
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
351 should be a string, a potential buffer name. It means to consider
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
352 that potential buffer acceptable, if it is tried, even it is the name
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
353 of an existing buffer (which would normally be rejected). Thus, if
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
354 buffers named @samp{foo}, @samp{foo<2>}, @samp{foo<3>} and
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
355 @samp{foo<4>} exist,
27301
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
356
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
357 @example
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
358 (generate-new-buffer-name "foo")
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
359 @result{} "foo<5>"
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
360 (generate-new-buffer-name "foo" "foo<3>")
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
361 @result{} "foo<3>"
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
362 (generate-new-buffer-name "foo" "foo<6>")
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
363 @result{} "foo<5>"
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
364 @end example
26239
62de8a433d0e Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25950
diff changeset
365
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 See the related function @code{generate-new-buffer} in @ref{Creating
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 Buffers}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 @node Buffer File Name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 @section Buffer File Name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 @cindex visited file
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 @cindex buffer file name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 @cindex file name of buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 The @dfn{buffer file name} is the name of the file that is visited in
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 that buffer. When a buffer is not visiting a file, its buffer file name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 is @code{nil}. Most of the time, the buffer name is the same as the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 nondirectory part of the buffer file name, but the buffer file name and
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 the buffer name are distinct and can be set independently.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 @xref{Visiting Files}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 @defun buffer-file-name &optional buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 This function returns the absolute file name of the file that
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 @var{buffer} is visiting. If @var{buffer} is not visiting any file,
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 @code{buffer-file-name} returns @code{nil}. If @var{buffer} is not
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 supplied, it defaults to the current buffer.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 (buffer-file-name (other-buffer))
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 @result{} "/usr/user/lewis/manual/files.texi"
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 @defvar buffer-file-name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 This buffer-local variable contains the name of the file being visited
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 in the current buffer, or @code{nil} if it is not visiting a file. It
25950
7996385fc601 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25751
diff changeset
400 is a permanent local variable, unaffected by
7996385fc601 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25751
diff changeset
401 @code{kill-all-local-variables}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 buffer-file-name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 @result{} "/usr/user/lewis/manual/buffers.texi"
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 It is risky to change this variable's value without doing various other
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
411 things. Normally it is better to use @code{set-visited-file-name} (see
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
412 below); some of the things done there, such as changing the buffer name,
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
413 are not strictly necessary, but others are essential to avoid confusing
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
414 Emacs.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 @end defvar
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 @defvar buffer-file-truename
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
418 This buffer-local variable holds the abbreviated truename of the file
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
419 visited in the current buffer, or @code{nil} if no file is visited.
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
420 It is a permanent local, unaffected by
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
421 @code{kill-all-local-variables}. @xref{Truenames}, and
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
422 @ref{Definition of abbreviate-file-name}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 @end defvar
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 @defvar buffer-file-number
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 This buffer-local variable holds the file number and directory device
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 number of the file visited in the current buffer, or @code{nil} if no
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 file or a nonexistent file is visited. It is a permanent local,
25950
7996385fc601 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25751
diff changeset
429 unaffected by @code{kill-all-local-variables}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 The value is normally a list of the form @code{(@var{filenum}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 @var{devnum})}. This pair of numbers uniquely identifies the file among
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 all files accessible on the system. See the function
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 @code{file-attributes}, in @ref{File Attributes}, for more information
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 about them.
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
436
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
437 If @code{buffer-file-name} is the name of a symbolic link, then both
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
438 numbers refer to the recursive target.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 @end defvar
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 @defun get-file-buffer filename
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 This function returns the buffer visiting file @var{filename}. If
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 there is no such buffer, it returns @code{nil}. The argument
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 @var{filename}, which must be a string, is expanded (@pxref{File Name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 Expansion}), then compared against the visited file names of all live
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
446 buffers. Note that the buffer's @code{buffer-file-name} must match
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
447 the expansion of @var{filename} exactly. This function will not
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
448 recognize other names for the same file.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 (get-file-buffer "buffers.texi")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 @result{} #<buffer buffers.texi>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 In unusual circumstances, there can be more than one buffer visiting
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 the same file name. In such cases, this function returns the first
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 such buffer in the buffer list.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
462 @defun find-buffer-visiting filename &optional predicate
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
463 This is like @code{get-file-buffer}, except that it can return any
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
464 buffer visiting the file @emph{possibly under a different name}. That
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
465 is, the buffer's @code{buffer-file-name} does not need to match the
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
466 expansion of @var{filename} exactly, it only needs to refer to the
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
467 same file. If @var{predicate} is non-@code{nil}, it should be a
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
468 function of one argument, a buffer visiting @var{filename}. The
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
469 buffer is only considered a suitable return value if @var{predicate}
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
470 returns non-@code{nil}. If it can not find a suitable buffer to
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
471 return, @code{find-buffer-visiting} returns @code{nil}.
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
472 @end defun
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
473
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
474 @deffn Command set-visited-file-name filename &optional no-query along-with-file
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 If @var{filename} is a non-empty string, this function changes the
26239
62de8a433d0e Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25950
diff changeset
476 name of the file visited in the current buffer to @var{filename}. (If the
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 buffer had no visited file, this gives it one.) The @emph{next time}
52137
3c3abdef580e (Buffer File Name): set-visited-file-name renames the buffer too.
Richard M. Stallman <rms@gnu.org>
parents: 51925
diff changeset
478 the buffer is saved it will go in the newly-specified file.
3c3abdef580e (Buffer File Name): set-visited-file-name renames the buffer too.
Richard M. Stallman <rms@gnu.org>
parents: 51925
diff changeset
479
3c3abdef580e (Buffer File Name): set-visited-file-name renames the buffer too.
Richard M. Stallman <rms@gnu.org>
parents: 51925
diff changeset
480 This command marks the buffer as modified, since it does not (as far
3c3abdef580e (Buffer File Name): set-visited-file-name renames the buffer too.
Richard M. Stallman <rms@gnu.org>
parents: 51925
diff changeset
481 as Emacs knows) match the contents of @var{filename}, even if it
3c3abdef580e (Buffer File Name): set-visited-file-name renames the buffer too.
Richard M. Stallman <rms@gnu.org>
parents: 51925
diff changeset
482 matched the former visited file. It also renames the buffer to
3c3abdef580e (Buffer File Name): set-visited-file-name renames the buffer too.
Richard M. Stallman <rms@gnu.org>
parents: 51925
diff changeset
483 correspond to the new file name, unless the new name is already in
3c3abdef580e (Buffer File Name): set-visited-file-name renames the buffer too.
Richard M. Stallman <rms@gnu.org>
parents: 51925
diff changeset
484 use.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 If @var{filename} is @code{nil} or the empty string, that stands for
71957
61cb5aae3bc3 Put period and comma inside quotes.
Richard M. Stallman <rms@gnu.org>
parents: 70659
diff changeset
487 ``no visited file.'' In this case, @code{set-visited-file-name} marks
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
488 the buffer as having no visited file, without changing the buffer's
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
489 modified flag.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
491 Normally, this function asks the user for confirmation if there
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
492 already is a buffer visiting @var{filename}. If @var{no-query} is
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
493 non-@code{nil}, that prevents asking this question. If there already
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
494 is a buffer visiting @var{filename}, and the user confirms or
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
495 @var{query} is non-@code{nil}, this function makes the new buffer name
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
496 unique by appending a number inside of @samp{<@dots{}>} to @var{filename}.
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
497
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
498 If @var{along-with-file} is non-@code{nil}, that means to assume that
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
499 the former visited file has been renamed to @var{filename}. In this
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
500 case, the command does not change the buffer's modified flag, nor the
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
501 buffer's recorded last file modification time as reported by
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
502 @code{visited-file-modtime} (@pxref{Modification Time}). If
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
503 @var{along-with-file} is @code{nil}, this function clears the recorded
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
504 last file modification time, after which @code{visited-file-modtime}
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
505 returns zero.
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
506
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 @c Wordy to avoid overfull hbox. --rjc 16mar92
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 When the function @code{set-visited-file-name} is called interactively, it
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 prompts for @var{filename} in the minibuffer.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 @end deffn
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 @defvar list-buffers-directory
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
513 This buffer-local variable specifies a string to display in a buffer
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
514 listing where the visited file name would go, for buffers that don't
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
515 have a visited file name. Dired buffers use this variable.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 @end defvar
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 @node Buffer Modification
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 @section Buffer Modification
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 @cindex buffer modification
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 @cindex modification flag (of buffer)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 Emacs keeps a flag called the @dfn{modified flag} for each buffer, to
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 record whether you have changed the text of the buffer. This flag is
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 set to @code{t} whenever you alter the contents of the buffer, and
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 cleared to @code{nil} when you save it. Thus, the flag shows whether
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 there are unsaved changes. The flag value is normally shown in the mode
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 line (@pxref{Mode Line Variables}), and controls saving (@pxref{Saving
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 Buffers}) and auto-saving (@pxref{Auto-Saving}).
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 Some Lisp programs set the flag explicitly. For example, the function
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 @code{set-visited-file-name} sets the flag to @code{t}, because the text
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 does not match the newly-visited file, even if it is unchanged from the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 file formerly visited.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 The functions that modify the contents of buffers are described in
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 @ref{Text}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 @defun buffer-modified-p &optional buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 This function returns @code{t} if the buffer @var{buffer} has been modified
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 since it was last read in from a file or saved, or @code{nil}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 otherwise. If @var{buffer} is not supplied, the current buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 is tested.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 @defun set-buffer-modified-p flag
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 This function marks the current buffer as modified if @var{flag} is
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 non-@code{nil}, or as unmodified if the flag is @code{nil}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 Another effect of calling this function is to cause unconditional
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 redisplay of the mode line for the current buffer. In fact, the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 function @code{force-mode-line-update} works by doing this:
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 (set-buffer-modified-p (buffer-modified-p))
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560
53421
36960c89c04c (Buffer Modification): Add restore-buffer-modified-p.
Richard M. Stallman <rms@gnu.org>
parents: 52626
diff changeset
561 @defun restore-buffer-modified-p flag
36960c89c04c (Buffer Modification): Add restore-buffer-modified-p.
Richard M. Stallman <rms@gnu.org>
parents: 52626
diff changeset
562 Like @code{set-buffer-modified-p}, but does not force redisplay
36960c89c04c (Buffer Modification): Add restore-buffer-modified-p.
Richard M. Stallman <rms@gnu.org>
parents: 52626
diff changeset
563 of mode lines.
36960c89c04c (Buffer Modification): Add restore-buffer-modified-p.
Richard M. Stallman <rms@gnu.org>
parents: 52626
diff changeset
564 @end defun
36960c89c04c (Buffer Modification): Add restore-buffer-modified-p.
Richard M. Stallman <rms@gnu.org>
parents: 52626
diff changeset
565
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
566 @deffn Command not-modified &optional arg
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
567 This command marks the current buffer as unmodified, and not needing
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
568 to be saved. If @var{arg} is non-@code{nil}, it marks the buffer as
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
569 modified, so that it will be saved at the next suitable occasion.
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
570 Interactively, @var{arg} is the prefix argument.
13229
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
571
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
572 Don't use this function in programs, since it prints a message in the
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
573 echo area; use @code{set-buffer-modified-p} (above) instead.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 @end deffn
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 @defun buffer-modified-tick &optional buffer
13229
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
577 This function returns @var{buffer}'s modification-count. This is a
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 counter that increments every time the buffer is modified. If
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 @var{buffer} is @code{nil} (or omitted), the current buffer is used.
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
580 The counter can wrap around occasionally.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582
72598
070fe1ef3250 * buffers.texi (Buffer Modification): Document
Chong Yidong <cyd@stupidchicken.com>
parents: 71957
diff changeset
583 @defun buffer-chars-modified-tick &optional buffer
070fe1ef3250 * buffers.texi (Buffer Modification): Document
Chong Yidong <cyd@stupidchicken.com>
parents: 71957
diff changeset
584 This function returns @var{buffer}'s character-change modification-count.
070fe1ef3250 * buffers.texi (Buffer Modification): Document
Chong Yidong <cyd@stupidchicken.com>
parents: 71957
diff changeset
585 Changes to text properties leave this counter unchanged; however, each
070fe1ef3250 * buffers.texi (Buffer Modification): Document
Chong Yidong <cyd@stupidchicken.com>
parents: 71957
diff changeset
586 time text is inserted or removed from the buffer, the counter is reset
79886
f42f3002a850 (Buffer Modification): Fix typo.
Martin Rudalics <rudalics@gmx.at>
parents: 79750
diff changeset
587 to the value that would be returned by @code{buffer-modified-tick}.
72598
070fe1ef3250 * buffers.texi (Buffer Modification): Document
Chong Yidong <cyd@stupidchicken.com>
parents: 71957
diff changeset
588 By comparing the values returned by two @code{buffer-chars-modified-tick}
070fe1ef3250 * buffers.texi (Buffer Modification): Document
Chong Yidong <cyd@stupidchicken.com>
parents: 71957
diff changeset
589 calls, you can tell whether a character change occurred in that buffer
070fe1ef3250 * buffers.texi (Buffer Modification): Document
Chong Yidong <cyd@stupidchicken.com>
parents: 71957
diff changeset
590 in between the calls. If @var{buffer} is @code{nil} (or omitted), the
070fe1ef3250 * buffers.texi (Buffer Modification): Document
Chong Yidong <cyd@stupidchicken.com>
parents: 71957
diff changeset
591 current buffer is used.
070fe1ef3250 * buffers.texi (Buffer Modification): Document
Chong Yidong <cyd@stupidchicken.com>
parents: 71957
diff changeset
592 @end defun
070fe1ef3250 * buffers.texi (Buffer Modification): Document
Chong Yidong <cyd@stupidchicken.com>
parents: 71957
diff changeset
593
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 @node Modification Time
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 @comment node-name, next, previous, up
76996
019484d911e6 Improve index entries.
Richard M. Stallman <rms@gnu.org>
parents: 75250
diff changeset
596 @section Buffer Modification Time
019484d911e6 Improve index entries.
Richard M. Stallman <rms@gnu.org>
parents: 75250
diff changeset
597 @cindex comparing file modification time
019484d911e6 Improve index entries.
Richard M. Stallman <rms@gnu.org>
parents: 75250
diff changeset
598 @cindex modification time of buffer
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 Suppose that you visit a file and make changes in its buffer, and
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 meanwhile the file itself is changed on disk. At this point, saving the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 buffer would overwrite the changes in the file. Occasionally this may
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 be what you want, but usually it would lose valuable information. Emacs
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 therefore checks the file's modification time using the functions
76996
019484d911e6 Improve index entries.
Richard M. Stallman <rms@gnu.org>
parents: 75250
diff changeset
605 described below before saving the file. (@xref{File Attributes},
019484d911e6 Improve index entries.
Richard M. Stallman <rms@gnu.org>
parents: 75250
diff changeset
606 for how to examine a file's modification time.)
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 @defun verify-visited-file-modtime buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 This function compares what @var{buffer} has recorded for the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 modification time of its visited file against the actual modification
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 time of the file as recorded by the operating system. The two should be
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 the same unless some other process has written the file since Emacs
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 visited or saved it.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 The function returns @code{t} if the last actual modification time and
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 Emacs's recorded modification time are the same, @code{nil} otherwise.
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
617 It also returns @code{t} if the buffer has no recorded last
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
618 modification time, that is if @code{visited-file-modtime} would return
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
619 zero.
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
620
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
621 It always returns @code{t} for buffers that are not visiting a file,
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
622 even if @code{visited-file-modtime} returns a non-zero value. For
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
623 instance, it always returns @code{t} for dired buffers. It returns
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
624 @code{t} for buffers that are visiting a file that does not exist and
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
625 never existed, but @code{nil} for file-visiting buffers whose file has
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
626 been deleted.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 @defun clear-visited-file-modtime
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 This function clears out the record of the last modification time of
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 the file being visited by the current buffer. As a result, the next
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 attempt to save this buffer will not complain of a discrepancy in
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 file modification times.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 This function is called in @code{set-visited-file-name} and other
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 exceptional places where the usual test to avoid overwriting a changed
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 file should not be done.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 @c Emacs 19 feature
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 @defun visited-file-modtime
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
642 This function returns the current buffer's recorded last file
56427
55836d23d2c9 (Modification Time): `visited-file-modtime' now
Luc Teirlinck <teirllm@auburn.edu>
parents: 56215
diff changeset
643 modification time, as a list of the form @code{(@var{high} @var{low})}.
55836d23d2c9 (Modification Time): `visited-file-modtime' now
Luc Teirlinck <teirllm@auburn.edu>
parents: 56215
diff changeset
644 (This is the same format that @code{file-attributes} uses to return
55836d23d2c9 (Modification Time): `visited-file-modtime' now
Luc Teirlinck <teirllm@auburn.edu>
parents: 56215
diff changeset
645 time values; see @ref{File Attributes}.)
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
646
59874
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
647 If the buffer has no recorded last modification time, this function
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
648 returns zero. This case occurs, for instance, if the buffer is not
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
649 visiting a file or if the time has been explicitly cleared by
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
650 @code{clear-visited-file-modtime}. Note, however, that
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
651 @code{visited-file-modtime} returns a list for some non-file buffers
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
652 too. For instance, in a Dired buffer listing a directory, it returns
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
653 the last modification time of that directory, as recorded by Dired.
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
654
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
655 For a new buffer visiting a not yet existing file, @var{high} is
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
656 @minus{}1 and @var{low} is 65535, that is,
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
657 @ifnottex
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
658 @w{2**16 - 1.}
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
659 @end ifnottex
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
660 @tex
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
661 @math{2^{16}-1}.
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
662 @end tex
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 @c Emacs 19 feature
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 @defun set-visited-file-modtime &optional time
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 This function updates the buffer's record of the last modification time
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 of the visited file, to the value specified by @var{time} if @var{time}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 is not @code{nil}, and otherwise to the last modification time of the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 visited file.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
672 If @var{time} is neither @code{nil} nor zero, it should have the form
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 @code{(@var{high} . @var{low})} or @code{(@var{high} @var{low})}, in
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 either case containing two integers, each of which holds 16 bits of the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 time.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 This function is useful if the buffer was not read from the file
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 normally, or if the file itself has been changed for some known benign
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 reason.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
682 @defun ask-user-about-supersession-threat filename
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 This function is used to ask a user how to proceed after an attempt to
76996
019484d911e6 Improve index entries.
Richard M. Stallman <rms@gnu.org>
parents: 75250
diff changeset
684 modify an buffer visiting file @var{filename} when the file is newer
019484d911e6 Improve index entries.
Richard M. Stallman <rms@gnu.org>
parents: 75250
diff changeset
685 than the buffer text. Emacs detects this because the modification
019484d911e6 Improve index entries.
Richard M. Stallman <rms@gnu.org>
parents: 75250
diff changeset
686 time of the file on disk is newer than the last save-time of the
019484d911e6 Improve index entries.
Richard M. Stallman <rms@gnu.org>
parents: 75250
diff changeset
687 buffer. This means some other program has probably altered the file.
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
688
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
689 @kindex file-supersession
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
690 Depending on the user's answer, the function may return normally, in
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
691 which case the modification of the buffer proceeds, or it may signal a
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
692 @code{file-supersession} error with data @code{(@var{filename})}, in which
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44346
diff changeset
693 case the proposed buffer modification is not allowed.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 This function is called automatically by Emacs on the proper
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 occasions. It exists so you can customize Emacs by redefining it.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 See the file @file{userlock.el} for the standard definition.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 See also the file locking mechanism in @ref{File Locks}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 @node Read Only Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 @section Read-Only Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 @cindex read-only buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 @cindex buffer, read-only
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 If a buffer is @dfn{read-only}, then you cannot change its contents,
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44346
diff changeset
708 although you may change your view of the contents by scrolling and
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 narrowing.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 Read-only buffers are used in two kinds of situations:
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 @itemize @bullet
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 @item
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 A buffer visiting a write-protected file is normally read-only.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
717 Here, the purpose is to inform the user that editing the buffer with the
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 aim of saving it in the file may be futile or undesirable. The user who
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 wants to change the buffer text despite this can do so after clearing
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
720 the read-only flag with @kbd{C-x C-q}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 @item
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 Modes such as Dired and Rmail make buffers read-only when altering the
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
724 contents with the usual editing commands would probably be a mistake.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 The special commands of these modes bind @code{buffer-read-only} to
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 @code{nil} (with @code{let}) or bind @code{inhibit-read-only} to
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
728 @code{t} around the places where they themselves change the text.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 @end itemize
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 @defvar buffer-read-only
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 This buffer-local variable specifies whether the buffer is read-only.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 The buffer is read-only if this variable is non-@code{nil}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 @end defvar
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 @defvar inhibit-read-only
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
737 If this variable is non-@code{nil}, then read-only buffers and,
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
738 depending on the actual value, some or all read-only characters may be
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
739 modified. Read-only characters in a buffer are those that have
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
740 non-@code{nil} @code{read-only} properties (either text properties or
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
741 overlay properties). @xref{Special Properties}, for more information
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
742 about text properties. @xref{Overlays}, for more information about
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
743 overlays and their properties.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
745 If @code{inhibit-read-only} is @code{t}, all @code{read-only} character
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
746 properties have no effect. If @code{inhibit-read-only} is a list, then
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
747 @code{read-only} character properties have no effect if they are members
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
748 of the list (comparison is done with @code{eq}).
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 @end defvar
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750
54893
07ceecd3e471 (Read Only Buffers): Mention optional ARG to `toggle-read-only'.
Luc Teirlinck <teirllm@auburn.edu>
parents: 54862
diff changeset
751 @deffn Command toggle-read-only &optional arg
07ceecd3e471 (Read Only Buffers): Mention optional ARG to `toggle-read-only'.
Luc Teirlinck <teirllm@auburn.edu>
parents: 54862
diff changeset
752 This command toggles whether the current buffer is read-only. It is
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
753 intended for interactive use; do not use it in programs. At any given
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 point in a program, you should know whether you want the read-only flag
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 on or off; so you can set @code{buffer-read-only} explicitly to the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 proper value, @code{t} or @code{nil}.
54893
07ceecd3e471 (Read Only Buffers): Mention optional ARG to `toggle-read-only'.
Luc Teirlinck <teirllm@auburn.edu>
parents: 54862
diff changeset
757
07ceecd3e471 (Read Only Buffers): Mention optional ARG to `toggle-read-only'.
Luc Teirlinck <teirllm@auburn.edu>
parents: 54862
diff changeset
758 If @var{arg} is non-@code{nil}, it should be a raw prefix argument.
07ceecd3e471 (Read Only Buffers): Mention optional ARG to `toggle-read-only'.
Luc Teirlinck <teirllm@auburn.edu>
parents: 54862
diff changeset
759 @code{toggle-read-only} sets @code{buffer-read-only} to @code{t} if
07ceecd3e471 (Read Only Buffers): Mention optional ARG to `toggle-read-only'.
Luc Teirlinck <teirllm@auburn.edu>
parents: 54862
diff changeset
760 the numeric value of that prefix argument is positive and to
07ceecd3e471 (Read Only Buffers): Mention optional ARG to `toggle-read-only'.
Luc Teirlinck <teirllm@auburn.edu>
parents: 54862
diff changeset
761 @code{nil} otherwise. @xref{Prefix Command Arguments}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 @end deffn
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 @defun barf-if-buffer-read-only
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 This function signals a @code{buffer-read-only} error if the current
54019
1ba2429172a9 Adjust xref.
Richard M. Stallman <rms@gnu.org>
parents: 53452
diff changeset
766 buffer is read-only. @xref{Using Interactive}, for another way to
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 signal an error if the current buffer is read-only.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770 @node The Buffer List
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 @section The Buffer List
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 @cindex buffer list
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773
65051
a1cc73fd8161 (The Buffer List): Clarify the manipulation of the buffer list.
Eli Zaretskii <eliz@gnu.org>
parents: 64889
diff changeset
774 The @dfn{buffer list} is a list of all live buffers. The order of
a1cc73fd8161 (The Buffer List): Clarify the manipulation of the buffer list.
Eli Zaretskii <eliz@gnu.org>
parents: 64889
diff changeset
775 the buffers in the list is based primarily on how recently each buffer
a1cc73fd8161 (The Buffer List): Clarify the manipulation of the buffer list.
Eli Zaretskii <eliz@gnu.org>
parents: 64889
diff changeset
776 has been displayed in a window. Several functions, notably
a1cc73fd8161 (The Buffer List): Clarify the manipulation of the buffer list.
Eli Zaretskii <eliz@gnu.org>
parents: 64889
diff changeset
777 @code{other-buffer}, use this ordering. A buffer list displayed for
a1cc73fd8161 (The Buffer List): Clarify the manipulation of the buffer list.
Eli Zaretskii <eliz@gnu.org>
parents: 64889
diff changeset
778 the user also follows this order.
a1cc73fd8161 (The Buffer List): Clarify the manipulation of the buffer list.
Eli Zaretskii <eliz@gnu.org>
parents: 64889
diff changeset
779
a1cc73fd8161 (The Buffer List): Clarify the manipulation of the buffer list.
Eli Zaretskii <eliz@gnu.org>
parents: 64889
diff changeset
780 Creating a buffer adds it to the end of the buffer list, and killing
a1cc73fd8161 (The Buffer List): Clarify the manipulation of the buffer list.
Eli Zaretskii <eliz@gnu.org>
parents: 64889
diff changeset
781 a buffer removes it. Buffers move to the front of the list when they
a1cc73fd8161 (The Buffer List): Clarify the manipulation of the buffer list.
Eli Zaretskii <eliz@gnu.org>
parents: 64889
diff changeset
782 are selected for display in a window (@pxref{Displaying Buffers}), and
50466
e4180f608731 Clarify when buffer list is reordered.
Richard M. Stallman <rms@gnu.org>
parents: 49676
diff changeset
783 to the end when they are buried (see @code{bury-buffer}, below).
65051
a1cc73fd8161 (The Buffer List): Clarify the manipulation of the buffer list.
Eli Zaretskii <eliz@gnu.org>
parents: 64889
diff changeset
784 There are no functions available to the Lisp programmer which directly
a1cc73fd8161 (The Buffer List): Clarify the manipulation of the buffer list.
Eli Zaretskii <eliz@gnu.org>
parents: 64889
diff changeset
785 manipulate the buffer list.
79886
f42f3002a850 (Buffer Modification): Fix typo.
Martin Rudalics <rudalics@gmx.at>
parents: 79750
diff changeset
786
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
787 In addition to the fundamental Emacs buffer list, each frame has its
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
788 own version of the buffer list, in which the buffers that have been
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
789 selected in that frame come first, starting with the buffers most
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
790 recently selected @emph{in that frame}. (This order is recorded in
64880
5953197750ce (The Buffer List): Fix xrefs.
Richard M. Stallman <rms@gnu.org>
parents: 61596
diff changeset
791 @var{frame}'s @code{buffer-list} frame parameter; see @ref{Buffer
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
792 Parameters}.) The buffers that were never selected in @var{frame} come
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
793 afterward, ordered according to the fundamental Emacs buffer list.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
794
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
795 @defun buffer-list &optional frame
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
796 This function returns the buffer list, including all buffers, even those
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
797 whose names begin with a space. The elements are actual buffers, not
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
798 their names.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
799
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
800 If @var{frame} is a frame, this returns @var{frame}'s buffer list. If
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
801 @var{frame} is @code{nil}, the fundamental Emacs buffer list is used:
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
802 all the buffers appear in order of most recent selection, regardless of
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
803 which frames they were selected in.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
804
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 (buffer-list)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 @result{} (#<buffer buffers.texi>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 #<buffer *Minibuf-1*> #<buffer buffer.c>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 #<buffer *Help*> #<buffer TAGS>)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814 ;; @r{Note that the name of the minibuffer}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 ;; @r{begins with a space!}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 (mapcar (function buffer-name) (buffer-list))
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44346
diff changeset
817 @result{} ("buffers.texi" " *Minibuf-1*"
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 "buffer.c" "*Help*" "TAGS")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 @end example
15862
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
821 @end defun
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822
15862
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
823 The list that @code{buffer-list} returns is constructed specifically
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
824 by @code{buffer-list}; it is not an internal Emacs data structure, and
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
825 modifying it has no effect on the order of buffers. If you want to
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
826 change the order of buffers in the frame-independent buffer list, here
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
827 is an easy way:
15862
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
828
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
829 @example
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
830 (defun reorder-buffer-list (new-list)
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
831 (while new-list
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
832 (bury-buffer (car new-list))
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
833 (setq new-list (cdr new-list))))
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
834 @end example
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
835
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
836 With this method, you can specify any order for the list, but there is
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
837 no danger of losing a buffer or adding something that is not a valid
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
838 live buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
840 To change the order or value of a frame's buffer list, set the frame's
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
841 @code{buffer-list} frame parameter with @code{modify-frame-parameters}
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
842 (@pxref{Parameter Access}).
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
843
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
844 @defun other-buffer &optional buffer visible-ok frame
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 This function returns the first buffer in the buffer list other than
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
846 @var{buffer}. Usually this is the buffer selected most recently (in
39403
f242022750ee (The Buffer List): Add cross-references to the definition of selected frame.
Eli Zaretskii <eliz@gnu.org>
parents: 27301
diff changeset
847 frame @var{frame} or else the currently selected frame, @pxref{Input
f242022750ee (The Buffer List): Add cross-references to the definition of selected frame.
Eli Zaretskii <eliz@gnu.org>
parents: 27301
diff changeset
848 Focus}), aside from @var{buffer}. Buffers whose names start with a
f242022750ee (The Buffer List): Add cross-references to the definition of selected frame.
Eli Zaretskii <eliz@gnu.org>
parents: 27301
diff changeset
849 space are not considered at all.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850
13247
750f4d22537f Arg of other-buffer can't be a buffer name.
Richard M. Stallman <rms@gnu.org>
parents: 13229
diff changeset
851 If @var{buffer} is not supplied (or if it is not a buffer), then
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
852 @code{other-buffer} returns the first buffer in the selected frame's
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
853 buffer list that is not now visible in any window in a visible frame.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
855 If @var{frame} has a non-@code{nil} @code{buffer-predicate} parameter,
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
856 then @code{other-buffer} uses that predicate to decide which buffers to
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
857 consider. It calls the predicate once for each buffer, and if the value
64880
5953197750ce (The Buffer List): Fix xrefs.
Richard M. Stallman <rms@gnu.org>
parents: 61596
diff changeset
858 is @code{nil}, that buffer is ignored. @xref{Buffer Parameters}.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
859
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 @c Emacs 19 feature
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 If @var{visible-ok} is @code{nil}, @code{other-buffer} avoids returning
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 a buffer visible in any window on any visible frame, except as a last
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 resort. If @var{visible-ok} is non-@code{nil}, then it does not matter
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 whether a buffer is displayed somewhere or not.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 If no suitable buffer exists, the buffer @samp{*scratch*} is returned
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 (and created, if necessary).
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 @deffn Command bury-buffer &optional buffer-or-name
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
871 This function puts @var{buffer-or-name} at the end of the buffer list,
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 without changing the order of any of the other buffers on the list.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 This buffer therefore becomes the least desirable candidate for
59874
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
874 @code{other-buffer} to return. The argument can be either a buffer
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
875 itself or the name of one.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
877 @code{bury-buffer} operates on each frame's @code{buffer-list} parameter
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
878 as well as the frame-independent Emacs buffer list; therefore, the
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
879 buffer that you bury will come last in the value of @code{(buffer-list
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
880 @var{frame})} and in the value of @code{(buffer-list nil)}.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
881
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
882 If @var{buffer-or-name} is @code{nil} or omitted, this means to bury the
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
883 current buffer. In addition, if the buffer is displayed in the selected
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
884 window, this switches to some other buffer (obtained using
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
885 @code{other-buffer}) in the selected window. But if the buffer is
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
886 displayed in some other window, it remains displayed there.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
888 To replace a buffer in all the windows that display it, use
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 @code{replace-buffer-in-windows}. @xref{Buffers and Windows}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 @end deffn
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892 @node Creating Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 @section Creating Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 @cindex creating buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 @cindex buffers, creating
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 This section describes the two primitives for creating buffers.
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
898 @code{get-buffer-create} creates a buffer if it finds no existing buffer
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
899 with the specified name; @code{generate-new-buffer} always creates a new
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
900 buffer and gives it a unique name.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 Other functions you can use to create buffers include
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 @code{with-output-to-temp-buffer} (@pxref{Temporary Displays}) and
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 @code{create-file-buffer} (@pxref{Visiting Files}). Starting a
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 subprocess can also create a buffer (@pxref{Processes}).
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 @defun get-buffer-create name
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
908 This function returns a buffer named @var{name}. It returns a live
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 buffer with that name, if one exists; otherwise, it creates a new
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 buffer. The buffer does not become the current buffer---this function
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 does not change which buffer is current.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
913 If @var{name} is a buffer instead of a string, it is returned, even if
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
914 it is dead. An error is signaled if @var{name} is neither a string
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
915 nor a buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919 (get-buffer-create "foo")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 @result{} #<buffer foo>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
924 The major mode for a newly created buffer is set to Fundamental mode.
70659
61a3f8c2718c (Creating Buffers): Cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 70642
diff changeset
925 (The variable @code{default-major-mode} is handled at a higher level;
61a3f8c2718c (Creating Buffers): Cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 70642
diff changeset
926 see @ref{Auto Major Mode}.) If the name begins with a space, the
61a3f8c2718c (Creating Buffers): Cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 70642
diff changeset
927 buffer initially disables undo information recording (@pxref{Undo}).
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 @defun generate-new-buffer name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 This function returns a newly created, empty buffer, but does not make
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 it current. If there is no buffer named @var{name}, then that is the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 name of the new buffer. If that name is in use, this function adds
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
934 suffixes of the form @samp{<@var{n}>} to @var{name}, where @var{n} is an
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
935 integer. It tries successive integers starting with 2 until it finds an
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
936 available name.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 An error is signaled if @var{name} is not a string.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 (generate-new-buffer "bar")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 @result{} #<buffer bar>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 (generate-new-buffer "bar")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 @result{} #<buffer bar<2>>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 (generate-new-buffer "bar")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 @result{} #<buffer bar<3>>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
955 The major mode for the new buffer is set to Fundamental mode. The
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
956 variable @code{default-major-mode} is handled at a higher level.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
957 @xref{Auto Major Mode}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 See the related function @code{generate-new-buffer-name} in @ref{Buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 Names}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 @node Killing Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 @section Killing Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 @cindex killing buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 @cindex buffers, killing
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967
59874
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
968 @dfn{Killing a buffer} makes its name unknown to Emacs and makes the
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
969 memory space it occupied available for other use.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
971 The buffer object for the buffer that has been killed remains in
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 existence as long as anything refers to it, but it is specially marked
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 so that you cannot make it current or display it. Killed buffers retain
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
974 their identity, however; if you kill two distinct buffers, they remain
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
975 distinct according to @code{eq} although both are dead.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 If you kill a buffer that is current or displayed in a window, Emacs
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 automatically selects or displays some other buffer instead. This means
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 that killing a buffer can in general change the current buffer.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 Therefore, when you kill a buffer, you should also take the precautions
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 associated with changing the current buffer (unless you happen to know
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 that the buffer being killed isn't current). @xref{Current Buffer}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
984 If you kill a buffer that is the base buffer of one or more indirect
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
985 buffers, the indirect buffers are automatically killed as well.
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
986
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 The @code{buffer-name} of a killed buffer is @code{nil}. You can use
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 this feature to test whether a buffer has been killed:
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 (defun buffer-killed-p (buffer)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993 "Return t if BUFFER is killed."
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 (not (buffer-name buffer)))
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 @deffn Command kill-buffer buffer-or-name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 This function kills the buffer @var{buffer-or-name}, freeing all its
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1000 memory for other uses or to be returned to the operating system. If
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1001 @var{buffer-or-name} is @code{nil}, it kills the current buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003 Any processes that have this buffer as the @code{process-buffer} are
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 sent the @code{SIGHUP} signal, which normally causes them to terminate.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 (The basic meaning of @code{SIGHUP} is that a dialup line has been
44346
43dc1031ba62 Fix the xref for sending SIGHUP.
Richard M. Stallman <rms@gnu.org>
parents: 40492
diff changeset
1006 disconnected.) @xref{Signals to Processes}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 If the buffer is visiting a file and contains unsaved changes,
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 @code{kill-buffer} asks the user to confirm before the buffer is killed.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010 It does this even if not called interactively. To prevent the request
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 for confirmation, clear the modified flag before calling
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 @code{kill-buffer}. @xref{Buffer Modification}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 Killing a buffer that is already dead has no effect.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1016 This function returns @code{t} if it actually killed the buffer. It
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1017 returns @code{nil} if the user refuses to confirm or if
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1018 @var{buffer-or-name} was already dead.
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1019
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020 @smallexample
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 (kill-buffer "foo.unchanged")
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1022 @result{} t
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 (kill-buffer "foo.changed")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 ---------- Buffer: Minibuffer ----------
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 Buffer foo.changed modified; kill anyway? (yes or no) @kbd{yes}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 ---------- Buffer: Minibuffer ----------
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1029 @result{} t
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 @end smallexample
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031 @end deffn
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032
7542
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1033 @defvar kill-buffer-query-functions
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1034 After confirming unsaved changes, @code{kill-buffer} calls the functions
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1035 in the list @code{kill-buffer-query-functions}, in order of appearance,
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1036 with no arguments. The buffer being killed is the current buffer when
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1037 they are called. The idea of this feature is that these functions will
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1038 ask for confirmation from the user. If any of them returns @code{nil},
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1039 @code{kill-buffer} spares the buffer's life.
7542
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1040 @end defvar
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1041
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1042 @defvar kill-buffer-hook
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1043 This is a normal hook run by @code{kill-buffer} after asking all the
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1044 questions it is going to ask, just before actually killing the buffer.
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1045 The buffer to be killed is current when the hook functions run.
51925
803b9aa5604e (Killing Buffers): kill-buffer-hook is perm local.
Richard M. Stallman <rms@gnu.org>
parents: 50466
diff changeset
1046 @xref{Hooks}. This variable is a permanent local, so its local binding
803b9aa5604e (Killing Buffers): kill-buffer-hook is perm local.
Richard M. Stallman <rms@gnu.org>
parents: 50466
diff changeset
1047 is not cleared by changing major modes.
7542
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1048 @end defvar
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1049
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1050 @defvar buffer-offer-save
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1051 This variable, if non-@code{nil} in a particular buffer, tells
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1052 @code{save-buffers-kill-emacs} and @code{save-some-buffers} (if the
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1053 second optional argument to that function is @code{t}) to offer to
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1054 save that buffer, just as they offer to save file-visiting buffers.
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1055 @xref{Definition of save-some-buffers}. The variable
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1056 @code{buffer-offer-save} automatically becomes buffer-local when set
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1057 for any reason. @xref{Buffer-Local Variables}.
7542
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1058 @end defvar
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
1059
59148
6b3838433689 (Killing Buffers): Add buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents: 56427
diff changeset
1060 @defvar buffer-save-without-query
6b3838433689 (Killing Buffers): Add buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents: 56427
diff changeset
1061 This variable, if non-@code{nil} in a particular buffer, tells
6b3838433689 (Killing Buffers): Add buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents: 56427
diff changeset
1062 @code{save-buffers-kill-emacs} and @code{save-some-buffers} to save
6b3838433689 (Killing Buffers): Add buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents: 56427
diff changeset
1063 this buffer (if it's modified) without asking the user. The variable
6b3838433689 (Killing Buffers): Add buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents: 56427
diff changeset
1064 automatically becomes buffer-local when set for any reason.
6b3838433689 (Killing Buffers): Add buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents: 56427
diff changeset
1065 @end defvar
6b3838433689 (Killing Buffers): Add buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents: 56427
diff changeset
1066
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1067 @defun buffer-live-p object
53421
36960c89c04c (Buffer Modification): Add restore-buffer-modified-p.
Richard M. Stallman <rms@gnu.org>
parents: 52626
diff changeset
1068 This function returns @code{t} if @var{object} is a buffer which has
36960c89c04c (Buffer Modification): Add restore-buffer-modified-p.
Richard M. Stallman <rms@gnu.org>
parents: 52626
diff changeset
1069 not been killed, @code{nil} otherwise.
36960c89c04c (Buffer Modification): Add restore-buffer-modified-p.
Richard M. Stallman <rms@gnu.org>
parents: 52626
diff changeset
1070 @end defun
36960c89c04c (Buffer Modification): Add restore-buffer-modified-p.
Richard M. Stallman <rms@gnu.org>
parents: 52626
diff changeset
1071
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1072 @node Indirect Buffers
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1073 @section Indirect Buffers
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1074 @cindex indirect buffers
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1075 @cindex base buffer
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1077 An @dfn{indirect buffer} shares the text of some other buffer, which
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1078 is called the @dfn{base buffer} of the indirect buffer. In some ways it
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1079 is the analogue, for buffers, of a symbolic link among files. The base
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1080 buffer may not itself be an indirect buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1082 The text of the indirect buffer is always identical to the text of its
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1083 base buffer; changes made by editing either one are visible immediately
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1084 in the other. This includes the text properties as well as the characters
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1085 themselves.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1087 In all other respects, the indirect buffer and its base buffer are
61596
164ca32df6ab (Indirect Buffers): Clarify.
Richard M. Stallman <rms@gnu.org>
parents: 59874
diff changeset
1088 completely separate. They have different names, independent values of
164ca32df6ab (Indirect Buffers): Clarify.
Richard M. Stallman <rms@gnu.org>
parents: 59874
diff changeset
1089 point, independent narrowing, independent markers and overlays (though
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1090 inserting or deleting text in either buffer relocates the markers and
61596
164ca32df6ab (Indirect Buffers): Clarify.
Richard M. Stallman <rms@gnu.org>
parents: 59874
diff changeset
1091 overlays for both), independent major modes, and independent
164ca32df6ab (Indirect Buffers): Clarify.
Richard M. Stallman <rms@gnu.org>
parents: 59874
diff changeset
1092 buffer-local variable bindings.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1094 An indirect buffer cannot visit a file, but its base buffer can. If
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1095 you try to save the indirect buffer, that actually saves the base
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1096 buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1098 Killing an indirect buffer has no effect on its base buffer. Killing
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1099 the base buffer effectively kills the indirect buffer in that it cannot
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1100 ever again be the current buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1102 @deffn Command make-indirect-buffer base-buffer name &optional clone
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1103 This creates and returns an indirect buffer named @var{name} whose
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1104 base buffer is @var{base-buffer}. The argument @var{base-buffer} may
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1105 be a live buffer or the name (a string) of an existing buffer. If
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1106 @var{name} is the name of an existing buffer, an error is signaled.
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1107
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1108 If @var{clone} is non-@code{nil}, then the indirect buffer originally
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1109 shares the ``state'' of @var{base-buffer} such as major mode, minor
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1110 modes, buffer local variables and so on. If @var{clone} is omitted
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1111 or @code{nil} the indirect buffer's state is set to the default state
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1112 for new buffers.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44346
diff changeset
1113
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1114 If @var{base-buffer} is an indirect buffer, its base buffer is used as
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1115 the base for the new buffer. If, in addition, @var{clone} is
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1116 non-@code{nil}, the initial state is copied from the actual base
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1117 buffer, not from @var{base-buffer}.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
1118 @end deffn
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119
59874
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
1120 @defun clone-indirect-buffer newname display-flag &optional norecord
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
1121 This function creates and returns a new indirect buffer that shares
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
1122 the current buffer's base buffer and copies the rest of the current
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
1123 buffer's attributes. (If the current buffer is not indirect, it is
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
1124 used as the base buffer.)
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
1125
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
1126 If @var{display-flag} is non-@code{nil}, that means to display the new
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
1127 buffer by calling @code{pop-to-buffer}. If @var{norecord} is
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
1128 non-@code{nil}, that means not to put the new buffer to the front of
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
1129 the buffer list.
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
1130 @end defun
134cd8afb3e7 (Buffer Names): Clarify generate-new-buffer-name.
Richard M. Stallman <rms@gnu.org>
parents: 59148
diff changeset
1131
54862
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1132 @defun buffer-base-buffer &optional buffer
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1133 This function returns the base buffer of @var{buffer}, which defaults
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1134 to the current buffer. If @var{buffer} is not indirect, the value is
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1135 @code{nil}. Otherwise, the value is another buffer, which is never an
8de44f69312c Various changes in addition to:
Luc Teirlinck <teirllm@auburn.edu>
parents: 54019
diff changeset
1136 indirect buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1139 @node Buffer Gap
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1140 @section The Buffer Gap
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1141
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1142 Emacs buffers are implemented using an invisible @dfn{gap} to make
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1143 insertion and deletion faster. Insertion works by filling in part of
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1144 the gap, and deletion adds to the gap. Of course, this means that the
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1145 gap must first be moved to the locus of the insertion or deletion.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1146 Emacs moves the gap only when you try to insert or delete. This is why
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1147 your first editing command in one part of a large buffer, after
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1148 previously editing in another far-away part, sometimes involves a
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1149 noticeable delay.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1150
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1151 This mechanism works invisibly, and Lisp code should never be affected
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1152 by the gap's current location, but these functions are available for
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1153 getting information about the gap status.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1154
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1155 @defun gap-position
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1156 This function returns the current gap position in the current buffer.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1157 @end defun
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1158
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1159 @defun gap-size
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1160 This function returns the current gap size of the current buffer.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1161 @end defun
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52137
diff changeset
1162
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52137
diff changeset
1163 @ignore
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52137
diff changeset
1164 arch-tag: 2e53cfab-5691-41f6-b5a8-9c6a3462399c
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52137
diff changeset
1165 @end ignore