summaryrefslogtreecommitdiff
path: root/src/buffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffer.h')
-rw-r--r--src/buffer.h93
1 files changed, 51 insertions, 42 deletions
diff --git a/src/buffer.h b/src/buffer.h
index 21854571670..cdc5fba58a8 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -107,6 +107,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define BUF_BEG(buf) (BEG)
#define BUF_BEG_BYTE(buf) (BEG_BYTE)
+/* !!!FIXME: all the BUF_BEGV/BUF_ZV/BUF_PT macros are flawed:
+ on indirect (or base) buffers, that value is only correct if that buffer
+ is the current_buffer, or if the buffer's text hasn't been modified (via
+ an indirect buffer) since it was last current. */
+
/* Position of beginning of accessible range of buffer. */
#define BUF_BEGV(buf) ((buf)->begv)
#define BUF_BEGV_BYTE(buf) ((buf)->begv_byte)
@@ -220,12 +225,12 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define BUF_TEMP_SET_PT(buffer, position) \
(temp_set_point ((buffer), (position)))
-extern void set_point P_ ((EMACS_INT));
-extern INLINE void temp_set_point P_ ((struct buffer *, EMACS_INT));
-extern void set_point_both P_ ((EMACS_INT, EMACS_INT));
-extern INLINE void temp_set_point_both P_ ((struct buffer *,
- EMACS_INT, EMACS_INT));
-extern void enlarge_buffer_text P_ ((struct buffer *, EMACS_INT));
+extern void set_point (EMACS_INT);
+extern void temp_set_point (struct buffer *, EMACS_INT);
+extern void set_point_both (EMACS_INT, EMACS_INT);
+extern void temp_set_point_both (struct buffer *,
+ EMACS_INT, EMACS_INT);
+extern void enlarge_buffer_text (struct buffer *, EMACS_INT);
/* Macros for setting the BEGV, ZV or PT of a given buffer.
@@ -313,7 +318,7 @@ while (0)
- (ptr - (current_buffer)->text->beg <= (unsigned) (GPT_BYTE - BEG_BYTE) ? 0 : GAP_SIZE) \
+ BEG_BYTE)
-/* Return character at position POS. */
+/* Return character at byte position POS. */
#define FETCH_CHAR(pos) \
(!NILP (current_buffer->enable_multibyte_characters) \
@@ -327,7 +332,7 @@ while (0)
/* Variables used locally in FETCH_MULTIBYTE_CHAR. */
extern unsigned char *_fetch_multibyte_char_p;
-/* Return character code of multi-byte form at position POS. If POS
+/* Return character code of multi-byte form at byte position POS. If POS
doesn't point the head of valid multi-byte form, only the byte at
POS is returned. No range checking. */
@@ -336,7 +341,7 @@ extern unsigned char *_fetch_multibyte_char_p;
+ (pos) + BEG_ADDR - BEG_BYTE), \
STRING_CHAR (_fetch_multibyte_char_p))
-/* Return character at position POS. If the current buffer is unibyte
+/* Return character at byte position POS. If the current buffer is unibyte
and the character is not ASCII, make the returning character
multibyte. */
@@ -447,11 +452,14 @@ struct buffer_text
/* The markers that refer to this buffer.
This is actually a single marker ---
successive elements in its marker `chain'
- are the other markers referring to this buffer. */
+ are the other markers referring to this buffer.
+ This is a singly linked unordered list, which means that it's
+ very cheap to add a marker to the list and it's also very cheap
+ to move a marker within a buffer. */
struct Lisp_Marker *markers;
/* Usually 0. Temporarily set to 1 in decode_coding_gap to
- prevent Fgarbage_collect from shrinking the gap and loosing
+ prevent Fgarbage_collect from shrinking the gap and losing
not-yet-decoded bytes. */
int inhibit_shrinking;
};
@@ -513,6 +521,12 @@ struct buffer
0 means visited file modtime unknown; in no case complain
about any mismatch on next save attempt. */
int modtime;
+ /* Size of the file when modtime was set. This is used to detect the
+ case where the file grew while we were reading it, so the modtime
+ is still the same (since it's rounded up to seconds) but we're actually
+ not up-to-date. -1 means the size is unknown. Only meaningful if
+ modtime is actually set. */
+ EMACS_INT modtime_size;
/* The value of text->modiff at the last auto-save. */
int auto_save_modified;
/* The value of text->modiff at the last display error.
@@ -662,8 +676,13 @@ struct buffer
Lisp_Object word_wrap;
/* Non-nil means display ctl chars with uparrow. */
Lisp_Object ctl_arrow;
- /* Non-nil means display text from right to left. */
- Lisp_Object direction_reversed;
+ /* Non-nil means reorder bidirectional text for display in the
+ visual order. */
+ Lisp_Object bidi_display_reordering;
+ /* If non-nil, specifies which direction of text to force in all the
+ paragraphs of the buffer. Nil means determine paragraph
+ direction dynamically for each paragraph. */
+ Lisp_Object bidi_paragraph_direction;
/* Non-nil means do selective display;
see doc string in syms_of_buffer (buffer.c) for details. */
Lisp_Object selective_display;
@@ -829,6 +848,7 @@ extern struct buffer buffer_defaults;
be a Lisp-level local variable for the slot, it has no default value,
and the corresponding slot in buffer_defaults is not used. */
+
extern struct buffer buffer_local_flags;
/* For each buffer slot, this points to the Lisp symbol name
@@ -837,23 +857,23 @@ extern struct buffer buffer_local_flags;
extern struct buffer buffer_local_symbols;
-extern void delete_all_overlays P_ ((struct buffer *));
-extern void reset_buffer P_ ((struct buffer *));
-extern void evaporate_overlays P_ ((EMACS_INT));
-extern int overlays_at P_ ((EMACS_INT pos, int extend, Lisp_Object **vec_ptr,
- int *len_ptr, EMACS_INT *next_ptr,
- EMACS_INT *prev_ptr, int change_req));
-extern int sort_overlays P_ ((Lisp_Object *, int, struct window *));
-extern void recenter_overlay_lists P_ ((struct buffer *, EMACS_INT));
-extern int overlay_strings P_ ((EMACS_INT, struct window *, unsigned char **));
-extern void validate_region P_ ((Lisp_Object *, Lisp_Object *));
-extern void set_buffer_internal P_ ((struct buffer *));
-extern void set_buffer_internal_1 P_ ((struct buffer *));
-extern void set_buffer_temp P_ ((struct buffer *));
-extern void record_buffer P_ ((Lisp_Object));
-extern void buffer_slot_type_mismatch P_ ((Lisp_Object, int)) NO_RETURN;
-extern void fix_overlays_before P_ ((struct buffer *, EMACS_INT, EMACS_INT));
-extern void mmap_set_vars P_ ((int));
+extern void delete_all_overlays (struct buffer *);
+extern void reset_buffer (struct buffer *);
+extern void evaporate_overlays (EMACS_INT);
+extern int overlays_at (EMACS_INT pos, int extend, Lisp_Object **vec_ptr,
+ int *len_ptr, EMACS_INT *next_ptr,
+ EMACS_INT *prev_ptr, int change_req);
+extern int sort_overlays (Lisp_Object *, int, struct window *);
+extern void recenter_overlay_lists (struct buffer *, EMACS_INT);
+extern EMACS_INT overlay_strings (EMACS_INT, struct window *, unsigned char **);
+extern void validate_region (Lisp_Object *, Lisp_Object *);
+extern void set_buffer_internal (struct buffer *);
+extern void set_buffer_internal_1 (struct buffer *);
+extern void set_buffer_temp (struct buffer *);
+extern void record_buffer (Lisp_Object);
+extern void buffer_slot_type_mismatch (Lisp_Object, int) NO_RETURN;
+extern void fix_overlays_before (struct buffer *, EMACS_INT, EMACS_INT);
+extern void mmap_set_vars (int);
/* Get overlays at POSN into array OVERLAYS with NOVERLAYS elements.
If NEXTP is non-NULL, return next overlay there.
@@ -874,14 +894,11 @@ extern void mmap_set_vars P_ ((int));
} \
} while (0)
-EXFUN (Fbuffer_list, 1);
EXFUN (Fbuffer_live_p, 1);
EXFUN (Fbuffer_name, 1);
-EXFUN (Fget_file_buffer, 1);
EXFUN (Fnext_overlay_change, 1);
EXFUN (Fdelete_overlay, 1);
EXFUN (Fbuffer_local_value, 2);
-EXFUN (Fgenerate_new_buffer_name, 2);
/* Functions to call before and after each text change. */
extern Lisp_Object Vbefore_change_functions;
@@ -934,7 +951,7 @@ extern int last_per_buffer_idx;
from the start of a buffer structure. */
#define PER_BUFFER_VAR_OFFSET(VAR) \
- ((char *) &buffer_local_flags.VAR - (char *) &buffer_local_flags)
+ offsetof (struct buffer, VAR)
/* Return the index of buffer-local variable VAR. Each per-buffer
variable has an index > 0 associated with it, except when it always
@@ -999,11 +1016,3 @@ extern int last_per_buffer_idx;
#define PER_BUFFER_VALUE(BUFFER, OFFSET) \
(*(Lisp_Object *)((OFFSET) + (char *) (BUFFER)))
-/* Return the symbol of the per-buffer variable at offset OFFSET in
- the buffer structure. */
-
-#define PER_BUFFER_SYMBOL(OFFSET) \
- (*(Lisp_Object *)((OFFSET) + (char *) &buffer_local_symbols))
-
-/* arch-tag: 679305dd-d41c-4a50-b170-3caf5c97b2d1
- (do not change this comment) */