Mercurial > hg > xemacs-beta
annotate src/extents.h @ 5797:a1808d52a34a
If the position of a window's cached point is deleted, use buffer point instead
src/ChangeLog addition:
2014-06-17 Aidan Kehoe <kehoea@parhasard.net>
* extents.h:
* window.c:
* window.c (unshow_buffer):
* window.c (Fset_window_buffer):
Use extents, rather than markers, for the window buffer point
cache, so that when the text containing that window buffer point
is deleted, the window display code uses the buffer's actual point
instead of the position that the marker had been moved to.
Fixes Michael Heinrich's problem of
http://mid.gmane.org/6zr42uxtf5.fsf@elektra.science-computing.de ,
introduced by Ben's patch of
https://bitbucket.org/xemacs/xemacs/commits/047d37eb70d70f43803 .
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Tue, 17 Jun 2014 20:55:45 +0100 |
parents | 308d34e9f07d |
children | b94d6e89ea5b |
rev | line source |
---|---|
428 | 1 /* Copyright (c) 1994, 1995 Free Software Foundation. |
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5118
diff
changeset
|
2 Copyright (c) 1995, 1996, 2002, 2010 Ben Wing. |
428 | 3 |
4 This file is part of XEmacs. | |
5 | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5170
diff
changeset
|
6 XEmacs is free software: you can redistribute it and/or modify it |
428 | 7 under the terms of the GNU General Public License as published by the |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5170
diff
changeset
|
8 Free Software Foundation, either version 3 of the License, or (at your |
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5170
diff
changeset
|
9 option) any later version. |
428 | 10 |
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5170
diff
changeset
|
17 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ |
428 | 18 |
19 /* Synched up with: Not in FSF. */ | |
20 | |
440 | 21 #ifndef INCLUDED_extents_h_ |
22 #define INCLUDED_extents_h_ | |
428 | 23 |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
4690
diff
changeset
|
24 DECLARE_LISP_OBJECT (extent, struct extent); |
428 | 25 #define XEXTENT(x) XRECORD (x, extent, struct extent) |
617 | 26 #define wrap_extent(p) wrap_record (p, extent) |
428 | 27 #define EXTENTP(x) RECORDP (x, extent) |
28 #define CHECK_EXTENT(x) CHECK_RECORD (x, extent) | |
29 #define CONCHECK_EXTENT(x) CONCHECK_RECORD (x, extent) | |
30 | |
872 | 31 struct extent_auxiliary; |
428 | 32 |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
4690
diff
changeset
|
33 DECLARE_LISP_OBJECT (extent_auxiliary, struct extent_auxiliary); |
428 | 34 #define XEXTENT_AUXILIARY(x) \ |
35 XRECORD (x, extent_auxiliary, struct extent_auxiliary) | |
617 | 36 #define wrap_extent_auxiliary(p) wrap_record (p, extent_auxiliary) |
428 | 37 #define EXTENT_AUXILIARYP(x) RECORDP (x, extent_auxiliary) |
38 #define CHECK_EXTENT_AUXILIARY(x) CHECK_RECORD (x, extent_auxiliary) | |
39 #define CONCHECK_EXTENT_AUXILIARY(x) CONCHECK_RECORD (x, extent_auxiliary) | |
40 | |
872 | 41 struct extent_info; |
428 | 42 |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
4690
diff
changeset
|
43 DECLARE_LISP_OBJECT (extent_info, struct extent_info); |
428 | 44 #define XEXTENT_INFO(x) XRECORD (x, extent_info, struct extent_info) |
617 | 45 #define wrap_extent_info(p) wrap_record (p, extent_info) |
428 | 46 #define EXTENT_INFOP(x) RECORDP (x, extent_info) |
47 #define CHECK_EXTENT_INFO(x) CHECK_RECORD (x, extent_info) | |
48 #define CONCHECK_EXTENT_INFO(x) CONCHECK_RECORD (x, extent_info) | |
49 | |
3092 | 50 #ifdef NEW_GC |
51 struct extent_list_marker; | |
52 | |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
4690
diff
changeset
|
53 DECLARE_LISP_OBJECT (extent_list_marker, struct extent_list_marker); |
3092 | 54 #define XEXTENT_LIST_MARKER(x) \ |
55 XRECORD (x, extent_list_marker, struct extent_list_marker) | |
56 #define wrap_extent_list_marker(p) wrap_record (p, extent_list_marker) | |
57 #define EXTENT_LIST_MARKERP(x) RECORDP (x, extent_list_marker) | |
58 #define CHECK_EXTENT_LIST_MARKER(x) CHECK_RECORD (x, extent_list_marker) | |
59 #define CONCHECK_EXTENT_LIST_MARKER(x) CONCHECK_RECORD (x, extent_list_marker) | |
60 | |
61 struct extent_list; | |
62 | |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
4690
diff
changeset
|
63 DECLARE_LISP_OBJECT (extent_list, struct extent_list); |
3092 | 64 #define XEXTENT_LIST(x) XRECORD (x, extent_list, struct extent_list) |
65 #define wrap_extent_list(p) wrap_record (p, extent_list) | |
66 #define EXTENT_LISTP(x) RECORDP (x, extent_list) | |
67 #define CHECK_EXTENT_LIST(x) CHECK_RECORD (x, extent_list) | |
68 #define CONCHECK_EXTENT_LIST(x) CONCHECK_RECORD (x, extent_list) | |
69 | |
70 struct stack_of_extents; | |
71 | |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
4690
diff
changeset
|
72 DECLARE_LISP_OBJECT (stack_of_extents, struct stack_of_extents); |
3092 | 73 #define XSTACK_OF_EXTENTS(x) \ |
74 XRECORD (x, stack_of_extents, struct stack_of_extents) | |
75 #define wrap_stack_of_extents(p) wrap_record (p, stack_of_extents) | |
76 #define STACK_OF_EXTENTSP(x) RECORDP (x, stack_of_extents) | |
77 #define CHECK_STACK_OF_EXTENTS(x) CHECK_RECORD (x, stack_of_extents) | |
78 #define CONCHECK_STACK_OF_EXTENTS(x) CONCHECK_RECORD (x, stack_of_extents) | |
79 #endif /* NEW_GC */ | |
80 | |
872 | 81 /* the layouts for glyphs (extent->flags.glyph_layout). Must fit in 2 bits. */ |
82 typedef enum glyph_layout | |
826 | 83 { |
872 | 84 GL_TEXT, |
85 GL_OUTSIDE_MARGIN, | |
86 GL_INSIDE_MARGIN, | |
87 GL_WHITESPACE | |
88 } glyph_layout; | |
428 | 89 |
872 | 90 struct extent; |
428 | 91 |
872 | 92 void set_extent_endpoints (EXTENT extent, Bytexpos s, Bytexpos e, |
93 Lisp_Object object); | |
428 | 94 |
872 | 95 |
96 void flush_cached_extent_info (Lisp_Object extent_info); | |
647 | 97 |
826 | 98 void set_extent_glyph (EXTENT extent, Lisp_Object glyph, int endp, |
99 glyph_layout layout); | |
100 | |
428 | 101 |
102 /* flags for map_extents() and friends */ | |
103 #define ME_END_CLOSED (1 << 0) | |
104 #define ME_START_OPEN (1 << 1) | |
105 #define ME_ALL_EXTENTS_CLOSED (1 << 2) | |
106 #define ME_ALL_EXTENTS_OPEN (2 << 2) | |
107 #define ME_ALL_EXTENTS_CLOSED_OPEN (3 << 2) | |
108 #define ME_ALL_EXTENTS_OPEN_CLOSED (4 << 2) | |
109 #define ME_ALL_EXTENTS_MASK (7 << 2) | |
110 #define ME_START_IN_REGION (1 << 5) | |
111 #define ME_END_IN_REGION (2 << 5) | |
112 #define ME_START_AND_END_IN_REGION (3 << 5) | |
113 #define ME_START_OR_END_IN_REGION (4 << 5) | |
114 #define ME_IN_REGION_MASK (7 << 5) | |
115 #define ME_NEGATE_IN_REGION (1 << 8) | |
116 /* the following flags are internal-only */ | |
117 #define ME_INCLUDE_INTERNAL (1 << 9) | |
118 #define ME_MIGHT_THROW (1 << 10) | |
119 #define ME_MIGHT_MODIFY_TEXT (1 << 11) | |
120 #define ME_MIGHT_MODIFY_EXTENTS (1 << 12) | |
121 #define ME_MIGHT_MOVE_SOE (1 << 13) | |
122 #define ME_MIGHT_CALL_ELISP (ME_MIGHT_THROW | ME_MIGHT_MODIFY_TEXT | \ | |
123 ME_MIGHT_MODIFY_EXTENTS | ME_MIGHT_MOVE_SOE) | |
124 | |
125 | |
126 extern int inside_undo; | |
442 | 127 extern int in_modeline_generation; |
428 | 128 |
4690
257b468bf2ca
Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
129 extern Fixnum mouse_highlight_priority; |
257b468bf2ca
Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
130 |
872 | 131 EXFUN (Fextent_at, 5); |
132 EXFUN (Fextent_property, 3); | |
133 EXFUN (Fput_text_property, 5); | |
134 | |
5797
a1808d52a34a
If the position of a window's cached point is deleted, use buffer point instead
Aidan Kehoe <kehoea@parhasard.net>
parents:
5402
diff
changeset
|
135 EXFUN (Fextent_detached_p, 1); |
872 | 136 EXFUN (Fdetach_extent, 1); |
137 EXFUN (Fextent_end_position, 1); | |
138 EXFUN (Fextent_object, 1); | |
139 EXFUN (Fextent_properties, 1); | |
140 EXFUN (Fextent_start_position, 1); | |
141 EXFUN (Fget_char_property, 4); | |
142 EXFUN (Fmake_extent, 3); | |
143 EXFUN (Fnext_extent_change, 2); | |
144 EXFUN (Fprevious_extent_change, 2); | |
2506 | 145 EXFUN (Fprevious_single_char_property_change, 4); |
872 | 146 EXFUN (Fset_extent_endpoints, 4); |
147 EXFUN (Fset_extent_parent, 2); | |
148 EXFUN (Fset_extent_property, 3); | |
4690
257b468bf2ca
Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
149 EXFUN (Fset_extent_priority, 2); |
257b468bf2ca
Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
150 EXFUN (Fset_extent_face, 2); |
257b468bf2ca
Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
151 EXFUN (Fmap_extents, 8); |
872 | 152 |
153 enum extent_at_flag | |
154 { | |
155 EXTENT_AT_DEFAULT = 0, | |
156 EXTENT_AT_AFTER = 0, | |
157 EXTENT_AT_BEFORE, | |
158 EXTENT_AT_AT | |
159 }; | |
160 | |
161 Bytexpos extent_endpoint_byte (EXTENT extent, int endp); | |
162 Charxpos extent_endpoint_char (EXTENT extent, int endp); | |
2506 | 163 Bytexpos next_previous_single_property_change (Bytexpos pos, Lisp_Object prop, |
164 Lisp_Object object, | |
165 Bytexpos limit, | |
166 Boolint next, | |
167 Boolint text_props_only); | |
872 | 168 Lisp_Object get_char_property (Bytexpos position, Lisp_Object prop, |
169 Lisp_Object object, enum extent_at_flag fl, | |
170 int text_props_only); | |
171 void adjust_extents (Lisp_Object object, Memxpos from, | |
172 Memxpos to, int amount); | |
173 void adjust_extents_for_deletion (Lisp_Object object, Bytexpos from, | |
174 Bytexpos to, int gapsize, | |
175 int numdel, int movegapsize); | |
176 void verify_extent_modification (Lisp_Object object, Bytexpos from, | |
177 Bytexpos to, | |
178 Lisp_Object inhibit_read_only_value); | |
179 void process_extents_for_insertion (Lisp_Object object, | |
180 Bytexpos opoint, Bytecount length); | |
181 void process_extents_for_deletion (Lisp_Object object, Bytexpos from, | |
182 Bytexpos to, int destroy_them); | |
183 /* Note the following function is in Charbpos's */ | |
184 void report_extent_modification (Lisp_Object buffer, Charbpos start, | |
185 Charbpos end, int afterp); | |
186 void add_string_extents (Lisp_Object string, struct buffer *buf, | |
187 Bytexpos opoint, Bytecount length); | |
188 void splice_in_string_extents (Lisp_Object string, struct buffer *buf, | |
189 Bytexpos opoint, Bytecount length, | |
190 Bytecount pos); | |
191 void copy_string_extents (Lisp_Object new_string, | |
192 Lisp_Object old_string, | |
193 Bytecount new_pos, Bytecount old_pos, | |
194 Bytecount length); | |
195 void detach_all_extents (Lisp_Object object); | |
196 Lisp_Object extent_at (Bytexpos position, Lisp_Object object, | |
197 Lisp_Object property, EXTENT before, | |
198 enum extent_at_flag at_flag, int all_extents); | |
199 | |
200 | |
428 | 201 struct extent_fragment *extent_fragment_new (Lisp_Object buffer_or_string, |
202 struct frame *frm); | |
203 face_index extent_fragment_update (struct window *w, | |
204 struct extent_fragment *ef, | |
826 | 205 Bytexpos pos, Lisp_Object last_glyph); |
428 | 206 void extent_fragment_delete (struct extent_fragment *ef); |
207 | |
208 /* from alloc.c */ | |
209 struct extent *allocate_extent (void); | |
210 | |
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5118
diff
changeset
|
211 void attach_extent_auxiliary (EXTENT ext); |
428 | 212 void init_buffer_extents (struct buffer *b); |
213 void uninit_buffer_extents (struct buffer *b); | |
214 | |
215 #ifdef ERROR_CHECK_EXTENTS | |
216 void sledgehammer_extent_check (Lisp_Object obj); | |
217 #endif | |
218 | |
219 #ifdef MEMORY_USAGE_STATS | |
5170
5ddbab03b0e6
various fixes to memory-usage stats
Ben Wing <ben@xemacs.org>
parents:
5168
diff
changeset
|
220 Bytecount compute_buffer_extent_usage (struct buffer *b); |
428 | 221 #endif |
222 | |
440 | 223 #endif /* INCLUDED_extents_h_ */ |