annotate lispref/buffers.texi @ 36150:46e59561af4c

Display Vars node renamed Display Custom. Include info there about customizing cursor appearance. Clean up aggressive scrolling. Clarify horizontal scrolling discussion. Fix index entries for line number mode.
author Richard M. Stallman <rms@gnu.org>
date Sat, 17 Feb 2001 16:45:37 +0000
parents 8c79b30d8475
children f242022750ee
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.
27189
d2e5f1b7d8e2 Update copyrights.
Gerd Moellmann <gerd@gnu.org>
parents: 27187
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999
d2e5f1b7d8e2 Update copyrights.
Gerd Moellmann <gerd@gnu.org>
parents: 27187
diff changeset
4 @c 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
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
109 @strong{Note:} 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
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
141 If the buffer appended to happens to be displayed in some window,
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
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
205 @defspec save-current-buffer body...
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
206 The @code{save-current-buffer} macro saves the identity of the current
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
207 buffer, evaluates the @var{body} forms, and finally restores that buffer
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
208 as current. The return value is the value of the last form in
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
209 @var{body}. The current buffer is restored even in case of an abnormal
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
210 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
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
218 @defmac with-current-buffer buffer body...
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
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
220 buffer, makes @var{buffer} current, evaluates the @var{body} forms, and
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
221 finally restores the buffer. The return value is the value of the last
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
222 form in @var{body}. The current buffer is restored even in case of an
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
223 abnormal exit via @code{throw} or error (@pxref{Nonlocal Exits}).
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
224 @end defmac
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
225
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
226 @defmac with-temp-buffer body...
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
227 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
228 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
229 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
230 evaluates the @var{body} forms, and finally restores the previous
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
231 current buffer while killing the temporary buffer.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
232
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
233 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
234 return the contents of the temporary buffer by using
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
235 @code{(buffer-string)} as the last form.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
236
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
237 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
238 @code{throw} or error (@pxref{Nonlocal Exits}).
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
239 @end defmac
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
240
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
241 See also @code{with-temp-file} in @ref{Writing to Files}.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
242
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 @node Buffer Names
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 @section Buffer Names
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 @cindex buffer names
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 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
248 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
249 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
250 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
251 Any argument called @var{buffer} must be an actual buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 object, not a name.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 Buffers that are ephemeral and generally uninteresting to the user
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
255 have names starting with a space, so that the @code{list-buffers} and
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 @code{buffer-menu} commands don't mention them. A name starting with
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 space also initially disables recording undo information; see
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 @ref{Undo}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 @defun buffer-name &optional buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 This function returns the name of @var{buffer} as a string. If
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 @var{buffer} is not supplied, it defaults to the current buffer.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 If @code{buffer-name} returns @code{nil}, it means that @var{buffer}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 has been killed. @xref{Killing Buffers}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 (buffer-name)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 @result{} "buffers.texi"
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 (setq foo (get-buffer "temp"))
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 @result{} #<buffer temp>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 (kill-buffer foo)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 @result{} nil
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 (buffer-name foo)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 @result{} nil
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 foo
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 @result{} #<killed buffer>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 @deffn Command rename-buffer newname &optional unique
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 This function renames the current buffer to @var{newname}. An error
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 is signaled if @var{newname} is not a string, or if there is already a
13229
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
295 buffer with that name. The function returns @var{newname}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 @c Emacs 19 feature
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 Ordinarily, @code{rename-buffer} signals an error if @var{newname} is
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 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
300 @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
301 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
302 (This is how the command @code{rename-uniquely} is implemented.)
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 @end deffn
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 @defun get-buffer buffer-or-name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 This function returns the buffer specified by @var{buffer-or-name}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 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
308 name, the value is @code{nil}. If @var{buffer-or-name} is a buffer, it
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
309 is returned as given; that is not very useful, so the argument is usually
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
310 a name. For example:
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 (setq b (get-buffer "lewis"))
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 @result{} #<buffer lewis>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 (get-buffer b)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 @result{} #<buffer lewis>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 (get-buffer "Frazzle-nots")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 @result{} nil
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 See also the function @code{get-buffer-create} in @ref{Creating Buffers}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 @c Emacs 19 feature
26239
62de8a433d0e Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25950
diff changeset
331 @defun generate-new-buffer-name starting-name &rest ignore
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 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
333 does not create the buffer. It starts with @var{starting-name}, and
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 produces a name not currently in use for any buffer by appending a
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 number inside of @samp{<@dots{}>}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336
26239
62de8a433d0e Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25950
diff changeset
337 If the optional second argument @var{ignore} is non-@code{nil}, it
27301
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
338 should be a string; it makes a difference if it is a name in the
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
339 sequence of names to be tried. That name will be considered acceptable,
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
340 if it is tried, even if a buffer with that name exists. Thus, if
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
341 buffers named @samp{foo}, @samp{foo<2>}, @samp{foo<3>} and @samp{foo<4>}
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
342 exist,
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
343
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
344 @example
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
345 (generate-new-buffer-name "foo")
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
346 @result{} "foo<5>"
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
347 (generate-new-buffer-name "foo" "foo<3>")
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
348 @result{} "foo<3>"
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
349 (generate-new-buffer-name "foo" "foo<6>")
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
350 @result{} "foo<5>"
8c79b30d8475 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27193
diff changeset
351 @end example
26239
62de8a433d0e Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25950
diff changeset
352
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 See the related function @code{generate-new-buffer} in @ref{Creating
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 Buffers}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 @node Buffer File Name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 @section Buffer File Name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 @cindex visited file
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 @cindex buffer file name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 @cindex file name of buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 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
364 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
365 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
366 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
367 the buffer name are distinct and can be set independently.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 @xref{Visiting Files}.
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 @defun buffer-file-name &optional buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 This function returns the absolute file name of the file that
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 @var{buffer} is visiting. If @var{buffer} is not visiting any file,
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 @code{buffer-file-name} returns @code{nil}. If @var{buffer} is not
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 supplied, it defaults to the current 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 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 (buffer-file-name (other-buffer))
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 @result{} "/usr/user/lewis/manual/files.texi"
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 @defvar buffer-file-name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 This buffer-local variable contains the name of the file being visited
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 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
387 is a permanent local variable, unaffected by
7996385fc601 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25751
diff changeset
388 @code{kill-all-local-variables}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 buffer-file-name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 @result{} "/usr/user/lewis/manual/buffers.texi"
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 @end example
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 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
398 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
399 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
400 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
401 Emacs.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 @end defvar
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 @defvar buffer-file-truename
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 This buffer-local variable holds the truename of the file visited in the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 current buffer, or @code{nil} if no file is visited. It is a permanent
25950
7996385fc601 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25751
diff changeset
407 local, unaffected by @code{kill-all-local-variables}. @xref{Truenames}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 @end defvar
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 @defvar buffer-file-number
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 This buffer-local variable holds the file number and directory device
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 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
413 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
414 unaffected by @code{kill-all-local-variables}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 The value is normally a list of the form @code{(@var{filenum}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 @var{devnum})}. This pair of numbers uniquely identifies the file among
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 all files accessible on the system. See the function
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 @code{file-attributes}, in @ref{File Attributes}, for more information
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 about them.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 @end defvar
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 @defun get-file-buffer filename
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 This function returns the buffer visiting file @var{filename}. If
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 there is no such buffer, it returns @code{nil}. The argument
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 @var{filename}, which must be a string, is expanded (@pxref{File Name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 Expansion}), then compared against the visited file names of all live
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 buffers.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 (get-file-buffer "buffers.texi")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 @result{} #<buffer buffers.texi>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 In unusual circumstances, there can be more than one buffer visiting
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 the same file name. In such cases, this function returns the first
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 such buffer in the buffer list.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
442 @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
443 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
444 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
445 buffer had no visited file, this gives it one.) The @emph{next time}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 the buffer is saved it will go in the newly-specified file. This
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 command marks the buffer as modified, since it does not (as far as Emacs
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 knows) match the contents of @var{filename}, even if it matched the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 former visited file.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 If @var{filename} is @code{nil} or the empty string, that stands for
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 ``no visited file''. In this case, @code{set-visited-file-name} marks
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 the buffer as having no visited file.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
455 Normally, this function asks the user for confirmation if the specified
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
456 file already exists. If @var{no-query} is non-@code{nil}, that prevents
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
457 asking this question.
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
458
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
459 If @var{along-with-file} is non-@code{nil}, that means to assume that the
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
460 former visited file has been renamed to @var{filename}.
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
461
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 @c Wordy to avoid overfull hbox. --rjc 16mar92
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 When the function @code{set-visited-file-name} is called interactively, it
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 prompts for @var{filename} in the minibuffer.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 @end deffn
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 @defvar list-buffers-directory
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
468 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
469 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
470 have a visited file name. Dired buffers use this variable.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 @end defvar
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 @node Buffer Modification
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 @section Buffer Modification
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 @cindex buffer modification
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 @cindex modification flag (of buffer)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 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
479 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
480 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
481 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
482 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
483 line (@pxref{Mode Line Variables}), and controls saving (@pxref{Saving
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 Buffers}) and auto-saving (@pxref{Auto-Saving}).
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 Some Lisp programs set the flag explicitly. For example, the function
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 @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
488 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
489 file formerly visited.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 The functions that modify the contents of buffers are described in
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 @ref{Text}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 @defun buffer-modified-p &optional buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 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
496 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
497 otherwise. If @var{buffer} is not supplied, the current buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 is tested.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 @defun set-buffer-modified-p flag
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 This function marks the current buffer as modified if @var{flag} is
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 non-@code{nil}, or as unmodified if the flag is @code{nil}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 Another effect of calling this function is to cause unconditional
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 redisplay of the mode line for the current buffer. In fact, the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 function @code{force-mode-line-update} works by doing this:
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 (set-buffer-modified-p (buffer-modified-p))
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 @deffn Command not-modified
13229
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
517 This command marks the current buffer as unmodified, and not needing to
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
518 be saved. With prefix arg, it marks the buffer as modified, so that it
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
519 will be saved at the next suitable occasion.
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
520
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
521 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
522 echo area; use @code{set-buffer-modified-p} (above) instead.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 @end deffn
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 @c Emacs 19 feature
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 @defun buffer-modified-tick &optional buffer
13229
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
527 This function returns @var{buffer}'s modification-count. This is a
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 counter that increments every time the buffer is modified. If
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 @var{buffer} is @code{nil} (or omitted), the current buffer is used.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 @node Modification Time
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 @comment node-name, next, previous, up
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 @section Comparison of Modification Time
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 @cindex comparison of modification time
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 @cindex modification time, comparison of
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 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
539 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
540 buffer would overwrite the changes in the file. Occasionally this may
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 be what you want, but usually it would lose valuable information. Emacs
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 therefore checks the file's modification time using the functions
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 described below before saving the file.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 @defun verify-visited-file-modtime buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 This function compares what @var{buffer} has recorded for the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 modification time of its visited file against the actual modification
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 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
549 the same unless some other process has written the file since Emacs
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 visited or saved it.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 The function returns @code{t} if the last actual modification time and
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 Emacs's recorded modification time are the same, @code{nil} otherwise.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 @defun clear-visited-file-modtime
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 This function clears out the record of the last modification time of
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 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
559 attempt to save this buffer will not complain of a discrepancy in
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 file modification times.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 This function is called in @code{set-visited-file-name} and other
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 exceptional places where the usual test to avoid overwriting a changed
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 file should not be done.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 @c Emacs 19 feature
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 @defun visited-file-modtime
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 This function returns the buffer's recorded last file modification time,
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 as a list of the form @code{(@var{high} . @var{low})}. (This is the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 same format that @code{file-attributes} uses to return time values; see
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 @ref{File Attributes}.)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 @c Emacs 19 feature
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 @defun set-visited-file-modtime &optional time
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 This function updates the buffer's record of the last modification time
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 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
579 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
580 visited file.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 If @var{time} is not @code{nil}, it should have the form
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 @code{(@var{high} . @var{low})} or @code{(@var{high} @var{low})}, in
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 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
585 time.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 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
588 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
589 reason.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
592 @defun ask-user-about-supersession-threat filename
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 @cindex obsolete buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 This function is used to ask a user how to proceed after an attempt to
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
595 modify an obsolete buffer visiting file @var{filename}. An
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
596 @dfn{obsolete buffer} is an unmodified buffer for which the associated
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
597 file on disk is newer than the last save-time of the buffer. This means
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
598 some other program has probably altered the file.
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
599
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
600 @kindex file-supersession
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
601 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
602 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
603 @code{file-supersession} error with data @code{(@var{filename})}, in which
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
604 case the proposed buffer modification is not allowed.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 This function is called automatically by Emacs on the proper
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 occasions. It exists so you can customize Emacs by redefining it.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 See the file @file{userlock.el} for the standard definition.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 See also the file locking mechanism in @ref{File Locks}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 @node Read Only Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 @section Read-Only Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 @cindex read-only buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 @cindex buffer, read-only
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 If a buffer is @dfn{read-only}, then you cannot change its contents,
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 although you may change your view of the contents by scrolling and
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 narrowing.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 Read-only buffers are used in two kinds of situations:
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 @itemize @bullet
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 @item
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 A buffer visiting a write-protected file is normally read-only.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
628 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
629 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
630 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
631 the read-only flag with @kbd{C-x C-q}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 @item
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 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
635 contents with the usual editing commands would probably be a mistake.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 The special commands of these modes bind @code{buffer-read-only} to
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 @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
639 @code{t} around the places where they themselves change the text.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 @end itemize
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 @defvar buffer-read-only
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 This buffer-local variable specifies whether the buffer is read-only.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 The buffer is read-only if this variable is non-@code{nil}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 @end defvar
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 @defvar inhibit-read-only
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 If this variable is non-@code{nil}, then read-only buffers and read-only
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
649 characters may be modified. Read-only characters in a buffer are those
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
650 that have non-@code{nil} @code{read-only} properties (either text
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
651 properties or overlay properties). @xref{Special Properties}, for more
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
652 information about text properties. @xref{Overlays}, for more
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
653 information about overlays and their properties.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
655 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
656 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
657 @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
658 of the list (comparison is done with @code{eq}).
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 @end defvar
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 @deffn Command toggle-read-only
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 This command changes whether the current buffer is read-only. It is
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
663 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
664 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
665 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
666 proper value, @code{t} or @code{nil}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 @end deffn
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 @defun barf-if-buffer-read-only
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 This function signals a @code{buffer-read-only} error if the current
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 buffer is read-only. @xref{Interactive Call}, for another way to
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 signal an error if the current buffer is read-only.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 @node The Buffer List
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 @section The Buffer List
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 @cindex buffer list
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 The @dfn{buffer list} is a list of all live buffers. Creating a
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
680 buffer adds it to this list, and killing a buffer excises it. The order
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 of the buffers in the list is based primarily on how recently each
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 buffer has been displayed in the selected window. Buffers move to the
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 front of the list when they are selected and to the end when they are
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
684 buried (see @code{bury-buffer}, below). Several functions, notably
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
685 @code{other-buffer}, use this ordering. A buffer list displayed for the
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
686 user also follows this order.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
688 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
689 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
690 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
691 recently selected @emph{in that frame}. (This order is recorded in
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
692 @var{frame}'s @code{buffer-list} frame parameter; see @ref{Window Frame
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
693 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
694 afterward, ordered according to the fundamental Emacs buffer list.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
695
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
696 @defun buffer-list &optional frame
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
697 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
698 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
699 their names.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
700
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
701 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
702 @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
703 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
704 which frames they were selected in.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
705
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 (buffer-list)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 @result{} (#<buffer buffers.texi>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 #<buffer *Minibuf-1*> #<buffer buffer.c>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 #<buffer *Help*> #<buffer TAGS>)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 ;; @r{Note that the name of the minibuffer}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 ;; @r{begins with a space!}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 (mapcar (function buffer-name) (buffer-list))
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 @result{} ("buffers.texi" " *Minibuf-1*"
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 "buffer.c" "*Help*" "TAGS")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 @end example
15862
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
722 @end defun
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723
15862
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
724 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
725 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
726 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
727 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
728 is an easy way:
15862
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
729
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
730 @example
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
731 (defun reorder-buffer-list (new-list)
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
732 (while new-list
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
733 (bury-buffer (car new-list))
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
734 (setq new-list (cdr new-list))))
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
735 @end example
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
736
d0a061b594a1 Show how to reorder buffers.
Richard M. Stallman <rms@gnu.org>
parents: 13247
diff changeset
737 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
738 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
739 live buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
741 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
742 @code{buffer-list} frame parameter with @code{modify-frame-parameters}
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
743 (@pxref{Parameter Access}).
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
744
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
745 @defun other-buffer &optional buffer visible-ok frame
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 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
747 @var{buffer}. Usually this is the buffer selected most recently (in
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
748 frame @var{frame} or else the currently selected frame), aside from
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
749 @var{buffer}. Buffers whose names start with a space are not considered
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
750 at all.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751
13247
750f4d22537f Arg of other-buffer can't be a buffer name.
Richard M. Stallman <rms@gnu.org>
parents: 13229
diff changeset
752 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
753 @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
754 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
755
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
756 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
757 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
758 consider. It calls the predicate once for each buffer, and if the value
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
759 is @code{nil}, that buffer is ignored. @xref{Window Frame Parameters}.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
760
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 @c Emacs 19 feature
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 If @var{visible-ok} is @code{nil}, @code{other-buffer} avoids returning
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 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
764 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
765 whether a buffer is displayed somewhere or not.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 If no suitable buffer exists, the buffer @samp{*scratch*} is returned
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 (and created, if necessary).
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 @deffn Command bury-buffer &optional buffer-or-name
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
772 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
773 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
774 This buffer therefore becomes the least desirable candidate for
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 @code{other-buffer} to return.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
777 @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
778 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
779 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
780 @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
781
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
782 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
783 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
784 window, this switches to some other buffer (obtained using
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
785 @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
786 displayed in some other window, it remains displayed there.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 15862
diff changeset
788 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
789 @code{replace-buffer-in-windows}. @xref{Buffers and Windows}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 @end deffn
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 @node Creating Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 @section Creating Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 @cindex creating buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 @cindex buffers, creating
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 This section describes the two primitives for creating buffers.
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
798 @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
799 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
800 buffer and gives it a unique name.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 Other functions you can use to create buffers include
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 @code{with-output-to-temp-buffer} (@pxref{Temporary Displays}) and
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 @code{create-file-buffer} (@pxref{Visiting Files}). Starting a
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 subprocess can also create a buffer (@pxref{Processes}).
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 @defun get-buffer-create name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 This function returns a buffer named @var{name}. It returns an existing
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 buffer with that name, if one exists; otherwise, it creates a new
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 buffer. The buffer does not become the current buffer---this function
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 does not change which buffer is current.
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 An error is signaled if @var{name} is not a string.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 (get-buffer-create "foo")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 @result{} #<buffer foo>
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
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
822 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
823 variable @code{default-major-mode} is handled at a higher level.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
824 @xref{Auto Major Mode}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 @defun generate-new-buffer name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 This function returns a newly created, empty buffer, but does not make
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 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
830 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
831 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
832 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
833 available name.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 An error is signaled if @var{name} is not a string.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 (generate-new-buffer "bar")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 @result{} #<buffer bar>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 (generate-new-buffer "bar")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 @result{} #<buffer bar<2>>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 (generate-new-buffer "bar")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 @result{} #<buffer bar<3>>
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
852 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
853 variable @code{default-major-mode} is handled at a higher level.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
854 @xref{Auto Major Mode}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 See the related function @code{generate-new-buffer-name} in @ref{Buffer
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 Names}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 @node Killing Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 @section Killing Buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 @cindex killing buffers
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 @cindex buffers, killing
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 @dfn{Killing a buffer} makes its name unknown to Emacs and makes its
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
866 text space available for other use.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867
7677
431b1a011c29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7542
diff changeset
868 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
869 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
870 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
871 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
872 distinct according to @code{eq} although both are dead.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 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
875 automatically selects or displays some other buffer instead. This means
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876 that killing a buffer can in general change the current buffer.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 Therefore, when you kill a buffer, you should also take the precautions
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 associated with changing the current buffer (unless you happen to know
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 that the buffer being killed isn't current). @xref{Current Buffer}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
881 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
882 buffers, the indirect buffers are automatically killed as well.
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
883
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 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
885 this feature to test whether a buffer has been killed:
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 @example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 @group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 (defun buffer-killed-p (buffer)
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 "Return t if BUFFER is killed."
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 (not (buffer-name buffer)))
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892 @end group
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 @end example
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 @deffn Command kill-buffer buffer-or-name
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 This function kills the buffer @var{buffer-or-name}, freeing all its
13229
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
897 memory for other uses or to be returned to the operating system. It
909eb45b146d Minor fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
898 returns @code{nil}.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 Any processes that have this buffer as the @code{process-buffer} are
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 sent the @code{SIGHUP} signal, which normally causes them to terminate.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 (The basic meaning of @code{SIGHUP} is that a dialup line has been
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 disconnected.) @xref{Deleting Processes}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 If the buffer is visiting a file and contains unsaved changes,
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 @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
907 It does this even if not called interactively. To prevent the request
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 for confirmation, clear the modified flag before calling
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 @code{kill-buffer}. @xref{Buffer Modification}.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 Killing a buffer that is already dead has no effect.
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 @smallexample
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 (kill-buffer "foo.unchanged")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 @result{} nil
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 (kill-buffer "foo.changed")
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 ---------- Buffer: Minibuffer ----------
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919 Buffer foo.changed modified; kill anyway? (yes or no) @kbd{yes}
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 ---------- Buffer: Minibuffer ----------
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 @result{} nil
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 @end smallexample
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 @end deffn
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925
7542
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
926 @defvar kill-buffer-query-functions
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
927 After confirming unsaved changes, @code{kill-buffer} calls the functions
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
928 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
929 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
930 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
931 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
932 @code{kill-buffer} spares the buffer's life.
7542
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
933 @end defvar
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
934
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
935 @defvar kill-buffer-hook
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
936 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
937 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
938 The buffer to be killed is current when the hook functions run.
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
939 @xref{Hooks}.
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
940 @end defvar
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
941
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
942 @defvar buffer-offer-save
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
943 This variable, if non-@code{nil} in a particular buffer, tells
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
944 @code{save-buffers-kill-emacs} and @code{save-some-buffers} to offer to
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
945 save that buffer, just as they offer to save file-visiting buffers. The
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
946 variable @code{buffer-offer-save} automatically becomes buffer-local
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
947 when set for any reason. @xref{Buffer-Local Variables}.
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
948 @end defvar
b93516a5dcda *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6564
diff changeset
949
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
950 @node Indirect Buffers
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
951 @section Indirect Buffers
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
952 @cindex indirect buffers
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
953 @cindex base buffer
6564
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 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
956 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
957 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
958 buffer may not itself be an indirect buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
960 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
961 base buffer; changes made by editing either one are visible immediately
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
962 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
963 themselves.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
965 In all other respects, the indirect buffer and its base buffer are
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
966 completely separate. They have different names, different values of
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
967 point, different narrowing, different markers and overlays (though
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
968 inserting or deleting text in either buffer relocates the markers and
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
969 overlays for both), different major modes, and different buffer-local
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
970 variables.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
972 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
973 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
974 buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
976 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
977 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
978 ever again be the current buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
980 @deffn Command make-indirect-buffer base-buffer name
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
981 This creates an indirect buffer named @var{name} whose base buffer
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
982 is @var{base-buffer}. The argument @var{base-buffer} may be a buffer
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
983 or a string.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
984
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
985 If @var{base-buffer} is an indirect buffer, its base buffer is used as
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
986 the base for the new buffer.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
987 @end deffn
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
989 @defun buffer-base-buffer buffer
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
990 This function returns the base buffer of @var{buffer}. If @var{buffer}
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
991 is not indirect, the value is @code{nil}. Otherwise, the value is
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11545
diff changeset
992 another buffer, which is never an indirect buffer.
6564
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993 @end defun
d9652e184eec Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
995 @node Buffer Gap
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
996 @section The Buffer Gap
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
997
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
998 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
999 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
1000 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
1001 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
1002 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
1003 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
1004 previously editing in another far-away part, sometimes involves a
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1005 noticeable delay.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1006
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1007 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
1008 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
1009 getting information about the gap status.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1010
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1011 @defun gap-position
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1012 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
1013 @end defun
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1014
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1015 @defun gap-size
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
1016 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
1017 @end defun