X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/151b77c2684759f6f883c012ce8469b68741b6eb..77ab81d0545e980c57c0a35510ade29a9e43b4cd:/src/buffer.h diff --git a/src/buffer.h b/src/buffer.h index 40f03daca9..cdc5fba58a 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -1,6 +1,6 @@ /* Header file for the buffer manipulation primitives. Copyright (C) 1985, 1986, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -107,6 +107,11 @@ along with GNU Emacs. If not, see . */ #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 . */ #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. @@ -665,9 +679,6 @@ struct buffer /* Non-nil means reorder bidirectional text for display in the visual order. */ Lisp_Object bidi_display_reordering; - /* Non-nil means set beginning of lines at the right edge of - windows. */ - Lisp_Object direction_reversed; /* 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. */ @@ -837,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 @@ -845,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. @@ -882,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; @@ -942,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 @@ -1007,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) */