* lisp/emacs-lisp/trace.el (trace--read-args): Use a closure and an honest
[bpt/emacs.git] / src / buffer.h
CommitLineData
b3ec245a 1/* Header file for the buffer manipulation primitives.
e9bffc61 2
ab422c4d
PE
3Copyright (C) 1985-1986, 1993-1995, 1997-2013 Free Software Foundation,
4Inc.
b3ec245a
JB
5
6This file is part of GNU Emacs.
7
b9b1cc14 8GNU Emacs is free software: you can redistribute it and/or modify
b3ec245a 9it under the terms of the GNU General Public License as published by
b9b1cc14
GM
10the Free Software Foundation, either version 3 of the License, or
11(at your option) any later version.
b3ec245a
JB
12
13GNU Emacs is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
b9b1cc14 19along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
b3ec245a 20
dfb3f755 21#include <sys/types.h> /* for off_t, time_t */
d35af63c 22#include "systime.h" /* for EMACS_TIME */
b3ec245a 23
f162bcc3
PE
24INLINE_HEADER_BEGIN
25#ifndef BUFFER_INLINE
26# define BUFFER_INLINE INLINE
27#endif
28
69f9064e 29/* Accessing the parameters of the current buffer. */
1b92beaf 30
69f9064e
RS
31/* These macros come in pairs, one for the char position
32 and one for the byte position. */
b3ec245a 33
177c0ea7 34/* Position of beginning of buffer. */
b3ec245a 35#define BEG (1)
8aa91000 36#define BEG_BYTE (BEG)
b3ec245a 37
177c0ea7 38/* Position of beginning of accessible range of buffer. */
c1ea566e 39#define BEGV (current_buffer->begv)
69f9064e 40#define BEGV_BYTE (current_buffer->begv_byte)
b3ec245a 41
69f9064e 42/* Position of point in buffer. The "+ 0" makes this
177c0ea7 43 not an l-value, so you can't assign to it. Use SET_PT instead. */
c1ea566e 44#define PT (current_buffer->pt + 0)
69f9064e 45#define PT_BYTE (current_buffer->pt_byte + 0)
b3ec245a 46
177c0ea7 47/* Position of gap in buffer. */
c1ea566e 48#define GPT (current_buffer->text->gpt)
69f9064e 49#define GPT_BYTE (current_buffer->text->gpt_byte)
b3ec245a 50
177c0ea7 51/* Position of end of accessible range of buffer. */
c1ea566e 52#define ZV (current_buffer->zv)
69f9064e 53#define ZV_BYTE (current_buffer->zv_byte)
b3ec245a 54
177c0ea7 55/* Position of end of buffer. */
c1ea566e 56#define Z (current_buffer->text->z)
69f9064e 57#define Z_BYTE (current_buffer->text->z_byte)
b3ec245a 58
69f9064e 59/* Macros for the addresses of places in the buffer. */
b3ec245a 60
177c0ea7 61/* Address of beginning of buffer. */
c1ea566e 62#define BEG_ADDR (current_buffer->text->beg)
b3ec245a 63
177c0ea7 64/* Address of beginning of accessible range of buffer. */
69f9064e 65#define BEGV_ADDR (BYTE_POS_ADDR (current_buffer->begv_byte))
b3ec245a 66
177c0ea7 67/* Address of point in buffer. */
69f9064e 68#define PT_ADDR (BYTE_POS_ADDR (current_buffer->pt_byte))
b3ec245a 69
177c0ea7 70/* Address of beginning of gap in buffer. */
d895183d 71#define GPT_ADDR (current_buffer->text->beg + current_buffer->text->gpt_byte - BEG_BYTE)
b3ec245a
JB
72
73/* Address of end of gap in buffer. */
d895183d 74#define GAP_END_ADDR (current_buffer->text->beg + current_buffer->text->gpt_byte + current_buffer->text->gap_size - BEG_BYTE)
b3ec245a 75
177c0ea7 76/* Address of end of accessible range of buffer. */
69f9064e 77#define ZV_ADDR (BYTE_POS_ADDR (current_buffer->zv_byte))
96b65d4e 78
177c0ea7 79/* Address of end of buffer. */
d895183d 80#define Z_ADDR (current_buffer->text->beg + current_buffer->text->gap_size + current_buffer->text->z_byte - BEG_BYTE)
b3ec245a
JB
81
82/* Size of gap. */
c1ea566e 83#define GAP_SIZE (current_buffer->text->gap_size)
b3ec245a 84
69f9064e
RS
85/* Is the current buffer narrowed? */
86#define NARROWED ((BEGV != BEG) || (ZV != Z))
87
88/* Modification count. */
89#define MODIFF (current_buffer->text->modiff)
90
3e145152
CY
91/* Character modification count. */
92#define CHARS_MODIFF (current_buffer->text->chars_modiff)
93
69f9064e
RS
94/* Overlay modification count. */
95#define OVERLAY_MODIFF (current_buffer->text->overlay_modiff)
96
97/* Modification count as of last visit or save. */
98#define SAVE_MODIFF (current_buffer->text->save_modiff)
99
100/* BUFFER_CEILING_OF (resp. BUFFER_FLOOR_OF), when applied to n, return
101 the max (resp. min) p such that
102
103 BYTE_POS_ADDR (p) - BYTE_POS_ADDR (n) == p - n */
104
105#define BUFFER_CEILING_OF(BYTEPOS) \
106 (((BYTEPOS) < GPT_BYTE && GPT < ZV ? GPT_BYTE : ZV_BYTE) - 1)
107#define BUFFER_FLOOR_OF(BYTEPOS) \
108 (BEGV <= GPT && GPT_BYTE <= (BYTEPOS) ? GPT_BYTE : BEGV_BYTE)
109\f
110/* Similar macros to operate on a specified buffer.
b3ec245a
JB
111 Note that many of these evaluate the buffer argument more than once. */
112
177c0ea7 113/* Position of beginning of buffer. */
d895183d
SM
114#define BUF_BEG(buf) (BEG)
115#define BUF_BEG_BYTE(buf) (BEG_BYTE)
b3ec245a 116
cffc6f3b
CY
117/* The BUF_BEGV[_BYTE], BUF_ZV[_BYTE], and BUF_PT[_BYTE] macros cannot
118 be used for assignment; use SET_BUF_* macros below for that. */
ce5b453a 119
177c0ea7 120/* Position of beginning of accessible range of buffer. */
cffc6f3b
CY
121#define BUF_BEGV(buf) \
122 (buf == current_buffer ? BEGV \
123 : NILP (BVAR (buf, begv_marker)) ? buf->begv \
124 : marker_position (BVAR (buf, begv_marker)))
125
126#define BUF_BEGV_BYTE(buf) \
127 (buf == current_buffer ? BEGV_BYTE \
128 : NILP (BVAR (buf, begv_marker)) ? buf->begv_byte \
129 : marker_byte_position (BVAR (buf, begv_marker)))
b3ec245a 130
177c0ea7 131/* Position of point in buffer. */
cffc6f3b
CY
132#define BUF_PT(buf) \
133 (buf == current_buffer ? PT \
134 : NILP (BVAR (buf, pt_marker)) ? buf->pt \
135 : marker_position (BVAR (buf, pt_marker)))
136
137#define BUF_PT_BYTE(buf) \
138 (buf == current_buffer ? PT_BYTE \
139 : NILP (BVAR (buf, pt_marker)) ? buf->pt_byte \
140 : marker_byte_position (BVAR (buf, pt_marker)))
141
142/* Position of end of accessible range of buffer. */
143#define BUF_ZV(buf) \
144 (buf == current_buffer ? ZV \
145 : NILP (BVAR (buf, zv_marker)) ? buf->zv \
146 : marker_position (BVAR (buf, zv_marker)))
147
148#define BUF_ZV_BYTE(buf) \
149 (buf == current_buffer ? ZV_BYTE \
150 : NILP (BVAR (buf, zv_marker)) ? buf->zv_byte \
151 : marker_byte_position (BVAR (buf, zv_marker)))
b3ec245a 152
177c0ea7 153/* Position of gap in buffer. */
c1ea566e 154#define BUF_GPT(buf) ((buf)->text->gpt)
69f9064e 155#define BUF_GPT_BYTE(buf) ((buf)->text->gpt_byte)
b3ec245a 156
177c0ea7 157/* Position of end of buffer. */
c1ea566e 158#define BUF_Z(buf) ((buf)->text->z)
69f9064e
RS
159#define BUF_Z_BYTE(buf) ((buf)->text->z_byte)
160
161/* Address of beginning of buffer. */
162#define BUF_BEG_ADDR(buf) ((buf)->text->beg)
163
164/* Address of beginning of gap of buffer. */
d895183d 165#define BUF_GPT_ADDR(buf) ((buf)->text->beg + (buf)->text->gpt_byte - BEG_BYTE)
69f9064e
RS
166
167/* Address of end of buffer. */
d895183d 168#define BUF_Z_ADDR(buf) ((buf)->text->beg + (buf)->text->gap_size + (buf)->text->z_byte - BEG_BYTE)
69f9064e
RS
169
170/* Address of end of gap in buffer. */
d895183d 171#define BUF_GAP_END_ADDR(buf) ((buf)->text->beg + (buf)->text->gpt_byte + (buf)->text->gap_size - BEG_BYTE)
b3ec245a 172
69f9064e
RS
173/* Size of gap. */
174#define BUF_GAP_SIZE(buf) ((buf)->text->gap_size)
175
176/* Is this buffer narrowed? */
c1ea566e
RS
177#define BUF_NARROWED(buf) ((BUF_BEGV (buf) != BUF_BEG (buf)) \
178 || (BUF_ZV (buf) != BUF_Z (buf)))
e12f3519 179
b3ec245a 180/* Modification count. */
c1ea566e
RS
181#define BUF_MODIFF(buf) ((buf)->text->modiff)
182
3e145152
CY
183/* Character modification count. */
184#define BUF_CHARS_MODIFF(buf) ((buf)->text->chars_modiff)
185
c1ea566e
RS
186/* Modification count as of last visit or save. */
187#define BUF_SAVE_MODIFF(buf) ((buf)->text->save_modiff)
188
2e50b9cc
RS
189/* Overlay modification count. */
190#define BUF_OVERLAY_MODIFF(buf) ((buf)->text->overlay_modiff)
191
0b5397c2
SM
192/* Modification count as of last auto-save. */
193/* FIXME: should we move this into ->text->auto_save_modiff? */
194#define BUF_AUTOSAVE_MODIFF(buf) ((buf)->auto_save_modified)
195
f9e7c67e
DA
196/* Compaction count. */
197#define BUF_COMPACT(buf) ((buf)->text->compact)
198
c1ea566e
RS
199/* Marker chain of buffer. */
200#define BUF_MARKERS(buf) ((buf)->text->markers)
133a3962
GM
201
202#define BUF_UNCHANGED_MODIFIED(buf) \
203 ((buf)->text->unchanged_modified)
204
205#define BUF_OVERLAY_UNCHANGED_MODIFIED(buf) \
206 ((buf)->text->overlay_unchanged_modified)
207#define BUF_BEG_UNCHANGED(buf) ((buf)->text->beg_unchanged)
208#define BUF_END_UNCHANGED(buf) ((buf)->text->end_unchanged)
209
210#define UNCHANGED_MODIFIED \
211 BUF_UNCHANGED_MODIFIED (current_buffer)
212#define OVERLAY_UNCHANGED_MODIFIED \
213 BUF_OVERLAY_UNCHANGED_MODIFIED (current_buffer)
214#define BEG_UNCHANGED BUF_BEG_UNCHANGED (current_buffer)
215#define END_UNCHANGED BUF_END_UNCHANGED (current_buffer)
216
217/* Compute how many characters at the top and bottom of BUF are
218 unchanged when the range START..END is modified. This computation
219 must be done each time BUF is modified. */
220
221#define BUF_COMPUTE_UNCHANGED(buf, start, end) \
222 do \
223 { \
9a6bd51a
GM
224 if (BUF_UNCHANGED_MODIFIED (buf) == BUF_MODIFF (buf) \
225 && (BUF_OVERLAY_UNCHANGED_MODIFIED (buf) \
226 == BUF_OVERLAY_MODIFF (buf))) \
133a3962
GM
227 { \
228 BUF_BEG_UNCHANGED (buf) = (start) - BUF_BEG (buf); \
229 BUF_END_UNCHANGED (buf) = BUF_Z (buf) - (end); \
230 } \
231 else \
232 { \
233 if (BUF_Z (buf) - (end) < BUF_END_UNCHANGED (buf)) \
234 BUF_END_UNCHANGED (buf) = BUF_Z (buf) - (end); \
235 if ((start) - BUF_BEG (buf) < BUF_BEG_UNCHANGED (buf)) \
236 BUF_BEG_UNCHANGED (buf) = (start) - BUF_BEG (buf); \
237 } \
238 } \
239 while (0)
177c0ea7 240
69f9064e 241\f
33f1148d 242/* Macros to set PT in the current buffer, or another buffer. */
b3ec245a 243
6ba7f443 244#define SET_PT(position) (set_point (position))
69f9064e 245#define TEMP_SET_PT(position) (temp_set_point (current_buffer, (position)))
b3ec245a 246
6ba7f443 247#define SET_PT_BOTH(position, byte) (set_point_both (position, byte))
69f9064e
RS
248#define TEMP_SET_PT_BOTH(position, byte) \
249 (temp_set_point_both (current_buffer, (position), (byte)))
96b65d4e 250
69f9064e
RS
251#define BUF_TEMP_SET_PT(buffer, position) \
252 (temp_set_point ((buffer), (position)))
96b65d4e 253
d311d28c
PE
254extern void set_point (ptrdiff_t);
255extern void temp_set_point (struct buffer *, ptrdiff_t);
256extern void set_point_both (ptrdiff_t, ptrdiff_t);
b7982059 257extern void temp_set_point_both (struct buffer *,
d311d28c
PE
258 ptrdiff_t, ptrdiff_t);
259extern void enlarge_buffer_text (struct buffer *, ptrdiff_t);
b3ec245a 260
69f9064e
RS
261\f
262/* Macros for setting the BEGV, ZV or PT of a given buffer.
263
69f9064e
RS
264 The ..._BOTH macros take both a charpos and a bytepos,
265 which must correspond to each other.
266
267 The macros without ..._BOTH take just a charpos,
268 and compute the bytepos from it. */
b3ec245a 269
69f9064e
RS
270#define SET_BUF_BEGV(buf, charpos) \
271 ((buf)->begv_byte = buf_charpos_to_bytepos ((buf), (charpos)), \
272 (buf)->begv = (charpos))
273
274#define SET_BUF_ZV(buf, charpos) \
275 ((buf)->zv_byte = buf_charpos_to_bytepos ((buf), (charpos)), \
276 (buf)->zv = (charpos))
277
278#define SET_BUF_BEGV_BOTH(buf, charpos, byte) \
279 ((buf)->begv = (charpos), \
280 (buf)->begv_byte = (byte))
281
282#define SET_BUF_ZV_BOTH(buf, charpos, byte) \
283 ((buf)->zv = (charpos), \
284 (buf)->zv_byte = (byte))
285
286#define SET_BUF_PT_BOTH(buf, charpos, byte) \
287 ((buf)->pt = (charpos), \
288 (buf)->pt_byte = (byte))
289\f
290/* Macros to access a character or byte in the current buffer,
291 or convert between a byte position and an address.
292 These macros do not check that the position is in range. */
293
294/* Access a Lisp position value in POS,
8b4baa7b 295 and store the charpos in CHARPOS and the bytepos in BYTEPOS. */
69f9064e
RS
296
297#define DECODE_POSITION(charpos, bytepos, pos) \
92413ef3 298do \
69f9064e
RS
299 { \
300 Lisp_Object __pos = (pos); \
301 if (NUMBERP (__pos)) \
302 { \
303 charpos = __pos; \
304 bytepos = buf_charpos_to_bytepos (current_buffer, __pos); \
305 } \
306 else if (MARKERP (__pos)) \
307 { \
308 charpos = marker_position (__pos); \
309 bytepos = marker_byte_position (__pos); \
310 } \
311 else \
312 wrong_type_argument (Qinteger_or_marker_p, __pos); \
313 } \
92413ef3 314while (0)
69f9064e 315
d1f3d2af
PE
316/* Maximum number of bytes in a buffer.
317 A buffer cannot contain more bytes than a 1-origin fixnum can represent,
28177add
PE
318 nor can it be so large that C pointer arithmetic stops working.
319 The ptrdiff_t cast ensures that this is signed, not unsigned. */
320#define BUF_BYTES_MAX \
321 (ptrdiff_t) min (MOST_POSITIVE_FIXNUM - 1, min (SIZE_MAX, PTRDIFF_MAX))
d1f3d2af 322
eefd7278
DA
323/* Maximum gap size after compact_buffer, in bytes. Also
324 used in make_gap_larger to get some extra reserved space. */
325
326#define GAP_BYTES_DFL 2000
327
328/* Minimum gap size after compact_buffer, in bytes. Also
329 used in make_gap_smaller to avoid too small gap size. */
330
331#define GAP_BYTES_MIN 20
332
69f9064e
RS
333/* Return the address of byte position N in current buffer. */
334
335#define BYTE_POS_ADDR(n) \
d895183d 336 (((n) >= GPT_BYTE ? GAP_SIZE : 0) + (n) + BEG_ADDR - BEG_BYTE)
69f9064e
RS
337
338/* Return the address of char position N. */
339
340#define CHAR_POS_ADDR(n) \
341 (((n) >= GPT ? GAP_SIZE : 0) \
342 + buf_charpos_to_bytepos (current_buffer, n) \
d895183d 343 + BEG_ADDR - BEG_BYTE)
69f9064e
RS
344
345/* Convert a character position to a byte position. */
346
347#define CHAR_TO_BYTE(charpos) \
348 (buf_charpos_to_bytepos (current_buffer, charpos))
349
350/* Convert a byte position to a character position. */
351
352#define BYTE_TO_CHAR(bytepos) \
353 (buf_bytepos_to_charpos (current_buffer, bytepos))
354
355/* Convert PTR, the address of a byte in the buffer, into a byte position. */
356
357#define PTR_BYTE_POS(ptr) \
358((ptr) - (current_buffer)->text->beg \
55daad71 359 - (ptr - (current_buffer)->text->beg <= GPT_BYTE - BEG_BYTE ? 0 : GAP_SIZE) \
d895183d 360 + BEG_BYTE)
69f9064e 361
2f8e16b2
EZ
362/* Return character at byte position POS. See the caveat WARNING for
363 FETCH_MULTIBYTE_CHAR below. */
69f9064e
RS
364
365#define FETCH_CHAR(pos) \
4b4deea2 366 (!NILP (BVAR (current_buffer, enable_multibyte_characters)) \
69f9064e
RS
367 ? FETCH_MULTIBYTE_CHAR ((pos)) \
368 : FETCH_BYTE ((pos)))
369
370/* Return the byte at byte position N. */
371
372#define FETCH_BYTE(n) *(BYTE_POS_ADDR ((n)))
373
ce5b453a 374/* Return character at byte position POS. If the current buffer is unibyte
feb3066c
KH
375 and the character is not ASCII, make the returning character
376 multibyte. */
377
378#define FETCH_CHAR_AS_MULTIBYTE(pos) \
4b4deea2 379 (!NILP (BVAR (current_buffer, enable_multibyte_characters)) \
feb3066c 380 ? FETCH_MULTIBYTE_CHAR ((pos)) \
4c0354d7 381 : UNIBYTE_TO_CHAR (FETCH_BYTE ((pos))))
feb3066c 382
69f9064e
RS
383\f
384/* Macros for accessing a character or byte,
385 or converting between byte positions and addresses,
386 in a specified buffer. */
387
177c0ea7 388/* Return the address of character at byte position POS in buffer BUF.
b3ec245a 389 Note that both arguments can be computed more than once. */
69f9064e
RS
390
391#define BUF_BYTE_ADDRESS(buf, pos) \
d895183d 392((buf)->text->beg + (pos) - BEG_BYTE \
69f9064e
RS
393 + ((pos) >= (buf)->text->gpt_byte ? (buf)->text->gap_size : 0))
394
177c0ea7 395/* Return the address of character at char position POS in buffer BUF.
69f9064e
RS
396 Note that both arguments can be computed more than once. */
397
398#define BUF_CHAR_ADDRESS(buf, pos) \
d895183d 399((buf)->text->beg + buf_charpos_to_bytepos ((buf), (pos)) - BEG_BYTE \
c1ea566e 400 + ((pos) >= (buf)->text->gpt ? (buf)->text->gap_size : 0))
b3ec245a 401
69f9064e
RS
402/* Convert PTR, the address of a char in buffer BUF,
403 into a character position. */
790f39e7 404
69f9064e
RS
405#define BUF_PTR_BYTE_POS(buf, ptr) \
406((ptr) - (buf)->text->beg \
55daad71 407 - (ptr - (buf)->text->beg <= BUF_GPT_BYTE (buf) - BEG_BYTE \
69f9064e 408 ? 0 : BUF_GAP_SIZE ((buf))) \
d895183d 409 + BEG_BYTE)
69f9064e
RS
410
411/* Return the character at byte position POS in buffer BUF. */
412
413#define BUF_FETCH_CHAR(buf, pos) \
414 (!NILP (buf->enable_multibyte_characters) \
415 ? BUF_FETCH_MULTIBYTE_CHAR ((buf), (pos)) \
416 : BUF_FETCH_BYTE ((buf), (pos)))
417
418/* Return the byte at byte position N in buffer BUF. */
419
420#define BUF_FETCH_BYTE(buf, n) \
421 *(BUF_BYTE_ADDRESS ((buf), (n)))
b3ec245a 422\f
69f9064e
RS
423/* Define the actual buffer data structures. */
424
425/* This data structure describes the actual text contents of a buffer.
426 It is shared between indirect buffers and their base buffer. */
427
b3ec245a
JB
428struct buffer_text
429 {
0afdfe38
GM
430 /* Actual address of buffer contents. If REL_ALLOC is defined,
431 this address might change when blocks are relocated which can
432 e.g. happen when malloc is called. So, don't pass a pointer
433 into a buffer's text to functions that malloc. */
434 unsigned char *beg;
177c0ea7 435
d311d28c
PE
436 ptrdiff_t gpt; /* Char pos of gap in buffer. */
437 ptrdiff_t z; /* Char pos of end of buffer. */
438 ptrdiff_t gpt_byte; /* Byte pos of gap in buffer. */
439 ptrdiff_t z_byte; /* Byte pos of end of buffer. */
440 ptrdiff_t gap_size; /* Size of buffer's gap. */
441 EMACS_INT modiff; /* This counts buffer-modification events
b3ec245a
JB
442 for this buffer. It is incremented for
443 each such event, and never otherwise
444 changed. */
d311d28c 445 EMACS_INT chars_modiff; /* This is modified with character change
3e145152
CY
446 events for this buffer. It is set to
447 modiff for each such event, and never
448 otherwise changed. */
d311d28c 449 EMACS_INT save_modiff; /* Previous value of modiff, as of last
c1ea566e
RS
450 time buffer visited or saved a file. */
451
d311d28c 452 EMACS_INT overlay_modiff; /* Counts modifications to overlays. */
2e50b9cc 453
9cd47b72
DA
454 EMACS_INT compact; /* Set to modiff each time when compact_buffer
455 is called for this buffer. */
456
133a3962 457 /* Minimum value of GPT - BEG since last redisplay that finished. */
d311d28c 458 ptrdiff_t beg_unchanged;
133a3962
GM
459
460 /* Minimum value of Z - GPT since last redisplay that finished. */
d311d28c 461 ptrdiff_t end_unchanged;
133a3962
GM
462
463 /* MODIFF as of last redisplay that finished; if it matches MODIFF,
464 beg_unchanged and end_unchanged contain no useful information. */
d311d28c 465 EMACS_INT unchanged_modified;
133a3962
GM
466
467 /* BUF_OVERLAY_MODIFF of current buffer, as of last redisplay that
468 finished; if it matches BUF_OVERLAY_MODIFF, beg_unchanged and
469 end_unchanged contain no useful information. */
d311d28c 470 EMACS_INT overlay_unchanged_modified;
133a3962 471
bb4fee02
DL
472 /* Properties of this buffer's text. */
473 INTERVAL intervals;
c1ea566e
RS
474
475 /* The markers that refer to this buffer.
476 This is actually a single marker ---
477 successive elements in its marker `chain'
ce5b453a
SM
478 are the other markers referring to this buffer.
479 This is a singly linked unordered list, which means that it's
480 very cheap to add a marker to the list and it's also very cheap
481 to move a marker within a buffer. */
568c168c 482 struct Lisp_Marker *markers;
e9728cc0
KH
483
484 /* Usually 0. Temporarily set to 1 in decode_coding_gap to
cf503f7c 485 prevent Fgarbage_collect from shrinking the gap and losing
e9728cc0 486 not-yet-decoded bytes. */
37ef52bb 487 bool inhibit_shrinking;
b3ec245a
JB
488 };
489
e34f7f79 490/* Most code should use this macro to access Lisp fields in struct buffer. */
5d8ea120 491
e34f7f79 492#define BVAR(buf, field) ((buf)->INTERNAL_FIELD (field))
5d8ea120 493
69f9064e
RS
494/* This is the structure that the buffer Lisp object points to. */
495
b3ec245a 496struct buffer
82b911fd 497{
b102ceb1 498 struct vectorlike_header header;
82b911fd 499
82b911fd 500 /* The name of this buffer. */
e34f7f79 501 Lisp_Object INTERNAL_FIELD (name);
82b911fd
GM
502
503 /* The name of the file visited in this buffer, or nil. */
e34f7f79 504 Lisp_Object INTERNAL_FIELD (filename);
36429c89
DA
505
506 /* Directory for expanding relative file names. */
e34f7f79 507 Lisp_Object INTERNAL_FIELD (directory);
36429c89
DA
508
509 /* True if this buffer has been backed up (if you write to the visited
510 file and it hasn't been backed up, then a backup will be made). */
e34f7f79 511 Lisp_Object INTERNAL_FIELD (backed_up);
36429c89 512
82b911fd 513 /* Length of file when last read or saved.
4be941e3
RS
514 -1 means auto saving turned off because buffer shrank a lot.
515 -2 means don't turn off auto saving if buffer shrinks.
516 (That value is used with buffer-swap-text.)
82b911fd
GM
517 This is not in the struct buffer_text
518 because it's not used in indirect buffers at all. */
e34f7f79 519 Lisp_Object INTERNAL_FIELD (save_length);
36429c89 520
82b911fd
GM
521 /* File name used for auto-saving this buffer.
522 This is not in the struct buffer_text
523 because it's not used in indirect buffers at all. */
e34f7f79 524 Lisp_Object INTERNAL_FIELD (auto_save_file_name);
82b911fd
GM
525
526 /* Non-nil if buffer read-only. */
e34f7f79 527 Lisp_Object INTERNAL_FIELD (read_only);
36429c89 528
82b911fd
GM
529 /* "The mark". This is a marker which may
530 point into this buffer or may point nowhere. */
e34f7f79 531 Lisp_Object INTERNAL_FIELD (mark);
82b911fd 532
8653cf0a
CY
533 /* Alist of elements (SYMBOL . VALUE-IN-THIS-BUFFER) for all
534 per-buffer variables of this buffer. For locally unbound
535 symbols, just the symbol appears as the element. */
e34f7f79 536 Lisp_Object INTERNAL_FIELD (local_var_alist);
82b911fd 537
36429c89 538 /* Symbol naming major mode (e.g., lisp-mode). */
e34f7f79 539 Lisp_Object INTERNAL_FIELD (major_mode);
36429c89
DA
540
541 /* Pretty name of major mode (e.g., "Lisp"). */
e34f7f79 542 Lisp_Object INTERNAL_FIELD (mode_name);
36429c89 543
82b911fd 544 /* Mode line element that controls format of mode line. */
e34f7f79 545 Lisp_Object INTERNAL_FIELD (mode_line_format);
517e7945 546
82b911fd
GM
547 /* Analogous to mode_line_format for the line displayed at the top
548 of windows. Nil means don't display that line. */
e34f7f79 549 Lisp_Object INTERNAL_FIELD (header_line_format);
82b911fd
GM
550
551 /* Keys that are bound local to this buffer. */
e34f7f79 552 Lisp_Object INTERNAL_FIELD (keymap);
36429c89 553
82b911fd 554 /* This buffer's local abbrev table. */
e34f7f79 555 Lisp_Object INTERNAL_FIELD (abbrev_table);
36429c89 556
82b911fd 557 /* This buffer's syntax table. */
e34f7f79 558 Lisp_Object INTERNAL_FIELD (syntax_table);
36429c89 559
82b911fd 560 /* This buffer's category table. */
e34f7f79 561 Lisp_Object INTERNAL_FIELD (category_table);
82b911fd 562
33f1148d 563 /* Values of several buffer-local variables. */
82b911fd 564 /* tab-width is buffer-local so that redisplay can find it
33f1148d 565 in buffers that are not current. */
e34f7f79
DA
566 Lisp_Object INTERNAL_FIELD (case_fold_search);
567 Lisp_Object INTERNAL_FIELD (tab_width);
568 Lisp_Object INTERNAL_FIELD (fill_column);
569 Lisp_Object INTERNAL_FIELD (left_margin);
36429c89 570
82b911fd 571 /* Function to call when insert space past fill column. */
e34f7f79 572 Lisp_Object INTERNAL_FIELD (auto_fill_function);
82b911fd
GM
573
574 /* Case table for case-conversion in this buffer.
575 This char-table maps each char into its lower-case version. */
e34f7f79 576 Lisp_Object INTERNAL_FIELD (downcase_table);
36429c89 577
82b911fd 578 /* Char-table mapping each char to its upper-case version. */
e34f7f79 579 Lisp_Object INTERNAL_FIELD (upcase_table);
36429c89 580
82b911fd 581 /* Char-table for conversion for case-folding search. */
e34f7f79 582 Lisp_Object INTERNAL_FIELD (case_canon_table);
36429c89 583
82b911fd 584 /* Char-table of equivalences for case-folding search. */
e34f7f79 585 Lisp_Object INTERNAL_FIELD (case_eqv_table);
82b911fd
GM
586
587 /* Non-nil means do not display continuation lines. */
e34f7f79 588 Lisp_Object INTERNAL_FIELD (truncate_lines);
36429c89 589
b0998719 590 /* Non-nil means to use word wrapping when displaying continuation lines. */
e34f7f79 591 Lisp_Object INTERNAL_FIELD (word_wrap);
36429c89 592
82b911fd 593 /* Non-nil means display ctl chars with uparrow. */
e34f7f79 594 Lisp_Object INTERNAL_FIELD (ctl_arrow);
36429c89 595
f44e260c
EZ
596 /* Non-nil means reorder bidirectional text for display in the
597 visual order. */
e34f7f79 598 Lisp_Object INTERNAL_FIELD (bidi_display_reordering);
36429c89 599
c143c213
EZ
600 /* If non-nil, specifies which direction of text to force in all the
601 paragraphs of the buffer. Nil means determine paragraph
602 direction dynamically for each paragraph. */
e34f7f79 603 Lisp_Object INTERNAL_FIELD (bidi_paragraph_direction);
36429c89 604
82b911fd
GM
605 /* Non-nil means do selective display;
606 see doc string in syms_of_buffer (buffer.c) for details. */
e34f7f79 607 Lisp_Object INTERNAL_FIELD (selective_display);
36429c89 608
82b911fd 609 /* Non-nil means show ... at end of line followed by invisible lines. */
e34f7f79 610 Lisp_Object INTERNAL_FIELD (selective_display_ellipses);
36429c89 611
82b911fd 612 /* Alist of (FUNCTION . STRING) for each minor mode enabled in buffer. */
e34f7f79 613 Lisp_Object INTERNAL_FIELD (minor_modes);
36429c89 614
82b911fd
GM
615 /* t if "self-insertion" should overwrite; `binary' if it should also
616 overwrite newlines and tabs - for editing executables and the like. */
e34f7f79 617 Lisp_Object INTERNAL_FIELD (overwrite_mode);
36429c89
DA
618
619 /* Non-nil means abbrev mode is on. Expand abbrevs automatically. */
e34f7f79 620 Lisp_Object INTERNAL_FIELD (abbrev_mode);
36429c89 621
82b911fd 622 /* Display table to use for text in this buffer. */
e34f7f79 623 Lisp_Object INTERNAL_FIELD (display_table);
36429c89 624
82b911fd 625 /* t means the mark and region are currently active. */
e34f7f79 626 Lisp_Object INTERNAL_FIELD (mark_active);
82b911fd 627
82b911fd
GM
628 /* Non-nil means the buffer contents are regarded as multi-byte
629 form of characters, not a binary code. */
e34f7f79 630 Lisp_Object INTERNAL_FIELD (enable_multibyte_characters);
82b911fd
GM
631
632 /* Coding system to be used for encoding the buffer contents on
633 saving. */
e34f7f79 634 Lisp_Object INTERNAL_FIELD (buffer_file_coding_system);
82b911fd 635
33f1148d 636 /* List of symbols naming the file format used for visited file. */
e34f7f79 637 Lisp_Object INTERNAL_FIELD (file_format);
82b911fd 638
dc511a66 639 /* List of symbols naming the file format used for auto-save file. */
e34f7f79 640 Lisp_Object INTERNAL_FIELD (auto_save_file_format);
dc511a66 641
82b911fd
GM
642 /* True if the newline position cache and width run cache are
643 enabled. See search.c and indent.c. */
e34f7f79 644 Lisp_Object INTERNAL_FIELD (cache_long_line_scans);
82b911fd
GM
645
646 /* If the width run cache is enabled, this table contains the
647 character widths width_run_cache (see above) assumes. When we
648 do a thorough redisplay, we compare this against the buffer's
649 current display table to see whether the display table has
650 affected the widths of any characters. If it has, we
651 invalidate the width run cache, and re-initialize width_table. */
e34f7f79 652 Lisp_Object INTERNAL_FIELD (width_table);
82b911fd
GM
653
654 /* In an indirect buffer, or a buffer that is the base of an
655 indirect buffer, this holds a marker that records
656 PT for this buffer when the buffer is not current. */
e34f7f79 657 Lisp_Object INTERNAL_FIELD (pt_marker);
82b911fd
GM
658
659 /* In an indirect buffer, or a buffer that is the base of an
660 indirect buffer, this holds a marker that records
661 BEGV for this buffer when the buffer is not current. */
e34f7f79 662 Lisp_Object INTERNAL_FIELD (begv_marker);
82b911fd
GM
663
664 /* In an indirect buffer, or a buffer that is the base of an
665 indirect buffer, this holds a marker that records
666 ZV for this buffer when the buffer is not current. */
e34f7f79 667 Lisp_Object INTERNAL_FIELD (zv_marker);
82b911fd
GM
668
669 /* This holds the point value before the last scroll operation.
670 Explicitly setting point sets this to nil. */
e34f7f79 671 Lisp_Object INTERNAL_FIELD (point_before_scroll);
82b911fd
GM
672
673 /* Truename of the visited file, or nil. */
e34f7f79 674 Lisp_Object INTERNAL_FIELD (file_truename);
82b911fd
GM
675
676 /* Invisibility spec of this buffer.
677 t => any non-nil `invisible' property means invisible.
678 A list => `invisible' property means invisible
679 if it is memq in that list. */
e34f7f79 680 Lisp_Object INTERNAL_FIELD (invisibility_spec);
82b911fd
GM
681
682 /* This is the last window that was selected with this buffer in it,
683 or nil if that window no longer displays this buffer. */
e34f7f79 684 Lisp_Object INTERNAL_FIELD (last_selected_window);
82b911fd
GM
685
686 /* Incremented each time the buffer is displayed in a window. */
e34f7f79 687 Lisp_Object INTERNAL_FIELD (display_count);
177c0ea7 688
82b911fd
GM
689 /* Widths of left and right marginal areas for windows displaying
690 this buffer. */
e34f7f79
DA
691 Lisp_Object INTERNAL_FIELD (left_margin_cols);
692 Lisp_Object INTERNAL_FIELD (right_margin_cols);
7e10f254
KS
693
694 /* Widths of left and right fringe areas for windows displaying
695 this buffer. */
e34f7f79
DA
696 Lisp_Object INTERNAL_FIELD (left_fringe_width);
697 Lisp_Object INTERNAL_FIELD (right_fringe_width);
7e10f254
KS
698
699 /* Non-nil means fringes are drawn outside display margins;
700 othersize draw them between margin areas and text. */
e34f7f79 701 Lisp_Object INTERNAL_FIELD (fringes_outside_margins);
7e10f254
KS
702
703 /* Width and type of scroll bar areas for windows displaying
704 this buffer. */
e34f7f79
DA
705 Lisp_Object INTERNAL_FIELD (scroll_bar_width);
706 Lisp_Object INTERNAL_FIELD (vertical_scroll_bar_type);
82b911fd
GM
707
708 /* Non-nil means indicate lines not displaying text (in a style
709 like vi). */
e34f7f79 710 Lisp_Object INTERNAL_FIELD (indicate_empty_lines);
82b911fd 711
6b61353c 712 /* Non-nil means indicate buffer boundaries and scrolling. */
e34f7f79 713 Lisp_Object INTERNAL_FIELD (indicate_buffer_boundaries);
6b61353c 714
856c2c73 715 /* Logical to physical fringe bitmap mappings. */
e34f7f79 716 Lisp_Object INTERNAL_FIELD (fringe_indicator_alist);
856c2c73
KS
717
718 /* Logical to physical cursor bitmap mappings. */
e34f7f79 719 Lisp_Object INTERNAL_FIELD (fringe_cursor_alist);
856c2c73 720
82b911fd 721 /* Time stamp updated each time this buffer is displayed in a window. */
e34f7f79 722 Lisp_Object INTERNAL_FIELD (display_time);
82b911fd
GM
723
724 /* If scrolling the display because point is below the bottom of a
725 window showing this buffer, try to choose a window start so
726 that point ends up this number of lines from the top of the
727 window. Nil means that scrolling method isn't used. */
e34f7f79 728 Lisp_Object INTERNAL_FIELD (scroll_up_aggressively);
177c0ea7 729
82b911fd
GM
730 /* If scrolling the display because point is above the top of a
731 window showing this buffer, try to choose a window start so
732 that point ends up this number of lines from the bottom of the
733 window. Nil means that scrolling method isn't used. */
e34f7f79 734 Lisp_Object INTERNAL_FIELD (scroll_down_aggressively);
2d8c80b1 735
82b911fd
GM
736 /* Desired cursor type in this buffer. See the doc string of
737 per-buffer variable `cursor-type'. */
e34f7f79 738 Lisp_Object INTERNAL_FIELD (cursor_type);
82b911fd
GM
739
740 /* An integer > 0 means put that number of pixels below text lines
741 in the display of this buffer. */
e34f7f79 742 Lisp_Object INTERNAL_FIELD (extra_line_spacing);
55806be1 743
36429c89 744 /* Cursor type to display in non-selected windows.
55806be1
RS
745 t means to use hollow box cursor.
746 See `cursor-type' for other values. */
e34f7f79 747 Lisp_Object INTERNAL_FIELD (cursor_in_non_selected_windows);
22b4128e 748
36429c89
DA
749 /* No more Lisp_Object beyond this point. Except undo_list,
750 which is handled specially in Fgarbage_collect . */
751
752 /* This structure holds the coordinates of the buffer contents
753 in ordinary buffers. In indirect buffers, this is not used. */
754 struct buffer_text own_text;
755
756 /* This points to the `struct buffer_text' that used for this buffer.
757 In an ordinary buffer, this is the own_text field above.
758 In an indirect buffer, this is the own_text field of another buffer. */
759 struct buffer_text *text;
760
914adc42
DA
761 /* Next buffer, in chain of all buffers, including killed ones. */
762 struct buffer *next;
763
36429c89
DA
764 /* Char position of point in buffer. */
765 ptrdiff_t pt;
766
767 /* Byte position of point in buffer. */
768 ptrdiff_t pt_byte;
769
770 /* Char position of beginning of accessible range. */
771 ptrdiff_t begv;
772
773 /* Byte position of beginning of accessible range. */
774 ptrdiff_t begv_byte;
775
776 /* Char position of end of accessible range. */
777 ptrdiff_t zv;
778
779 /* Byte position of end of accessible range. */
780 ptrdiff_t zv_byte;
781
782 /* In an indirect buffer, this points to the base buffer.
783 In an ordinary buffer, it is 0. */
784 struct buffer *base_buffer;
785
98a07056 786 /* In an indirect buffer, this is -1. In an ordinary buffer,
fb9ea40f 787 it's the number of indirect buffers that share our text;
9928463d 788 zero means that we're the only owner of this text. */
cbcc7007 789 int indirections;
9928463d 790
98a07056
DA
791 /* Number of windows showing this buffer. Always -1 for
792 an indirect buffer since it counts as its base buffer. */
793 int window_count;
794
36429c89
DA
795 /* A non-zero value in slot IDX means that per-buffer variable
796 with index IDX has a local value in this buffer. The index IDX
797 for a buffer-local variable is stored in that variable's slot
798 in buffer_local_flags as a Lisp integer. If the index is -1,
799 this means the variable is always local in all buffers. */
800#define MAX_PER_BUFFER_VARS 50
801 char local_flags[MAX_PER_BUFFER_VARS];
802
803 /* Set to the modtime of the visited file when read or written.
804 EMACS_NSECS (modtime) == NONEXISTENT_MODTIME_NSECS means
805 visited file was nonexistent. EMACS_NSECS (modtime) ==
806 UNKNOWN_MODTIME_NSECS means visited file modtime unknown;
807 in no case complain about any mismatch on next save attempt. */
808#define NONEXISTENT_MODTIME_NSECS (-1)
809#define UNKNOWN_MODTIME_NSECS (-2)
810 EMACS_TIME modtime;
811
812 /* Size of the file when modtime was set. This is used to detect the
813 case where the file grew while we were reading it, so the modtime
814 is still the same (since it's rounded up to seconds) but we're actually
815 not up-to-date. -1 means the size is unknown. Only meaningful if
816 modtime is actually set. */
817 off_t modtime_size;
818
819 /* The value of text->modiff at the last auto-save. */
820 EMACS_INT auto_save_modified;
821
822 /* The value of text->modiff at the last display error.
823 Redisplay of this buffer is inhibited until it changes again. */
824 EMACS_INT display_error_modiff;
825
826 /* The time at which we detected a failure to auto-save,
827 Or 0 if we didn't have a failure. */
828 time_t auto_save_failure_time;
829
830 /* Position in buffer at which display started
831 the last time this buffer was displayed. */
832 ptrdiff_t last_window_start;
833
834 /* If the long line scan cache is enabled (i.e. the buffer-local
835 variable cache-long-line-scans is non-nil), newline_cache
836 points to the newline cache, and width_run_cache points to the
837 width run cache.
838
839 The newline cache records which stretches of the buffer are
840 known *not* to contain newlines, so that they can be skipped
841 quickly when we search for newlines.
842
843 The width run cache records which stretches of the buffer are
844 known to contain characters whose widths are all the same. If
845 the width run cache maps a character to a value > 0, that value is
846 the character's width; if it maps a character to zero, we don't
847 know what its width is. This allows compute_motion to process
848 such regions very quickly, using algebra instead of inspecting
849 each character. See also width_table, below. */
850 struct region_cache *newline_cache;
851 struct region_cache *width_run_cache;
852
853 /* Non-zero means don't use redisplay optimizations for
854 displaying this buffer. */
855 unsigned prevent_redisplay_optimizations_p : 1;
856
857 /* Non-zero whenever the narrowing is changed in this buffer. */
858 unsigned clip_changed : 1;
859
860 /* List of overlays that end at or before the current center,
861 in order of end-position. */
862 struct Lisp_Overlay *overlays_before;
863
864 /* List of overlays that end after the current center,
865 in order of start-position. */
866 struct Lisp_Overlay *overlays_after;
867
868 /* Position where the overlay lists are centered. */
869 ptrdiff_t overlay_center;
870
871 /* Changes in the buffer are recorded here for undo, and t means
872 don't record anything. This information belongs to the base
873 buffer of an indirect buffer. But we can't store it in the
874 struct buffer_text because local variables have to be right in
875 the struct buffer. So we copy it around in set_buffer_internal. */
e34f7f79 876 Lisp_Object INTERNAL_FIELD (undo_list);
82b911fd 877};
a698b358 878
39eb03f1
PE
879/* Most code should use these functions to set Lisp fields in struct
880 buffer. */
881BUFFER_INLINE void
882bset_bidi_paragraph_direction (struct buffer *b, Lisp_Object val)
883{
884 b->INTERNAL_FIELD (bidi_paragraph_direction) = val;
885}
886BUFFER_INLINE void
887bset_case_canon_table (struct buffer *b, Lisp_Object val)
888{
889 b->INTERNAL_FIELD (case_canon_table) = val;
890}
891BUFFER_INLINE void
892bset_case_eqv_table (struct buffer *b, Lisp_Object val)
893{
894 b->INTERNAL_FIELD (case_eqv_table) = val;
895}
896BUFFER_INLINE void
897bset_directory (struct buffer *b, Lisp_Object val)
898{
899 b->INTERNAL_FIELD (directory) = val;
900}
901BUFFER_INLINE void
902bset_display_count (struct buffer *b, Lisp_Object val)
903{
904 b->INTERNAL_FIELD (display_count) = val;
905}
906BUFFER_INLINE void
907bset_display_time (struct buffer *b, Lisp_Object val)
908{
909 b->INTERNAL_FIELD (display_time) = val;
910}
911BUFFER_INLINE void
912bset_downcase_table (struct buffer *b, Lisp_Object val)
913{
914 b->INTERNAL_FIELD (downcase_table) = val;
915}
916BUFFER_INLINE void
917bset_enable_multibyte_characters (struct buffer *b, Lisp_Object val)
918{
919 b->INTERNAL_FIELD (enable_multibyte_characters) = val;
920}
921BUFFER_INLINE void
922bset_filename (struct buffer *b, Lisp_Object val)
923{
924 b->INTERNAL_FIELD (filename) = val;
925}
926BUFFER_INLINE void
927bset_keymap (struct buffer *b, Lisp_Object val)
928{
929 b->INTERNAL_FIELD (keymap) = val;
930}
931BUFFER_INLINE void
932bset_last_selected_window (struct buffer *b, Lisp_Object val)
933{
934 b->INTERNAL_FIELD (last_selected_window) = val;
935}
936BUFFER_INLINE void
937bset_local_var_alist (struct buffer *b, Lisp_Object val)
938{
939 b->INTERNAL_FIELD (local_var_alist) = val;
940}
941BUFFER_INLINE void
942bset_mark_active (struct buffer *b, Lisp_Object val)
943{
944 b->INTERNAL_FIELD (mark_active) = val;
945}
946BUFFER_INLINE void
947bset_point_before_scroll (struct buffer *b, Lisp_Object val)
948{
949 b->INTERNAL_FIELD (point_before_scroll) = val;
950}
951BUFFER_INLINE void
952bset_read_only (struct buffer *b, Lisp_Object val)
953{
954 b->INTERNAL_FIELD (read_only) = val;
955}
956BUFFER_INLINE void
957bset_truncate_lines (struct buffer *b, Lisp_Object val)
958{
959 b->INTERNAL_FIELD (truncate_lines) = val;
960}
961BUFFER_INLINE void
962bset_undo_list (struct buffer *b, Lisp_Object val)
963{
964 b->INTERNAL_FIELD (undo_list) = val;
965}
966BUFFER_INLINE void
967bset_upcase_table (struct buffer *b, Lisp_Object val)
968{
969 b->INTERNAL_FIELD (upcase_table) = val;
970}
971BUFFER_INLINE void
972bset_width_table (struct buffer *b, Lisp_Object val)
973{
974 b->INTERNAL_FIELD (width_table) = val;
975}
976
914adc42
DA
977/* Number of Lisp_Objects at the beginning of struct buffer.
978 If you add, remove, or reorder Lisp_Objects within buffer
979 structure, make sure that this is still correct. */
980
981#define BUFFER_LISP_SIZE \
982 ((offsetof (struct buffer, own_text) - header_size) / word_size)
983
984/* Size of the struct buffer part beyond leading Lisp_Objects, in word_size
985 units. Rounding is needed for --with-wide-int configuration. */
986
987#define BUFFER_REST_SIZE \
988 ((((sizeof (struct buffer) - offsetof (struct buffer, own_text)) \
989 + (word_size - 1)) & ~(word_size - 1)) / word_size)
990
991/* Initialize the pseudovector header of buffer object. BUFFER_LISP_SIZE
992 is required for GC, but BUFFER_REST_SIZE is set up just to be consistent
993 with other pseudovectors. */
994
995#define BUFFER_PVEC_INIT(b) \
996 XSETPVECTYPESIZE (b, PVEC_BUFFER, BUFFER_LISP_SIZE, BUFFER_REST_SIZE)
997
e578f381
DA
998/* Convenient check whether buffer B is live. */
999
1000#define BUFFER_LIVE_P(b) (!NILP (BVAR (b, name)))
1001
ed08365b
DA
1002/* Convenient check whether buffer B is hidden (i.e. its name
1003 starts with a space). Caller must ensure that B is live. */
1004
1005#define BUFFER_HIDDEN_P(b) (SREF (BVAR (b, name), 0) == ' ')
1006
f0863a54
DA
1007/* Verify indirection counters. */
1008
1009#define BUFFER_CHECK_INDIRECTION(b) \
1010 do { \
1011 if (BUFFER_LIVE_P (b)) \
1012 { \
1013 if (b->base_buffer) \
1014 { \
1015 eassert (b->indirections == -1); \
1016 eassert (b->base_buffer->indirections > 0); \
1017 } \
1018 else \
1019 eassert (b->indirections >= 0); \
1020 } \
1021 } while (0)
1022
d17337e5
DA
1023/* Chain of all buffers, including killed ones. */
1024
1025extern struct buffer *all_buffers;
1026
1027/* Used to iterate over the chain above. */
1028
52b852c7 1029#define FOR_EACH_BUFFER(b) \
914adc42 1030 for ((b) = all_buffers; (b); (b) = (b)->next)
d17337e5 1031
440d350c 1032/* This points to the current buffer. */
b3ec245a
JB
1033
1034extern struct buffer *current_buffer;
1035
1036/* This structure holds the default values of the buffer-local variables
440d350c 1037 that have special slots in each buffer.
b3ec245a
JB
1038 The default value occupies the same slot in this structure
1039 as an individual buffer's value occupies in that buffer.
1040 Setting the default value also goes through the alist of buffers
1041 and stores into each buffer that does not say it has a local value. */
1042
1043extern struct buffer buffer_defaults;
1044
1045/* This structure marks which slots in a buffer have corresponding
1046 default values in buffer_defaults.
1047 Each such slot has a nonzero value in this structure.
1048 The value has only one nonzero bit.
1049
1050 When a buffer has its own local value for a slot,
979332f6
GM
1051 the entry for that slot (found in the same slot in this structure)
1052 is turned on in the buffer's local_flags array.
b3ec245a
JB
1053
1054 If a slot in this structure is zero, then even though there may
440d350c 1055 be a Lisp-level local variable for the slot, it has no default value,
b3ec245a
JB
1056 and the corresponding slot in buffer_defaults is not used. */
1057
ce5b453a 1058
b3ec245a
JB
1059extern struct buffer buffer_local_flags;
1060
1061/* For each buffer slot, this points to the Lisp symbol name
1062 for that slot in the current buffer. It is 0 for slots
1063 that don't have such names. */
1064
1065extern struct buffer buffer_local_symbols;
440d350c 1066\f
383e0970
J
1067extern void delete_all_overlays (struct buffer *);
1068extern void reset_buffer (struct buffer *);
37ef52bb 1069extern void compact_buffer (struct buffer *);
d311d28c 1070extern void evaporate_overlays (ptrdiff_t);
37ef52bb
PE
1071extern ptrdiff_t overlays_at (EMACS_INT, bool, Lisp_Object **,
1072 ptrdiff_t *, ptrdiff_t *, ptrdiff_t *, bool);
b081724f 1073extern ptrdiff_t sort_overlays (Lisp_Object *, ptrdiff_t, struct window *);
d311d28c
PE
1074extern void recenter_overlay_lists (struct buffer *, ptrdiff_t);
1075extern ptrdiff_t overlay_strings (ptrdiff_t, struct window *, unsigned char **);
383e0970 1076extern void validate_region (Lisp_Object *, Lisp_Object *);
383e0970
J
1077extern void set_buffer_internal_1 (struct buffer *);
1078extern void set_buffer_temp (struct buffer *);
5f2c76c6 1079extern Lisp_Object buffer_local_value_1 (Lisp_Object, Lisp_Object);
383e0970 1080extern void record_buffer (Lisp_Object);
d311d28c 1081extern void fix_overlays_before (struct buffer *, ptrdiff_t, ptrdiff_t);
37ef52bb 1082extern void mmap_set_vars (bool);
4b7610a9 1083
a3d794a1
DA
1084/* Set the current buffer to B.
1085
1086 We previously set windows_or_buffers_changed here to invalidate
1087 global unchanged information in beg_unchanged and end_unchanged.
1088 This is no longer necessary because we now compute unchanged
1089 information on a buffer-basis. Every action affecting other
1090 windows than the selected one requires a select_window at some
1091 time, and that increments windows_or_buffers_changed. */
1092
1093BUFFER_INLINE void
1094set_buffer_internal (struct buffer *b)
1095{
1096 if (current_buffer != b)
1097 set_buffer_internal_1 (b);
1098}
1099
66322887
DA
1100/* Arrange to go back to the original buffer after the next
1101 call to unbind_to if the original buffer is still alive. */
1102
1103BUFFER_INLINE void
1104record_unwind_current_buffer (void)
1105{
1106 record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ());
1107}
1108
002571dd
KS
1109/* Get overlays at POSN into array OVERLAYS with NOVERLAYS elements.
1110 If NEXTP is non-NULL, return next overlay there.
1111 See overlay_at arg CHANGE_REQ for meaning of CHRQ arg. */
1112
1113#define GET_OVERLAYS_AT(posn, overlays, noverlays, nextp, chrq) \
1114 do { \
36429c89 1115 ptrdiff_t maxlen = 40; \
38182d90 1116 overlays = alloca (maxlen * sizeof *overlays); \
002571dd 1117 noverlays = overlays_at (posn, 0, &overlays, &maxlen, \
36429c89 1118 nextp, NULL, chrq); \
002571dd
KS
1119 if (noverlays > maxlen) \
1120 { \
1121 maxlen = noverlays; \
38182d90 1122 overlays = alloca (maxlen * sizeof *overlays); \
002571dd
KS
1123 noverlays = overlays_at (posn, 0, &overlays, &maxlen, \
1124 nextp, NULL, chrq); \
1125 } \
1126 } while (0)
1127
23f73711
RS
1128extern Lisp_Object Qbefore_change_functions;
1129extern Lisp_Object Qafter_change_functions;
dbc4e1c1 1130extern Lisp_Object Qfirst_change_hook;
8707c1e5
DA
1131
1132/* Get text properties of B. */
1133
1134BUFFER_INLINE INTERVAL
0c94c8d6 1135buffer_intervals (struct buffer *b)
8707c1e5
DA
1136{
1137 eassert (b->text != NULL);
1138 return b->text->intervals;
1139}
1140
1141/* Set text properties of B to I. */
1142
1143BUFFER_INLINE void
0c94c8d6 1144set_buffer_intervals (struct buffer *b, INTERVAL i)
8707c1e5
DA
1145{
1146 eassert (b->text != NULL);
1147 b->text->intervals = i;
1148}
1149
fd318b54
DA
1150/* Non-zero if current buffer has overlays. */
1151
37ef52bb 1152BUFFER_INLINE bool
fd318b54
DA
1153buffer_has_overlays (void)
1154{
1155 return current_buffer->overlays_before || current_buffer->overlays_after;
1156}
1157
e5560ff7
AS
1158/* Return character code of multi-byte form at byte position POS. If POS
1159 doesn't point the head of valid multi-byte form, only the byte at
1160 POS is returned. No range checking.
b3ec245a 1161
e5560ff7
AS
1162 WARNING: The character returned by this macro could be "unified"
1163 inside STRING_CHAR, if the original character in the buffer belongs
1164 to one of the Private Use Areas (PUAs) of codepoints that Emacs
1165 uses to support non-unified CJK characters. If that happens,
1166 CHAR_BYTES will return a value that is different from the length of
1167 the original multibyte sequence stored in the buffer. Therefore,
1168 do _not_ use FETCH_MULTIBYTE_CHAR if you need to advance through
1169 the buffer to the next character after fetching this one. Instead,
1170 use either FETCH_CHAR_ADVANCE or STRING_CHAR_AND_LENGTH. */
1171
f162bcc3 1172BUFFER_INLINE int
e5560ff7
AS
1173FETCH_MULTIBYTE_CHAR (ptrdiff_t pos)
1174{
1175 unsigned char *p = ((pos >= GPT_BYTE ? GAP_SIZE : 0)
1176 + pos + BEG_ADDR - BEG_BYTE);
1177 return STRING_CHAR (p);
1178}
1179
1180/* Return character code of multi-byte form at byte position POS in BUF.
1181 If POS doesn't point the head of valid multi-byte form, only the byte at
1182 POS is returned. No range checking. */
1183
f162bcc3 1184BUFFER_INLINE int
e5560ff7
AS
1185BUF_FETCH_MULTIBYTE_CHAR (struct buffer *buf, ptrdiff_t pos)
1186{
1187 unsigned char *p
1188 = ((pos >= BUF_GPT_BYTE (buf) ? BUF_GAP_SIZE (buf) : 0)
1189 + pos + BUF_BEG_ADDR (buf) - BEG_BYTE);
1190 return STRING_CHAR (p);
1191}
98a07056
DA
1192
1193/* Return number of windows showing B. */
1194
1195BUFFER_INLINE int
1196buffer_window_count (struct buffer *b)
1197{
1198 if (b->base_buffer)
1199 b = b->base_buffer;
1200 eassert (b->window_count >= 0);
1201 return b->window_count;
1202}
1203
440d350c
RS
1204/* Overlays */
1205
440d350c 1206/* Return the marker that stands for where OV starts in the buffer. */
a7be34e5 1207
c644523b 1208#define OVERLAY_START(OV) XOVERLAY (OV)->start
b3ec245a 1209
440d350c 1210/* Return the marker that stands for where OV ends in the buffer. */
a7be34e5 1211
c644523b 1212#define OVERLAY_END(OV) XOVERLAY (OV)->end
b3ec245a 1213
a7be34e5
GM
1214/* Return the plist of overlay OV. */
1215
c644523b 1216#define OVERLAY_PLIST(OV) XOVERLAY (OV)->plist
a7be34e5 1217
d00c875c
KH
1218/* Return the actual buffer position for the marker P.
1219 We assume you know which buffer it's pointing into. */
b3ec245a 1220
915857ff 1221#define OVERLAY_POSITION(P) \
1088b922 1222 (MARKERP (P) ? marker_position (P) : (emacs_abort (), 0))
b3ec245a 1223
39c75ccb 1224\f
979332f6
GM
1225/***********************************************************************
1226 Buffer-local Variables
1227 ***********************************************************************/
1228
1229/* Number of per-buffer variables used. */
1230
ddebaaa9 1231extern int last_per_buffer_idx;
979332f6
GM
1232
1233/* Return the offset in bytes of member VAR of struct buffer
1234 from the start of a buffer structure. */
1235
ddebaaa9 1236#define PER_BUFFER_VAR_OFFSET(VAR) \
e34f7f79 1237 offsetof (struct buffer, INTERNAL_FIELD (VAR))
979332f6 1238
36429c89
DA
1239/* Used to iterate over normal Lisp_Object fields of struct buffer (all
1240 Lisp_Objects except undo_list). If you add, remove, or reorder
1241 Lisp_Objects in a struct buffer, make sure that this is still correct. */
1242
52b852c7 1243#define FOR_EACH_PER_BUFFER_OBJECT_AT(offset) \
36429c89
DA
1244 for (offset = PER_BUFFER_VAR_OFFSET (name); \
1245 offset <= PER_BUFFER_VAR_OFFSET (cursor_in_non_selected_windows); \
663e2b3f 1246 offset += word_size)
36429c89 1247
979332f6
GM
1248/* Return the index of buffer-local variable VAR. Each per-buffer
1249 variable has an index > 0 associated with it, except when it always
1250 has buffer-local values, in which case the index is -1. If this is
1251 0, this is a bug and means that the slot of VAR in
53964682 1252 buffer_local_flags wasn't initialized. */
979332f6 1253
ddebaaa9
GM
1254#define PER_BUFFER_VAR_IDX(VAR) \
1255 PER_BUFFER_IDX (PER_BUFFER_VAR_OFFSET (VAR))
979332f6
GM
1256
1257/* Value is non-zero if the variable with index IDX has a local value
1258 in buffer B. */
1259
ddebaaa9
GM
1260#define PER_BUFFER_VALUE_P(B, IDX) \
1261 (((IDX) < 0 || IDX >= last_per_buffer_idx) \
1088b922 1262 ? (emacs_abort (), 0) \
979332f6
GM
1263 : ((B)->local_flags[IDX] != 0))
1264
1265/* Set whether per-buffer variable with index IDX has a buffer-local
1266 value in buffer B. VAL zero means it hasn't. */
1267
ddebaaa9 1268#define SET_PER_BUFFER_VALUE_P(B, IDX, VAL) \
979332f6 1269 do { \
ddebaaa9 1270 if ((IDX) < 0 || (IDX) >= last_per_buffer_idx) \
1088b922 1271 emacs_abort (); \
979332f6
GM
1272 (B)->local_flags[IDX] = (VAL); \
1273 } while (0)
1274
6b61353c
KH
1275/* Return the index value of the per-buffer variable at offset OFFSET
1276 in the buffer structure.
1277
1278 If the slot OFFSET has a corresponding default value in
1279 buffer_defaults, the index value is positive and has only one
1280 nonzero bit. When a buffer has its own local value for a slot, the
1281 bit for that slot (found in the same slot in this structure) is
1282 turned on in the buffer's local_flags array.
1283
1284 If the index value is -1, even though there may be a
1285 DEFVAR_PER_BUFFER for the slot, there is no default value for it;
1286 and the corresponding slot in buffer_defaults is not used.
1287
1288 If the index value is -2, then there is no DEFVAR_PER_BUFFER for
1289 the slot, but there is a default value which is copied into each
1290 new buffer.
1291
1292 If a slot in this structure corresponding to a DEFVAR_PER_BUFFER is
1293 zero, that is a bug */
1294
979332f6 1295
ddebaaa9 1296#define PER_BUFFER_IDX(OFFSET) \
979332f6
GM
1297 XINT (*(Lisp_Object *)((OFFSET) + (char *) &buffer_local_flags))
1298
4ce60d2e
DA
1299/* Functions to get and set default value of the per-buffer
1300 variable at offset OFFSET in the buffer structure. */
979332f6 1301
4ce60d2e
DA
1302BUFFER_INLINE Lisp_Object
1303per_buffer_default (int offset)
1304{
1305 return *(Lisp_Object *)(offset + (char *) &buffer_defaults);
1306}
979332f6 1307
4ce60d2e
DA
1308BUFFER_INLINE void
1309set_per_buffer_default (int offset, Lisp_Object value)
1310{
1311 *(Lisp_Object *)(offset + (char *) &buffer_defaults) = value;
1312}
1313
1314/* Functions to get and set buffer-local value of the per-buffer
1315 variable at offset OFFSET in the buffer structure. */
1316
1317BUFFER_INLINE Lisp_Object
1318per_buffer_value (struct buffer *b, int offset)
1319{
1320 return *(Lisp_Object *)(offset + (char *) b);
1321}
1322
1323BUFFER_INLINE void
1324set_per_buffer_value (struct buffer *b, int offset, Lisp_Object value)
1325{
1326 *(Lisp_Object *)(offset + (char *) b) = value;
1327}
979332f6 1328
5da9919f 1329/* Downcase a character C, or make no change if that cannot be done. */
f162bcc3 1330BUFFER_INLINE int
5da9919f 1331downcase (int c)
15206ed9 1332{
5da9919f
PE
1333 Lisp_Object downcase_table = BVAR (current_buffer, downcase_table);
1334 Lisp_Object down = CHAR_TABLE_REF (downcase_table, c);
1335 return NATNUMP (down) ? XFASTINT (down) : c;
15206ed9 1336}
15206ed9 1337
5da9919f 1338/* 1 if C is upper case. */
37ef52bb 1339BUFFER_INLINE bool uppercasep (int c) { return downcase (c) != c; }
15206ed9 1340
5da9919f 1341/* Upcase a character C known to be not upper case. */
f162bcc3 1342BUFFER_INLINE int
5da9919f 1343upcase1 (int c)
15206ed9 1344{
5da9919f
PE
1345 Lisp_Object upcase_table = BVAR (current_buffer, upcase_table);
1346 Lisp_Object up = CHAR_TABLE_REF (upcase_table, c);
1347 return NATNUMP (up) ? XFASTINT (up) : c;
15206ed9 1348}
5da9919f
PE
1349
1350/* 1 if C is lower case. */
37ef52bb
PE
1351BUFFER_INLINE bool
1352lowercasep (int c)
1353{
1354 return !uppercasep (c) && upcase1 (c) != c;
1355}
5da9919f
PE
1356
1357/* Upcase a character C, or make no change if that cannot be done. */
f162bcc3
PE
1358BUFFER_INLINE int upcase (int c) { return uppercasep (c) ? c : upcase1 (c); }
1359
1360INLINE_HEADER_END