diff options
| author | Richard M. Stallman | 1995-01-02 09:19:34 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1995-01-02 09:19:34 +0000 |
| commit | c1ea566e860d52b74c56c2979282f90694818d69 (patch) | |
| tree | d191c28b3eee05b38dd87669c2e8d932f2203547 /src/buffer.h | |
| parent | 4c61f38e781aa255b75af18449a5ea8c3b16977d (diff) | |
| download | emacs-c1ea566e860d52b74c56c2979282f90694818d69.tar.gz emacs-c1ea566e860d52b74c56c2979282f90694818d69.zip | |
(struct buffer): Fields markers and intervals moved out.
(struct buffer_text): Fields markers and intervals moved here.
(BUF_MARKERS, BUF_INTERVALS): New macros.
(struct buffer): Make buffer_file_type field unconditional.
(struct buffer): New field pt_marker.
save_modiff field deleted.
(struct buffer_text): save_modiff field moved here.
(SAVE_MODIFF, BUF_SAVE_MODIFF): New macros.
Use them instead of direct access to save_modiff field.
(struct buffer): New fields begv_marker, zv_marker.
(struct buffer): Make text field be a pointer.
The struct buffer_text field renamed to own_text.
Add fields indirect_to_buffer and size.
Move pt, begv and zv fields here.
(struct buffer_text): Moved from here.
(BEGV, PT, ZV, BEGV_ADDR, PT_ADDR, ZV_ADDR): Corresponding changes.
(BUF_BEGV, BUF_PT, BUF_ZV): Corresponding changes.
(SET_BUF_ZV, SET_BUF_PT, point):
Diffstat (limited to 'src/buffer.h')
| -rw-r--r-- | src/buffer.h | 258 |
1 files changed, 153 insertions, 105 deletions
diff --git a/src/buffer.h b/src/buffer.h index 132db637eb7..16d8bc68f8f 100644 --- a/src/buffer.h +++ b/src/buffer.h | |||
| @@ -27,58 +27,61 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |||
| 27 | 27 | ||
| 28 | #else /* don't support text properties */ | 28 | #else /* don't support text properties */ |
| 29 | 29 | ||
| 30 | #define SET_PT(position) (current_buffer->text.pt = (position)) | 30 | #define SET_PT(position) (current_buffer->pt = (position)) |
| 31 | #define TEMP_SET_PT(position) (current_buffer->text.pt = (position)) | 31 | #define TEMP_SET_PT(position) (current_buffer->pt = (position)) |
| 32 | 32 | ||
| 33 | #define BUF_SET_PT(buffer, position) (buffer->text.pt = (position)) | 33 | #define BUF_SET_PT(buffer, position) (buffer->pt = (position)) |
| 34 | #define BUF_TEMP_SET_PT(buffer, position) (buffer->text.pt = (position)) | 34 | #define BUF_TEMP_SET_PT(buffer, position) (buffer->pt = (position)) |
| 35 | #endif /* don't support text properties */ | 35 | #endif /* don't support text properties */ |
| 36 | 36 | ||
| 37 | /* Character position of beginning of buffer. */ | 37 | /* Character position of beginning of buffer. */ |
| 38 | #define BEG (1) | 38 | #define BEG (1) |
| 39 | 39 | ||
| 40 | /* Character position of beginning of accessible range of buffer. */ | 40 | /* Character position of beginning of accessible range of buffer. */ |
| 41 | #define BEGV (current_buffer->text.begv) | 41 | #define BEGV (current_buffer->begv) |
| 42 | 42 | ||
| 43 | /* Character position of point in buffer. The "+ 0" makes this | 43 | /* Character position of point in buffer. The "+ 0" makes this |
| 44 | not an l-value, so you can't assign to it. Use SET_PT instead. */ | 44 | not an l-value, so you can't assign to it. Use SET_PT instead. */ |
| 45 | #define PT (current_buffer->text.pt + 0) | 45 | #define PT (current_buffer->pt + 0) |
| 46 | 46 | ||
| 47 | /* Character position of gap in buffer. */ | 47 | /* Character position of gap in buffer. */ |
| 48 | #define GPT (current_buffer->text.gpt) | 48 | #define GPT (current_buffer->text->gpt) |
| 49 | 49 | ||
| 50 | /* Character position of end of accessible range of buffer. */ | 50 | /* Character position of end of accessible range of buffer. */ |
| 51 | #define ZV (current_buffer->text.zv) | 51 | #define ZV (current_buffer->zv) |
| 52 | 52 | ||
| 53 | /* Character position of end of buffer. */ | 53 | /* Character position of end of buffer. */ |
| 54 | #define Z (current_buffer->text.z) | 54 | #define Z (current_buffer->text->z) |
| 55 | 55 | ||
| 56 | /* Is the current buffer narrowed? */ | 56 | /* Is the current buffer narrowed? */ |
| 57 | #define NARROWED ((BEGV != BEG) || (ZV != Z)) | 57 | #define NARROWED ((BEGV != BEG) || (ZV != Z)) |
| 58 | 58 | ||
| 59 | /* Modification count. */ | 59 | /* Modification count. */ |
| 60 | #define MODIFF (current_buffer->text.modiff) | 60 | #define MODIFF (current_buffer->text->modiff) |
| 61 | |||
| 62 | /* Modification count as of last visit or save. */ | ||
| 63 | #define SAVE_MODIFF (current_buffer->text->save_modiff) | ||
| 61 | 64 | ||
| 62 | /* Address of beginning of buffer. */ | 65 | /* Address of beginning of buffer. */ |
| 63 | #define BEG_ADDR (current_buffer->text.beg) | 66 | #define BEG_ADDR (current_buffer->text->beg) |
| 64 | 67 | ||
| 65 | /* Address of beginning of accessible range of buffer. */ | 68 | /* Address of beginning of accessible range of buffer. */ |
| 66 | #define BEGV_ADDR (&FETCH_CHAR (current_buffer->text.begv)) | 69 | #define BEGV_ADDR (&FETCH_CHAR (current_buffer->begv)) |
| 67 | 70 | ||
| 68 | /* Address of point in buffer. */ | 71 | /* Address of point in buffer. */ |
| 69 | #define PT_ADDR (&FETCH_CHAR (current_buffer->text.pt)) | 72 | #define PT_ADDR (&FETCH_CHAR (current_buffer->pt)) |
| 70 | 73 | ||
| 71 | /* Address of beginning of gap in buffer. */ | 74 | /* Address of beginning of gap in buffer. */ |
| 72 | #define GPT_ADDR (current_buffer->text.beg + current_buffer->text.gpt - 1) | 75 | #define GPT_ADDR (current_buffer->text->beg + current_buffer->text->gpt - 1) |
| 73 | 76 | ||
| 74 | /* Address of end of gap in buffer. */ | 77 | /* Address of end of gap in buffer. */ |
| 75 | #define GAP_END_ADDR (current_buffer->text.beg + current_buffer->text.gpt + current_buffer->text.gap_size - 1) | 78 | #define GAP_END_ADDR (current_buffer->text->beg + current_buffer->text->gpt + current_buffer->text->gap_size - 1) |
| 76 | 79 | ||
| 77 | /* Address of end of accessible range of buffer. */ | 80 | /* Address of end of accessible range of buffer. */ |
| 78 | #define ZV_ADDR (&FETCH_CHAR (current_buffer->text.zv)) | 81 | #define ZV_ADDR (&FETCH_CHAR (current_buffer->zv)) |
| 79 | 82 | ||
| 80 | /* Size of gap. */ | 83 | /* Size of gap. */ |
| 81 | #define GAP_SIZE (current_buffer->text.gap_size) | 84 | #define GAP_SIZE (current_buffer->text->gap_size) |
| 82 | 85 | ||
| 83 | /* Now similar macros for a specified buffer. | 86 | /* Now similar macros for a specified buffer. |
| 84 | Note that many of these evaluate the buffer argument more than once. */ | 87 | Note that many of these evaluate the buffer argument more than once. */ |
| @@ -87,70 +90,87 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |||
| 87 | #define BUF_BEG(buf) (1) | 90 | #define BUF_BEG(buf) (1) |
| 88 | 91 | ||
| 89 | /* Character position of beginning of accessible range of buffer. */ | 92 | /* Character position of beginning of accessible range of buffer. */ |
| 90 | #define BUF_BEGV(buf) ((buf)->text.begv) | 93 | #define BUF_BEGV(buf) ((buf)->begv) |
| 91 | 94 | ||
| 92 | /* Character position of point in buffer. */ | 95 | /* Character position of point in buffer. */ |
| 93 | #define BUF_PT(buf) ((buf)->text.pt) | 96 | #define BUF_PT(buf) ((buf)->pt) |
| 94 | 97 | ||
| 95 | /* Character position of gap in buffer. */ | 98 | /* Character position of gap in buffer. */ |
| 96 | #define BUF_GPT(buf) ((buf)->text.gpt) | 99 | #define BUF_GPT(buf) ((buf)->text->gpt) |
| 97 | 100 | ||
| 98 | /* Character position of end of accessible range of buffer. */ | 101 | /* Character position of end of accessible range of buffer. */ |
| 99 | #define BUF_ZV(buf) ((buf)->text.zv) | 102 | #define BUF_ZV(buf) ((buf)->zv) |
| 100 | 103 | ||
| 101 | /* Character position of end of buffer. */ | 104 | /* Character position of end of buffer. */ |
| 102 | #define BUF_Z(buf) ((buf)->text.z) | 105 | #define BUF_Z(buf) ((buf)->text->z) |
| 103 | 106 | ||
| 104 | /* Is this buffer narrowed? */ | 107 | /* Is this buffer narrowed? */ |
| 105 | #define BUF_NARROWED(buf) ((BUF_BEGV(buf) != BUF_BEG(buf)) \ | 108 | #define BUF_NARROWED(buf) ((BUF_BEGV (buf) != BUF_BEG (buf)) \ |
| 106 | || (BUF_ZV(buf) != BUF_Z(buf))) | 109 | || (BUF_ZV (buf) != BUF_Z (buf))) |
| 107 | 110 | ||
| 108 | /* Modification count. */ | 111 | /* Modification count. */ |
| 109 | #define BUF_MODIFF(buf) ((buf)->text.modiff) | 112 | #define BUF_MODIFF(buf) ((buf)->text->modiff) |
| 113 | |||
| 114 | /* Modification count as of last visit or save. */ | ||
| 115 | #define BUF_SAVE_MODIFF(buf) ((buf)->text->save_modiff) | ||
| 116 | |||
| 117 | /* Interval tree of buffer. */ | ||
| 118 | #define BUF_INTERVALS(buf) ((buf)->text->intervals) | ||
| 119 | |||
| 120 | /* Marker chain of buffer. */ | ||
| 121 | #define BUF_MARKERS(buf) ((buf)->text->markers) | ||
| 110 | 122 | ||
| 111 | /* Address of beginning of buffer. */ | 123 | /* Address of beginning of buffer. */ |
| 112 | #define BUF_BEG_ADDR(buf) ((buf)->text.beg) | 124 | #define BUF_BEG_ADDR(buf) ((buf)->text->beg) |
| 113 | 125 | ||
| 114 | /* Macro for setting the value of BUF_ZV (BUF) to VALUE, | 126 | /* Macro for setting the value of BUF_ZV (BUF) to VALUE, |
| 115 | by varying the end of the accessible region. */ | 127 | by varying the end of the accessible region. */ |
| 116 | #define SET_BUF_ZV(buf, value) ((buf)->text.zv = (value)) | 128 | #define SET_BUF_ZV(buf, value) ((buf)->zv = (value)) |
| 117 | #define SET_BUF_PT(buf, value) ((buf)->text.pt = (value)) | 129 | #define SET_BUF_PT(buf, value) ((buf)->pt = (value)) |
| 118 | 130 | ||
| 119 | /* Size of gap. */ | 131 | /* Size of gap. */ |
| 120 | #define BUF_GAP_SIZE(buf) ((buf)->text.gap_size) | 132 | #define BUF_GAP_SIZE(buf) ((buf)->text->gap_size) |
| 121 | 133 | ||
| 122 | /* Return the address of character at position POS in buffer BUF. | 134 | /* Return the address of character at position POS in buffer BUF. |
| 123 | Note that both arguments can be computed more than once. */ | 135 | Note that both arguments can be computed more than once. */ |
| 124 | #define BUF_CHAR_ADDRESS(buf, pos) \ | 136 | #define BUF_CHAR_ADDRESS(buf, pos) \ |
| 125 | ((buf)->text.beg + (pos) - 1 \ | 137 | ((buf)->text->beg + (pos) - 1 \ |
| 126 | + ((pos) >= (buf)->text.gpt ? (buf)->text.gap_size : 0)) | 138 | + ((pos) >= (buf)->text->gpt ? (buf)->text->gap_size : 0)) |
| 127 | 139 | ||
| 128 | /* Convert the address of a char in the buffer into a character position. */ | 140 | /* Convert the address of a char in the buffer into a character position. */ |
| 129 | #define PTR_CHAR_POS(ptr) \ | 141 | #define PTR_CHAR_POS(ptr) \ |
| 130 | ((ptr) - (current_buffer)->text.beg \ | 142 | ((ptr) - (current_buffer)->text->beg \ |
| 131 | - (ptr - (current_buffer)->text.beg < (unsigned) GPT ? 0 : GAP_SIZE) \ | 143 | - (ptr - (current_buffer)->text->beg < (unsigned) GPT ? 0 : GAP_SIZE) \ |
| 132 | + 1) | 144 | + 1) |
| 133 | 145 | ||
| 134 | /* Convert the address of a char in the buffer into a character position. */ | 146 | /* Convert the address of a char in the buffer into a character position. */ |
| 135 | #define BUF_PTR_CHAR_POS(buf, ptr) \ | 147 | #define BUF_PTR_CHAR_POS(buf, ptr) \ |
| 136 | ((ptr) - (buf)->text.beg \ | 148 | ((ptr) - (buf)->text->beg \ |
| 137 | - (ptr - (buf)->text.beg < (unsigned) BUF_GPT ((buf)) \ | 149 | - (ptr - (buf)->text->beg < (unsigned) BUF_GPT ((buf)) \ |
| 138 | ? 0 : BUF_GAP_SIZE ((buf))) \ | 150 | ? 0 : BUF_GAP_SIZE ((buf))) \ |
| 139 | + 1) | 151 | + 1) |
| 140 | 152 | ||
| 141 | struct buffer_text | 153 | struct buffer_text |
| 142 | { | 154 | { |
| 143 | unsigned char *beg; /* Actual address of buffer contents. */ | 155 | unsigned char *beg; /* Actual address of buffer contents. */ |
| 144 | int begv; /* Index of beginning of accessible range. */ | 156 | int gpt; /* Index of gap in buffer. */ |
| 145 | int pt; /* Position of point in buffer. */ | 157 | int z; /* Index of end of buffer. */ |
| 146 | int gpt; /* Index of gap in buffer. */ | 158 | int gap_size; /* Size of buffer's gap. */ |
| 147 | int zv; /* Index of end of accessible range. */ | ||
| 148 | int z; /* Index of end of buffer. */ | ||
| 149 | int gap_size; /* Size of buffer's gap */ | ||
| 150 | int modiff; /* This counts buffer-modification events | 159 | int modiff; /* This counts buffer-modification events |
| 151 | for this buffer. It is incremented for | 160 | for this buffer. It is incremented for |
| 152 | each such event, and never otherwise | 161 | each such event, and never otherwise |
| 153 | changed. */ | 162 | changed. */ |
| 163 | int save_modiff; /* Previous value of modiff, as of last | ||
| 164 | time buffer visited or saved a file. */ | ||
| 165 | |||
| 166 | /* Properties of this buffer's text -- conditionally compiled. */ | ||
| 167 | DECLARE_INTERVALS | ||
| 168 | |||
| 169 | /* The markers that refer to this buffer. | ||
| 170 | This is actually a single marker --- | ||
| 171 | successive elements in its marker `chain' | ||
| 172 | are the other markers referring to this buffer. */ | ||
| 173 | Lisp_Object markers; | ||
| 154 | }; | 174 | }; |
| 155 | 175 | ||
| 156 | struct buffer | 176 | struct buffer |
| @@ -158,48 +178,54 @@ struct buffer | |||
| 158 | /* Everything before the `name' slot must be of a non-Lisp_Object type, | 178 | /* Everything before the `name' slot must be of a non-Lisp_Object type, |
| 159 | and every slot after `name' must be a Lisp_Object. | 179 | and every slot after `name' must be a Lisp_Object. |
| 160 | 180 | ||
| 161 | Check out mark_buffer (alloc.c) to see why. | 181 | Check out mark_buffer (alloc.c) to see why. */ |
| 162 | */ | 182 | |
| 183 | EMACS_INT size; | ||
| 163 | 184 | ||
| 164 | /* This structure holds the coordinates of the buffer contents. */ | ||
| 165 | struct buffer_text text; | ||
| 166 | /* Next buffer, in chain of all buffers including killed buffers. | 185 | /* Next buffer, in chain of all buffers including killed buffers. |
| 167 | This chain is used only for garbage collection, in order to | 186 | This chain is used only for garbage collection, in order to |
| 168 | collect killed buffers properly. */ | 187 | collect killed buffers properly. |
| 188 | Note that vectors and most pseudovectors are all on one chain, | ||
| 189 | but buffers are on a separate chain of their own. */ | ||
| 169 | struct buffer *next; | 190 | struct buffer *next; |
| 191 | |||
| 192 | /* This structure holds the coordinates of the buffer contents | ||
| 193 | in ordinary buffers. In indirect buffers, this is not used. */ | ||
| 194 | struct buffer_text own_text; | ||
| 195 | |||
| 196 | /* This points to the `struct buffer_text' that used for this buffer. | ||
| 197 | In an ordinary buffer, this is the own_text field above. | ||
| 198 | In an indirect buffer, this is the own_text field of another buffer. */ | ||
| 199 | struct buffer_text *text; | ||
| 200 | |||
| 201 | /* Position of point in buffer. */ | ||
| 202 | int pt; | ||
| 203 | /* Index of beginning of accessible range. */ | ||
| 204 | int begv; | ||
| 205 | /* Index of end of accessible range. */ | ||
| 206 | int zv; | ||
| 207 | |||
| 208 | /* In an indirect buffer, this points to the base buffer. | ||
| 209 | In an ordinary buffer, it is 0. */ | ||
| 210 | struct buffer *base_buffer; | ||
| 211 | |||
| 170 | /* Flags saying which DEFVAR_PER_BUFFER variables | 212 | /* Flags saying which DEFVAR_PER_BUFFER variables |
| 171 | are local to this buffer. */ | 213 | are local to this buffer. */ |
| 172 | int local_var_flags; | 214 | int local_var_flags; |
| 173 | /* Value of text.modiff as of when visited file was read or written. */ | ||
| 174 | int save_modified; | ||
| 175 | /* Set to the modtime of the visited file when read or written. | 215 | /* Set to the modtime of the visited file when read or written. |
| 176 | -1 means visited file was nonexistent. | 216 | -1 means visited file was nonexistent. |
| 177 | 0 means visited file modtime unknown; in no case complain | 217 | 0 means visited file modtime unknown; in no case complain |
| 178 | about any mismatch on next save attempt. */ | 218 | about any mismatch on next save attempt. */ |
| 179 | int modtime; | 219 | int modtime; |
| 180 | /* the value of text.modiff at the last auto-save. */ | 220 | /* the value of text->modiff at the last auto-save. */ |
| 181 | int auto_save_modified; | 221 | int auto_save_modified; |
| 182 | /* The time at which we detected a failure to auto-save, | 222 | /* The time at which we detected a failure to auto-save, |
| 183 | Or -1 if we didn't have a failure. */ | 223 | Or -1 if we didn't have a failure. */ |
| 184 | int auto_save_failure_time; | 224 | int auto_save_failure_time; |
| 185 | /* Position in buffer at which display started | 225 | /* Position in buffer at which display started |
| 186 | the last time this buffer was displayed */ | 226 | the last time this buffer was displayed. */ |
| 187 | int last_window_start; | 227 | int last_window_start; |
| 188 | 228 | ||
| 189 | /* Properties of this buffer's text -- conditionally compiled. */ | ||
| 190 | DECLARE_INTERVALS | ||
| 191 | |||
| 192 | /* This is a special exception -- as this slot should not be | ||
| 193 | marked by gc_sweep, and as it is not lisp-accessible as | ||
| 194 | a local variable -- so we regard it as not really being of type | ||
| 195 | Lisp_Object */ | ||
| 196 | /* the markers that refer to this buffer. | ||
| 197 | This is actually a single marker --- | ||
| 198 | successive elements in its marker `chain' | ||
| 199 | are the other markers referring to this | ||
| 200 | buffer */ | ||
| 201 | Lisp_Object markers; | ||
| 202 | |||
| 203 | /* If the long line scan cache is enabled (i.e. the buffer-local | 229 | /* If the long line scan cache is enabled (i.e. the buffer-local |
| 204 | variable cache-long-line-scans is non-nil), newline_cache | 230 | variable cache-long-line-scans is non-nil), newline_cache |
| 205 | points to the newline cache, and width_run_cache points to the | 231 | points to the newline cache, and width_run_cache points to the |
| @@ -222,45 +248,48 @@ struct buffer | |||
| 222 | /* Everything from here down must be a Lisp_Object */ | 248 | /* Everything from here down must be a Lisp_Object */ |
| 223 | 249 | ||
| 224 | 250 | ||
| 225 | /* the name of this buffer */ | 251 | /* The name of this buffer. */ |
| 226 | Lisp_Object name; | 252 | Lisp_Object name; |
| 227 | /* Nuked: buffer number, assigned when buffer made Lisp_Object number;*/ | 253 | /* The name of the file visited in this buffer, or nil. */ |
| 228 | /* the name of the file associated with this buffer */ | ||
| 229 | Lisp_Object filename; | 254 | Lisp_Object filename; |
| 230 | /* Dir for expanding relative pathnames */ | 255 | /* Dir for expanding relative file names. */ |
| 231 | Lisp_Object directory; | 256 | Lisp_Object directory; |
| 232 | /* true iff this buffer has been backed | 257 | /* True iff this buffer has been backed up (if you write to the |
| 233 | up (if you write to its associated file | 258 | visited file and it hasn't been backed up, then a backup will |
| 234 | and it hasn't been backed up, then a | 259 | be made). */ |
| 235 | backup will be made) */ | ||
| 236 | /* This isn't really used by the C code, so could be deleted. */ | 260 | /* This isn't really used by the C code, so could be deleted. */ |
| 237 | Lisp_Object backed_up; | 261 | Lisp_Object backed_up; |
| 238 | /* Length of file when last read or saved. */ | 262 | /* Length of file when last read or saved. |
| 263 | This is not in the struct buffer_text | ||
| 264 | because it's not used in indirect buffers at all. */ | ||
| 239 | Lisp_Object save_length; | 265 | Lisp_Object save_length; |
| 240 | /* file name used for auto-saving this buffer */ | 266 | /* File name used for auto-saving this buffer. |
| 267 | This is not in the struct buffer_text | ||
| 268 | because it's not used in indirect buffers at all. */ | ||
| 241 | Lisp_Object auto_save_file_name; | 269 | Lisp_Object auto_save_file_name; |
| 242 | /* Non-nil if buffer read-only */ | 270 | |
| 271 | /* Non-nil if buffer read-only. */ | ||
| 243 | Lisp_Object read_only; | 272 | Lisp_Object read_only; |
| 244 | /* "The mark"; no longer allowed to be nil */ | 273 | /* "The mark". This is a marker which may |
| 274 | point into this buffer or may point nowhere. */ | ||
| 245 | Lisp_Object mark; | 275 | Lisp_Object mark; |
| 246 | 276 | ||
| 247 | /* Alist of elements (SYMBOL . VALUE-IN-THIS-BUFFER) | 277 | /* Alist of elements (SYMBOL . VALUE-IN-THIS-BUFFER) |
| 248 | for all per-buffer variables of this buffer. */ | 278 | for all per-buffer variables of this buffer. */ |
| 249 | Lisp_Object local_var_alist; | 279 | Lisp_Object local_var_alist; |
| 250 | 280 | ||
| 251 | 281 | /* Symbol naming major mode (eg, lisp-mode). */ | |
| 252 | /* Symbol naming major mode (eg lisp-mode) */ | ||
| 253 | Lisp_Object major_mode; | 282 | Lisp_Object major_mode; |
| 254 | /* Pretty name of major mode (eg "Lisp") */ | 283 | /* Pretty name of major mode (eg, "Lisp"). */ |
| 255 | Lisp_Object mode_name; | 284 | Lisp_Object mode_name; |
| 256 | /* Format string for mode line */ | 285 | /* Mode line element that controls format of mode line. */ |
| 257 | Lisp_Object mode_line_format; | 286 | Lisp_Object mode_line_format; |
| 258 | 287 | ||
| 259 | /* Keys that are bound local to this buffer */ | 288 | /* Keys that are bound local to this buffer. */ |
| 260 | Lisp_Object keymap; | 289 | Lisp_Object keymap; |
| 261 | /* This buffer's local abbrev table */ | 290 | /* This buffer's local abbrev table. */ |
| 262 | Lisp_Object abbrev_table; | 291 | Lisp_Object abbrev_table; |
| 263 | /* This buffer's syntax table. */ | 292 | /* This buffer's syntax table. */ |
| 264 | Lisp_Object syntax_table; | 293 | Lisp_Object syntax_table; |
| 265 | 294 | ||
| 266 | /* Values of several buffer-local variables */ | 295 | /* Values of several buffer-local variables */ |
| @@ -270,48 +299,52 @@ struct buffer | |||
| 270 | Lisp_Object tab_width; | 299 | Lisp_Object tab_width; |
| 271 | Lisp_Object fill_column; | 300 | Lisp_Object fill_column; |
| 272 | Lisp_Object left_margin; | 301 | Lisp_Object left_margin; |
| 273 | /* Function to call when insert space past fill column */ | 302 | /* Function to call when insert space past fill column. */ |
| 274 | Lisp_Object auto_fill_function; | 303 | Lisp_Object auto_fill_function; |
| 275 | #ifdef DOS_NT | 304 | /* nil: text, t: binary. |
| 276 | /* nil: text, t: binary. */ | 305 | This value is meaningful only on certain operating systems. */ |
| 277 | Lisp_Object buffer_file_type; | 306 | Lisp_Object buffer_file_type; |
| 278 | #endif /* DOS_NT */ | ||
| 279 | 307 | ||
| 280 | /* String of length 256 mapping each char to its lower-case version. */ | 308 | /* String of length 256 mapping each char to its lower-case version. */ |
| 281 | Lisp_Object downcase_table; | 309 | Lisp_Object downcase_table; |
| 282 | /* String of length 256 mapping each char to its upper-case version. */ | 310 | /* String of length 256 mapping each char to its upper-case version. */ |
| 283 | Lisp_Object upcase_table; | 311 | Lisp_Object upcase_table; |
| 312 | /* Translate table for case-folding search. */ | ||
| 313 | Lisp_Object case_canon_table; | ||
| 314 | /* Inverse translate (equivalence class) table for case-folding search. */ | ||
| 315 | Lisp_Object case_eqv_table; | ||
| 284 | 316 | ||
| 285 | /* Non-nil means do not display continuation lines */ | 317 | /* Non-nil means do not display continuation lines. */ |
| 286 | Lisp_Object truncate_lines; | 318 | Lisp_Object truncate_lines; |
| 287 | /* Non-nil means display ctl chars with uparrow */ | 319 | /* Non-nil means display ctl chars with uparrow. */ |
| 288 | Lisp_Object ctl_arrow; | 320 | Lisp_Object ctl_arrow; |
| 289 | /* Non-nil means do selective display; | 321 | /* Non-nil means do selective display; |
| 290 | See doc string in syms_of_buffer (buffer.c) for details. */ | 322 | see doc string in syms_of_buffer (buffer.c) for details. */ |
| 291 | Lisp_Object selective_display; | 323 | Lisp_Object selective_display; |
| 292 | #ifndef old | 324 | #ifndef old |
| 293 | /* Non-nil means show ... at end of line followed by invisible lines. */ | 325 | /* Non-nil means show ... at end of line followed by invisible lines. */ |
| 294 | Lisp_Object selective_display_ellipses; | 326 | Lisp_Object selective_display_ellipses; |
| 295 | #endif | 327 | #endif |
| 296 | /* Alist of (FUNCTION . STRING) for each minor mode enabled in buffer. */ | 328 | /* Alist of (FUNCTION . STRING) for each minor mode enabled in buffer. */ |
| 297 | Lisp_Object minor_modes; | 329 | Lisp_Object minor_modes; |
| 298 | /* t if "self-insertion" should overwrite; `binary' if it should also | 330 | /* t if "self-insertion" should overwrite; `binary' if it should also |
| 299 | overwrite newlines and tabs - for editing executables and the like. */ | 331 | overwrite newlines and tabs - for editing executables and the like. */ |
| 300 | Lisp_Object overwrite_mode; | 332 | Lisp_Object overwrite_mode; |
| 301 | /* non-nil means abbrev mode is on. Expand abbrevs automatically. */ | 333 | /* non-nil means abbrev mode is on. Expand abbrevs automatically. */ |
| 302 | Lisp_Object abbrev_mode; | 334 | Lisp_Object abbrev_mode; |
| 303 | /* Display table to use for text in this buffer. */ | 335 | /* Display table to use for text in this buffer. */ |
| 304 | Lisp_Object display_table; | 336 | Lisp_Object display_table; |
| 305 | /* Translate table for case-folding search. */ | ||
| 306 | Lisp_Object case_canon_table; | ||
| 307 | /* Inverse translate (equivalence class) table for case-folding search. */ | ||
| 308 | Lisp_Object case_eqv_table; | ||
| 309 | /* Changes in the buffer are recorded here for undo. | ||
| 310 | t means don't record anything. */ | ||
| 311 | Lisp_Object undo_list; | ||
| 312 | /* t means the mark and region are currently active. */ | 337 | /* t means the mark and region are currently active. */ |
| 313 | Lisp_Object mark_active; | 338 | Lisp_Object mark_active; |
| 314 | 339 | ||
| 340 | /* Changes in the buffer are recorded here for undo. | ||
| 341 | t means don't record anything. | ||
| 342 | This information belongs to the base buffer of an indirect buffer, | ||
| 343 | But we can't store it in the struct buffer_text | ||
| 344 | because local variables have to be right in the struct buffer. | ||
| 345 | So we copy it around in set_buffer_internal. */ | ||
| 346 | Lisp_Object undo_list; | ||
| 347 | |||
| 315 | /* List of overlays that end at or before the current center, | 348 | /* List of overlays that end at or before the current center, |
| 316 | in order of end-position. */ | 349 | in order of end-position. */ |
| 317 | Lisp_Object overlays_before; | 350 | Lisp_Object overlays_before; |
| @@ -332,9 +365,24 @@ struct buffer | |||
| 332 | do a thorough redisplay, we compare this against the buffer's | 365 | do a thorough redisplay, we compare this against the buffer's |
| 333 | current display table to see whether the display table has | 366 | current display table to see whether the display table has |
| 334 | affected the widths of any characters. If it has, we | 367 | affected the widths of any characters. If it has, we |
| 335 | invalidate the width run cache, and re-initialize width_table. */ | 368 | invalidate the width run cache, and re-initialize width_table. */ |
| 336 | Lisp_Object width_table; | 369 | Lisp_Object width_table; |
| 337 | }; | 370 | |
| 371 | /* In an indirect buffer, or a buffer that is the base of an | ||
| 372 | indirect buffer, this holds a marker that records | ||
| 373 | PT for this buffer when the buffer is not current. */ | ||
| 374 | Lisp_Object pt_marker; | ||
| 375 | |||
| 376 | /* In an indirect buffer, or a buffer that is the base of an | ||
| 377 | indirect buffer, this holds a marker that records | ||
| 378 | BEGV for this buffer when the buffer is not current. */ | ||
| 379 | Lisp_Object begv_marker; | ||
| 380 | |||
| 381 | /* In an indirect buffer, or a buffer that is the base of an | ||
| 382 | indirect buffer, this holds a marker that records | ||
| 383 | ZV for this buffer when the buffer is not current. */ | ||
| 384 | Lisp_Object zv_marker; | ||
| 385 | }; | ||
| 338 | 386 | ||
| 339 | /* This points to the current buffer. */ | 387 | /* This points to the current buffer. */ |
| 340 | 388 | ||
| @@ -381,7 +429,7 @@ extern struct buffer buffer_local_types; | |||
| 381 | 429 | ||
| 382 | /* Point in the current buffer. This is an obsolete alias | 430 | /* Point in the current buffer. This is an obsolete alias |
| 383 | and should be eliminated. */ | 431 | and should be eliminated. */ |
| 384 | #define point (current_buffer->text.pt + 0) | 432 | #define point (current_buffer->pt + 0) |
| 385 | 433 | ||
| 386 | /* Return character at position n. No range checking. */ | 434 | /* Return character at position n. No range checking. */ |
| 387 | #define FETCH_CHAR(n) *(((n)>= GPT ? GAP_SIZE : 0) + (n) + BEG_ADDR - 1) | 435 | #define FETCH_CHAR(n) *(((n)>= GPT ? GAP_SIZE : 0) + (n) + BEG_ADDR - 1) |
| @@ -401,7 +449,7 @@ extern Lisp_Object Fbuffer_name (); | |||
| 401 | extern Lisp_Object Fget_file_buffer (); | 449 | extern Lisp_Object Fget_file_buffer (); |
| 402 | extern Lisp_Object Fnext_overlay_change (); | 450 | extern Lisp_Object Fnext_overlay_change (); |
| 403 | 451 | ||
| 404 | /* Functions to call before and after each text change. */ | 452 | /* Functions to call before and after each text change. */ |
| 405 | extern Lisp_Object Vbefore_change_function; | 453 | extern Lisp_Object Vbefore_change_function; |
| 406 | extern Lisp_Object Vafter_change_function; | 454 | extern Lisp_Object Vafter_change_function; |
| 407 | extern Lisp_Object Vbefore_change_functions; | 455 | extern Lisp_Object Vbefore_change_functions; |