Mercurial > emacs
annotate lispref/markers.texi @ 42811:cf0c0ef57504
*** empty log message ***
| author | Jason Rumney <jasonr@gnu.org> |
|---|---|
| date | Thu, 17 Jan 2002 19:29:24 +0000 |
| parents | d2e5f1b7d8e2 |
| children | 469cf4d8b62b |
| rev | line source |
|---|---|
| 6444 | 1 @c -*-texinfo-*- |
| 2 @c This is part of the GNU Emacs Lisp Reference Manual. | |
| 27189 | 3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999 |
| 4 @c Free Software Foundation, Inc. | |
| 6444 | 5 @c See the file elisp.texi for copying conditions. |
| 6 @setfilename ../info/markers | |
| 7 @node Markers, Text, Positions, Top | |
| 8 @chapter Markers | |
| 9 @cindex markers | |
| 10 | |
| 11 A @dfn{marker} is a Lisp object used to specify a position in a buffer | |
| 12 relative to the surrounding text. A marker changes its offset from the | |
| 13 beginning of the buffer automatically whenever text is inserted or | |
| 14 deleted, so that it stays with the two characters on either side of it. | |
| 15 | |
| 16 @menu | |
| 17 * Overview of Markers:: The components of a marker, and how it relocates. | |
| 18 * Predicates on Markers:: Testing whether an object is a marker. | |
| 19 * Creating Markers:: Making empty markers or markers at certain places. | |
| 20 * Information from Markers:: Finding the marker's buffer or character position. | |
|
21007
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
21 * Marker Insertion Types:: Two ways a marker can relocate when you |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
22 insert where it points. |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
23 * Moving Markers:: Moving the marker to a new buffer or position. |
| 6444 | 24 * The Mark:: How ``the mark'' is implemented with a marker. |
| 25 * The Region:: How to access ``the region''. | |
| 26 @end menu | |
| 27 | |
| 28 @node Overview of Markers | |
| 29 @section Overview of Markers | |
| 30 | |
| 31 A marker specifies a buffer and a position in that buffer. The marker | |
| 32 can be used to represent a position in the functions that require one, | |
| 33 just as an integer could be used. @xref{Positions}, for a complete | |
| 34 description of positions. | |
| 35 | |
| 36 A marker has two attributes: the marker position, and the marker | |
|
7729
a1c07008521d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6444
diff
changeset
|
37 buffer. The marker position is an integer that is equivalent (at a |
| 6444 | 38 given time) to the marker as a position in that buffer. But the |
| 39 marker's position value can change often during the life of the marker. | |
| 40 Insertion and deletion of text in the buffer relocate the marker. The | |
| 41 idea is that a marker positioned between two characters remains between | |
| 42 those two characters despite insertion and deletion elsewhere in the | |
| 43 buffer. Relocation changes the integer equivalent of the marker. | |
| 44 | |
| 45 @cindex marker relocation | |
| 46 Deleting text around a marker's position leaves the marker between the | |
| 47 characters immediately before and after the deleted text. Inserting | |
|
21682
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
48 text at the position of a marker normally leaves the marker either in |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
49 front of or after the new text, depending on the marker's @dfn{insertion |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
50 type} (@pxref{Marker Insertion Types})---unless the insertion is done |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
51 with @code{insert-before-markers} (@pxref{Insertion}). |
| 6444 | 52 |
| 53 @cindex marker garbage collection | |
| 54 Insertion and deletion in a buffer must check all the markers and | |
| 55 relocate them if necessary. This slows processing in a buffer with a | |
| 56 large number of markers. For this reason, it is a good idea to make a | |
| 57 marker point nowhere if you are sure you don't need it any more. | |
| 58 Unreferenced markers are garbage collected eventually, but until then | |
| 59 will continue to use time if they do point somewhere. | |
| 60 | |
| 61 @cindex markers as numbers | |
| 62 Because it is common to perform arithmetic operations on a marker | |
| 63 position, most of the arithmetic operations (including @code{+} and | |
| 64 @code{-}) accept markers as arguments. In such cases, the marker | |
| 65 stands for its current position. | |
| 66 | |
| 67 Here are examples of creating markers, setting markers, and moving point | |
| 68 to markers: | |
| 69 | |
| 70 @example | |
| 71 @group | |
| 72 ;; @r{Make a new marker that initially does not point anywhere:} | |
| 73 (setq m1 (make-marker)) | |
| 74 @result{} #<marker in no buffer> | |
| 75 @end group | |
| 76 | |
| 77 @group | |
| 78 ;; @r{Set @code{m1} to point between the 99th and 100th characters} | |
| 79 ;; @r{in the current buffer:} | |
| 80 (set-marker m1 100) | |
| 81 @result{} #<marker at 100 in markers.texi> | |
| 82 @end group | |
| 83 | |
| 84 @group | |
| 85 ;; @r{Now insert one character at the beginning of the buffer:} | |
| 86 (goto-char (point-min)) | |
| 87 @result{} 1 | |
| 88 (insert "Q") | |
| 89 @result{} nil | |
| 90 @end group | |
| 91 | |
| 92 @group | |
| 93 ;; @r{@code{m1} is updated appropriately.} | |
| 94 m1 | |
| 95 @result{} #<marker at 101 in markers.texi> | |
| 96 @end group | |
| 97 | |
| 98 @group | |
| 99 ;; @r{Two markers that point to the same position} | |
| 100 ;; @r{are not @code{eq}, but they are @code{equal}.} | |
| 101 (setq m2 (copy-marker m1)) | |
| 102 @result{} #<marker at 101 in markers.texi> | |
| 103 (eq m1 m2) | |
| 104 @result{} nil | |
| 105 (equal m1 m2) | |
| 106 @result{} t | |
| 107 @end group | |
| 108 | |
| 109 @group | |
| 110 ;; @r{When you are finished using a marker, make it point nowhere.} | |
| 111 (set-marker m1 nil) | |
| 112 @result{} #<marker in no buffer> | |
| 113 @end group | |
| 114 @end example | |
| 115 | |
| 116 @node Predicates on Markers | |
| 117 @section Predicates on Markers | |
| 118 | |
| 119 You can test an object to see whether it is a marker, or whether it is | |
| 120 either an integer or a marker. The latter test is useful in connection | |
| 121 with the arithmetic functions that work with both markers and integers. | |
| 122 | |
| 123 @defun markerp object | |
| 124 This function returns @code{t} if @var{object} is a marker, @code{nil} | |
| 125 otherwise. Note that integers are not markers, even though many | |
| 126 functions will accept either a marker or an integer. | |
| 127 @end defun | |
| 128 | |
| 129 @defun integer-or-marker-p object | |
| 130 This function returns @code{t} if @var{object} is an integer or a marker, | |
| 131 @code{nil} otherwise. | |
| 132 @end defun | |
| 133 | |
| 134 @defun number-or-marker-p object | |
|
22138
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
135 This function returns @code{t} if @var{object} is a number (either |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
136 integer or floating point) or a marker, @code{nil} otherwise. |
| 6444 | 137 @end defun |
| 138 | |
| 139 @node Creating Markers | |
|
25751
467b88fab665
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
22252
diff
changeset
|
140 @section Functions that Create Markers |
| 6444 | 141 |
| 142 When you create a new marker, you can make it point nowhere, or point | |
| 143 to the present position of point, or to the beginning or end of the | |
| 144 accessible portion of the buffer, or to the same place as another given | |
| 145 marker. | |
| 146 | |
| 147 @defun make-marker | |
|
22138
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
148 This function returns a newly created marker that does not point |
| 6444 | 149 anywhere. |
| 150 | |
| 151 @example | |
| 152 @group | |
| 153 (make-marker) | |
| 154 @result{} #<marker in no buffer> | |
| 155 @end group | |
| 156 @end example | |
| 157 @end defun | |
| 158 | |
| 159 @defun point-marker | |
| 160 This function returns a new marker that points to the present position | |
| 161 of point in the current buffer. @xref{Point}. For an example, see | |
| 162 @code{copy-marker}, below. | |
| 163 @end defun | |
| 164 | |
| 165 @defun point-min-marker | |
| 166 This function returns a new marker that points to the beginning of the | |
| 167 accessible portion of the buffer. This will be the beginning of the | |
| 168 buffer unless narrowing is in effect. @xref{Narrowing}. | |
| 169 @end defun | |
| 170 | |
| 171 @defun point-max-marker | |
| 172 @cindex end of buffer marker | |
| 173 This function returns a new marker that points to the end of the | |
| 174 accessible portion of the buffer. This will be the end of the buffer | |
| 175 unless narrowing is in effect. @xref{Narrowing}. | |
| 176 | |
| 177 Here are examples of this function and @code{point-min-marker}, shown in | |
| 178 a buffer containing a version of the source file for the text of this | |
| 179 chapter. | |
| 180 | |
| 181 @example | |
| 182 @group | |
| 183 (point-min-marker) | |
| 184 @result{} #<marker at 1 in markers.texi> | |
| 185 (point-max-marker) | |
| 186 @result{} #<marker at 15573 in markers.texi> | |
| 187 @end group | |
| 188 | |
| 189 @group | |
| 190 (narrow-to-region 100 200) | |
| 191 @result{} nil | |
| 192 @end group | |
| 193 @group | |
| 194 (point-min-marker) | |
| 195 @result{} #<marker at 100 in markers.texi> | |
| 196 @end group | |
| 197 @group | |
| 198 (point-max-marker) | |
| 199 @result{} #<marker at 200 in markers.texi> | |
| 200 @end group | |
| 201 @end example | |
| 202 @end defun | |
| 203 | |
|
21007
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
204 @defun copy-marker marker-or-integer insertion-type |
| 6444 | 205 If passed a marker as its argument, @code{copy-marker} returns a |
| 206 new marker that points to the same place and the same buffer as does | |
| 207 @var{marker-or-integer}. If passed an integer as its argument, | |
| 208 @code{copy-marker} returns a new marker that points to position | |
| 209 @var{marker-or-integer} in the current buffer. | |
| 210 | |
|
21007
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
211 The new marker's insertion type is specified by the argument |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
212 @var{insertion-type}. @xref{Marker Insertion Types}. |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
213 |
| 6444 | 214 If passed an integer argument less than 1, @code{copy-marker} returns a |
| 215 new marker that points to the beginning of the current buffer. If | |
| 216 passed an integer argument greater than the length of the buffer, | |
| 217 @code{copy-marker} returns a new marker that points to the end of the | |
| 218 buffer. | |
| 219 | |
|
22138
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
220 @example |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
221 @group |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
222 (copy-marker 0) |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
223 @result{} #<marker at 1 in markers.texi> |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
224 @end group |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
225 |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
226 @group |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
227 (copy-marker 20000) |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
228 @result{} #<marker at 7572 in markers.texi> |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
229 @end group |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
230 @end example |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
231 |
| 6444 | 232 An error is signaled if @var{marker} is neither a marker nor an |
| 233 integer. | |
|
22138
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
234 @end defun |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
235 |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
236 Two distinct markers are considered @code{equal} (even though not |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
237 @code{eq}) to each other if they have the same position and buffer, or |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
238 if they both point nowhere. |
| 6444 | 239 |
| 240 @example | |
| 241 @group | |
| 242 (setq p (point-marker)) | |
| 243 @result{} #<marker at 2139 in markers.texi> | |
| 244 @end group | |
| 245 | |
| 246 @group | |
| 247 (setq q (copy-marker p)) | |
| 248 @result{} #<marker at 2139 in markers.texi> | |
| 249 @end group | |
| 250 | |
| 251 @group | |
| 252 (eq p q) | |
| 253 @result{} nil | |
| 254 @end group | |
| 255 | |
| 256 @group | |
| 257 (equal p q) | |
| 258 @result{} t | |
| 259 @end group | |
| 260 @end example | |
| 261 | |
| 262 @node Information from Markers | |
| 263 @section Information from Markers | |
| 264 | |
| 265 This section describes the functions for accessing the components of a | |
| 266 marker object. | |
| 267 | |
| 268 @defun marker-position marker | |
| 269 This function returns the position that @var{marker} points to, or | |
| 270 @code{nil} if it points nowhere. | |
| 271 @end defun | |
| 272 | |
| 273 @defun marker-buffer marker | |
| 274 This function returns the buffer that @var{marker} points into, or | |
| 275 @code{nil} if it points nowhere. | |
| 276 | |
| 277 @example | |
| 278 @group | |
| 279 (setq m (make-marker)) | |
| 280 @result{} #<marker in no buffer> | |
| 281 @end group | |
| 282 @group | |
| 283 (marker-position m) | |
| 284 @result{} nil | |
| 285 @end group | |
| 286 @group | |
| 287 (marker-buffer m) | |
| 288 @result{} nil | |
| 289 @end group | |
| 290 | |
| 291 @group | |
| 292 (set-marker m 3770 (current-buffer)) | |
| 293 @result{} #<marker at 3770 in markers.texi> | |
| 294 @end group | |
| 295 @group | |
| 296 (marker-buffer m) | |
| 297 @result{} #<buffer markers.texi> | |
| 298 @end group | |
| 299 @group | |
| 300 (marker-position m) | |
| 301 @result{} 3770 | |
| 302 @end group | |
| 303 @end example | |
| 304 @end defun | |
| 305 | |
| 26181 | 306 @defun buffer-has-markers-at position |
| 307 @tindex buffer-has-markers-at | |
| 308 This function returns @code{t} if one or more markers | |
| 309 point at position @var{position} in the current buffer. | |
| 310 @end defun | |
| 311 | |
|
21007
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
312 @node Marker Insertion Types |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
313 @section Marker Insertion Types |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
314 |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
315 @cindex insertion type of a marker |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
316 When you insert text directly at the place where a marker points, |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
317 there are two possible ways to relocate that marker: it can point before |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
318 the inserted text, or point after it. You can specify which one a given |
|
21682
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
319 marker should do by setting its @dfn{insertion type}. Note that use of |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
320 @code{insert-before-markers} ignores markers' insertion types, always |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
321 relocating a marker to point after the inserted text. |
|
21007
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
322 |
|
22138
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
323 @defun set-marker-insertion-type marker type |
|
21007
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
324 This function sets the insertion type of marker @var{marker} to |
|
22252
40089afa2b1d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
22138
diff
changeset
|
325 @var{type}. If @var{type} is @code{t}, @var{marker} will advance when |
|
40089afa2b1d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
22138
diff
changeset
|
326 text is inserted at its position. If @var{type} is @code{nil}, |
|
40089afa2b1d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
22138
diff
changeset
|
327 @var{marker} does not advance when text is inserted there. |
|
21007
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
328 @end defun |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
329 |
|
22138
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
330 @defun marker-insertion-type marker |
|
21007
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
331 This function reports the current insertion type of @var{marker}. |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
332 @end defun |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
333 |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
334 @node Moving Markers |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
335 @section Moving Marker Positions |
| 6444 | 336 |
| 337 This section describes how to change the position of an existing | |
| 338 marker. When you do this, be sure you know whether the marker is used | |
| 339 outside of your program, and, if so, what effects will result from | |
| 340 moving it---otherwise, confusing things may happen in other parts of | |
| 341 Emacs. | |
| 342 | |
| 343 @defun set-marker marker position &optional buffer | |
| 344 This function moves @var{marker} to @var{position} | |
| 345 in @var{buffer}. If @var{buffer} is not provided, it defaults to | |
| 346 the current buffer. | |
| 347 | |
| 348 If @var{position} is less than 1, @code{set-marker} moves @var{marker} | |
|
7729
a1c07008521d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6444
diff
changeset
|
349 to the beginning of the buffer. If @var{position} is greater than the |
|
a1c07008521d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6444
diff
changeset
|
350 size of the buffer, @code{set-marker} moves marker to the end of the |
|
a1c07008521d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6444
diff
changeset
|
351 buffer. If @var{position} is @code{nil} or a marker that points |
|
a1c07008521d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6444
diff
changeset
|
352 nowhere, then @var{marker} is set to point nowhere. |
| 6444 | 353 |
| 354 The value returned is @var{marker}. | |
| 355 | |
| 356 @example | |
| 357 @group | |
| 358 (setq m (point-marker)) | |
| 359 @result{} #<marker at 4714 in markers.texi> | |
| 360 @end group | |
| 361 @group | |
| 362 (set-marker m 55) | |
| 363 @result{} #<marker at 55 in markers.texi> | |
| 364 @end group | |
| 365 @group | |
| 366 (setq b (get-buffer "foo")) | |
| 367 @result{} #<buffer foo> | |
| 368 @end group | |
| 369 @group | |
| 370 (set-marker m 0 b) | |
| 371 @result{} #<marker at 1 in foo> | |
| 372 @end group | |
| 373 @end example | |
| 374 @end defun | |
| 375 | |
| 376 @defun move-marker marker position &optional buffer | |
| 377 This is another name for @code{set-marker}. | |
| 378 @end defun | |
| 379 | |
| 380 @node The Mark | |
| 381 @section The Mark | |
| 382 @cindex mark, the | |
| 383 @cindex mark ring | |
| 384 | |
| 385 One special marker in each buffer is designated @dfn{the mark}. It | |
| 386 records a position for the user for the sake of commands such as | |
|
22138
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
387 @code{kill-region} and @code{indent-rigidly}. Lisp programs should set |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
388 the mark only to values that have a potential use to the user, and never |
|
d4ac295a98b3
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21682
diff
changeset
|
389 for their own internal purposes. For example, the @code{replace-regexp} |
| 6444 | 390 command sets the mark to the value of point before doing any |
| 391 replacements, because this enables the user to move back there | |
| 392 conveniently after the replace is finished. | |
| 393 | |
| 394 Many commands are designed so that when called interactively they | |
| 395 operate on the text between point and the mark. If you are writing such | |
| 396 a command, don't examine the mark directly; instead, use | |
| 397 @code{interactive} with the @samp{r} specification. This provides the | |
| 398 values of point and the mark as arguments to the command in an | |
| 399 interactive call, but permits other Lisp programs to specify arguments | |
| 400 explicitly. @xref{Interactive Codes}. | |
| 401 | |
| 402 Each buffer has its own value of the mark that is independent of the | |
| 403 value of the mark in other buffers. When a buffer is created, the mark | |
| 404 exists but does not point anywhere. We consider this state as ``the | |
|
7729
a1c07008521d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6444
diff
changeset
|
405 absence of a mark in that buffer.'' |
| 6444 | 406 |
| 407 Once the mark ``exists'' in a buffer, it normally never ceases to | |
| 408 exist. However, it may become @dfn{inactive}, if Transient Mark mode is | |
|
21682
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
409 enabled. The variable @code{mark-active}, which is always buffer-local |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
410 in all buffers, indicates whether the mark is active: non-@code{nil} |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
411 means yes. A command can request deactivation of the mark upon return |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
412 to the editor command loop by setting @code{deactivate-mark} to a |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
413 non-@code{nil} value (but this causes deactivation only if Transient |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
414 Mark mode is enabled). |
| 6444 | 415 |
| 416 The main motivation for using Transient Mark mode is that this mode | |
| 417 also enables highlighting of the region when the mark is active. | |
| 418 @xref{Display}. | |
| 419 | |
| 420 In addition to the mark, each buffer has a @dfn{mark ring} which is a | |
| 421 list of markers containing previous values of the mark. When editing | |
| 422 commands change the mark, they should normally save the old value of the | |
| 423 mark on the mark ring. The variable @code{mark-ring-max} specifies the | |
| 424 maximum number of entries in the mark ring; once the list becomes this | |
| 425 long, adding a new element deletes the last element. | |
| 426 | |
| 26181 | 427 There is also a separate global mark ring, but that is used only in a |
| 428 few particular user-level commands, and is not relevant to Lisp | |
| 429 programming. So we do not describe it here. | |
| 430 | |
| 6444 | 431 @defun mark &optional force |
| 432 @cindex current buffer mark | |
| 433 This function returns the current buffer's mark position as an integer. | |
| 434 | |
| 435 If the mark is inactive, @code{mark} normally signals an error. | |
| 436 However, if @var{force} is non-@code{nil}, then @code{mark} returns the | |
| 437 mark position anyway---or @code{nil}, if the mark is not yet set for | |
| 438 this buffer. | |
| 439 @end defun | |
| 440 | |
| 441 @defun mark-marker | |
| 442 This function returns the current buffer's mark. This is the very marker | |
|
7729
a1c07008521d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6444
diff
changeset
|
443 that records the mark location inside Emacs, not a copy. Therefore, |
| 6444 | 444 changing this marker's position will directly affect the position of the mark. |
| 445 Don't do it unless that is the effect you want. | |
| 446 | |
| 447 @example | |
| 448 @group | |
| 449 (setq m (mark-marker)) | |
| 450 @result{} #<marker at 3420 in markers.texi> | |
| 451 @end group | |
| 452 @group | |
| 453 (set-marker m 100) | |
| 454 @result{} #<marker at 100 in markers.texi> | |
| 455 @end group | |
| 456 @group | |
| 457 (mark-marker) | |
| 458 @result{} #<marker at 100 in markers.texi> | |
| 459 @end group | |
| 460 @end example | |
| 461 | |
| 462 Like any marker, this marker can be set to point at any buffer you like. | |
| 463 We don't recommend that you make it point at any buffer other than the | |
| 464 one of which it is the mark. If you do, it will yield perfectly | |
| 465 consistent, but rather odd, results. | |
| 466 @end defun | |
| 467 | |
| 468 @ignore | |
| 469 @deffn Command set-mark-command jump | |
| 470 If @var{jump} is @code{nil}, this command sets the mark to the value | |
| 471 of point and pushes the previous value of the mark on the mark ring. The | |
| 472 message @samp{Mark set} is also displayed in the echo area. | |
| 473 | |
| 474 If @var{jump} is not @code{nil}, this command sets point to the value | |
| 475 of the mark, and sets the mark to the previous saved mark value, which | |
| 476 is popped off the mark ring. | |
| 477 | |
| 478 This function is @emph{only} intended for interactive use. | |
| 479 @end deffn | |
| 480 @end ignore | |
| 481 | |
| 482 @defun set-mark position | |
| 483 This function sets the mark to @var{position}, and activates the mark. | |
| 484 The old value of the mark is @emph{not} pushed onto the mark ring. | |
| 485 | |
| 7734 | 486 @strong{Please note:} Use this function only if you want the user to |
| 6444 | 487 see that the mark has moved, and you want the previous mark position to |
| 488 be lost. Normally, when a new mark is set, the old one should go on the | |
| 489 @code{mark-ring}. For this reason, most applications should use | |
| 490 @code{push-mark} and @code{pop-mark}, not @code{set-mark}. | |
| 491 | |
| 492 Novice Emacs Lisp programmers often try to use the mark for the wrong | |
| 493 purposes. The mark saves a location for the user's convenience. An | |
| 494 editing command should not alter the mark unless altering the mark is | |
| 495 part of the user-level functionality of the command. (And, in that | |
| 496 case, this effect should be documented.) To remember a location for | |
| 497 internal use in the Lisp program, store it in a Lisp variable. For | |
| 498 example: | |
| 499 | |
| 500 @example | |
| 501 @group | |
| 502 (let ((beg (point))) | |
| 503 (forward-line 1) | |
| 504 (delete-region beg (point))). | |
| 505 @end group | |
| 506 @end example | |
| 507 @end defun | |
| 508 | |
| 509 @c for interactive use only | |
| 510 @ignore | |
| 511 @deffn Command exchange-point-and-mark | |
| 512 This function exchanges the positions of point and the mark. | |
| 513 It is intended for interactive use. | |
| 514 @end deffn | |
| 515 @end ignore | |
| 516 | |
| 517 @defun push-mark &optional position nomsg activate | |
| 518 This function sets the current buffer's mark to @var{position}, and | |
| 519 pushes a copy of the previous mark onto @code{mark-ring}. If | |
| 520 @var{position} is @code{nil}, then the value of point is used. | |
| 521 @code{push-mark} returns @code{nil}. | |
| 522 | |
| 523 The function @code{push-mark} normally @emph{does not} activate the | |
| 524 mark. To do that, specify @code{t} for the argument @var{activate}. | |
| 525 | |
| 526 A @samp{Mark set} message is displayed unless @var{nomsg} is | |
| 527 non-@code{nil}. | |
| 528 @end defun | |
| 529 | |
| 530 @defun pop-mark | |
| 531 This function pops off the top element of @code{mark-ring} and makes | |
| 532 that mark become the buffer's actual mark. This does not move point in | |
| 533 the buffer, and it does nothing if @code{mark-ring} is empty. It | |
| 534 deactivates the mark. | |
| 535 | |
| 536 The return value is not meaningful. | |
| 537 @end defun | |
| 538 | |
| 539 @defopt transient-mark-mode | |
| 540 @cindex Transient Mark mode | |
| 12098 | 541 This variable if non-@code{nil} enables Transient Mark mode, in which |
| 542 every buffer-modifying primitive sets @code{deactivate-mark}. The | |
| 543 consequence of this is that commands that modify the buffer normally | |
| 544 make the mark inactive. | |
| 6444 | 545 @end defopt |
| 546 | |
|
21682
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
547 @defopt mark-even-if-inactive |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
548 If this is non-@code{nil}, Lisp programs and the Emacs user can use the |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
549 mark even when it is inactive. This option affects the behavior of |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
550 Transient Mark mode. When the option is non-@code{nil}, deactivation of |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
551 the mark turns off region highlighting, but commands that use the mark |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
552 behave as if the mark were still active. |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
553 @end defopt |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
554 |
| 6444 | 555 @defvar deactivate-mark |
| 556 If an editor command sets this variable non-@code{nil}, then the editor | |
|
21682
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
557 command loop deactivates the mark after the command returns (if |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
558 Transient Mark mode is enabled). All the primitives that change the |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
559 buffer set @code{deactivate-mark}, to deactivate the mark when the |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
560 command is finished. |
| 6444 | 561 @end defvar |
| 562 | |
|
7729
a1c07008521d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6444
diff
changeset
|
563 @defun deactivate-mark |
|
21682
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
564 This function deactivates the mark, if Transient Mark mode is enabled. |
|
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
565 Otherwise it does nothing. |
|
7729
a1c07008521d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6444
diff
changeset
|
566 @end defun |
|
a1c07008521d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6444
diff
changeset
|
567 |
| 6444 | 568 @defvar mark-active |
| 569 The mark is active when this variable is non-@code{nil}. This variable | |
|
21682
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
570 is always buffer-local in each buffer. |
| 6444 | 571 @end defvar |
| 572 | |
| 573 @defvar activate-mark-hook | |
| 574 @defvarx deactivate-mark-hook | |
| 575 These normal hooks are run, respectively, when the mark becomes active | |
|
21007
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
576 and when it becomes inactive. The hook @code{activate-mark-hook} is |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
577 also run at the end of a command if the mark is active and it is |
|
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
12098
diff
changeset
|
578 possible that the region may have changed. |
| 6444 | 579 @end defvar |
| 580 | |
| 581 @defvar mark-ring | |
| 582 The value of this buffer-local variable is the list of saved former | |
| 583 marks of the current buffer, most recent first. | |
| 584 | |
| 585 @example | |
| 586 @group | |
| 587 mark-ring | |
| 588 @result{} (#<marker at 11050 in markers.texi> | |
| 589 #<marker at 10832 in markers.texi> | |
| 590 @dots{}) | |
| 591 @end group | |
| 592 @end example | |
| 593 @end defvar | |
| 594 | |
| 595 @defopt mark-ring-max | |
| 596 The value of this variable is the maximum size of @code{mark-ring}. If | |
| 597 more marks than this are pushed onto the @code{mark-ring}, | |
| 598 @code{push-mark} discards an old mark when it adds a new one. | |
| 599 @end defopt | |
| 600 | |
| 601 @node The Region | |
| 602 @section The Region | |
| 603 @cindex region, the | |
| 604 | |
| 605 The text between point and the mark is known as @dfn{the region}. | |
| 606 Various functions operate on text delimited by point and the mark, but | |
| 607 only those functions specifically related to the region itself are | |
| 608 described here. | |
| 609 | |
| 610 @defun region-beginning | |
| 611 This function returns the position of the beginning of the region (as | |
| 612 an integer). This is the position of either point or the mark, | |
| 613 whichever is smaller. | |
| 614 | |
| 615 If the mark does not point anywhere, an error is signaled. | |
| 616 @end defun | |
| 617 | |
| 618 @defun region-end | |
| 619 This function returns the position of the end of the region (as an | |
| 620 integer). This is the position of either point or the mark, whichever is | |
| 621 larger. | |
| 622 | |
| 623 If the mark does not point anywhere, an error is signaled. | |
| 624 @end defun | |
| 625 | |
| 626 Few programs need to use the @code{region-beginning} and | |
| 627 @code{region-end} functions. A command designed to operate on a region | |
| 628 should normally use @code{interactive} with the @samp{r} specification | |
| 629 to find the beginning and end of the region. This lets other Lisp | |
| 630 programs specify the bounds explicitly as arguments. (@xref{Interactive | |
| 631 Codes}.) |
