annotate lispref/buffers.texi @ 49393:85246e86a2cd

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