annotate src/marker.c @ 20834:95a80c1e06c3

(Fsubst_char_in_region): Handle character-base position and byte-base position correctly. (Fstring_to_char): Give byte size to STRING_CHAR.
author Kenichi Handa <handa@m17n.org>
date Wed, 04 Feb 1998 11:23:28 +0000
parents d43ba5d91281
children 431f875501a6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
1 /* Markers: examining, setting and deleting.
20706
d43ba5d91281 Update copyright year.
Richard M. Stallman <rms@gnu.org>
parents: 20678
diff changeset
2 Copyright (C) 1985, 1997, 1998 Free Software Foundation, Inc.
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
12244
ac7375e60931 Update GPL to version 2.
Karl Heuer <kwzh@gnu.org>
parents: 10999
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14082
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14082
diff changeset
19 Boston, MA 02111-1307, USA. */
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 484
diff changeset
22 #include <config.h>
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include "lisp.h"
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include "buffer.h"
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
25 #include "charset.h"
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
27 /* Record one cached position found recently by
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
28 buf_charpos_to_bytepos or buf_bytepos_to_charpos. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
29
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
30 static int cached_charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
31 static int cached_bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
32 static struct buffer *cached_buffer;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
33 static int cached_modiff;
20678
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
34
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
35 clear_charpos_cache (b)
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
36 struct buffer *b;
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
37 {
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
38 if (cached_buffer == b)
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
39 cached_buffer = 0;
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
40 }
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
41
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
42 /* Converting between character positions and byte positions. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
43
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
44 /* There are several places in the buffer where we know
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
45 the corrspondence: BEG, BEGV, PT, GPT, ZV and Z,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
46 and everywhere there is a marker. So we find the one of these places
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
47 that is closest to the specified position, and scan from there. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
48
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
49 /* charpos_to_bytepos returns the byte position corresponding to CHARPOS. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
50
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
51 /* This macro is a subroutine of charpos_to_bytepos.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
52 Note that it is desirable that BYTEPOS is not evaluated
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
53 except when we really want its value. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
54
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
55 #define CONSIDER(CHARPOS, BYTEPOS) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
56 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
57 int this_charpos = (CHARPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
58 int changed = 0; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
59 \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
60 if (this_charpos == charpos) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
61 return (BYTEPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
62 else if (this_charpos > charpos) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
63 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
64 if (this_charpos < best_above) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
65 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
66 best_above = this_charpos; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
67 best_above_byte = (BYTEPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
68 changed = 1; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
69 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
70 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
71 else if (this_charpos > best_below) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
72 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
73 best_below = this_charpos; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
74 best_below_byte = (BYTEPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
75 changed = 1; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
76 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
77 \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
78 if (changed) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
79 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
80 if (best_above - best_below == best_above_byte - best_below_byte) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
81 return best_below_byte + (charpos - best_below); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
82 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
83 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
84
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
85 int
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
86 charpos_to_bytepos (charpos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
87 int charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
88 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
89 return buf_charpos_to_bytepos (current_buffer, charpos);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
90 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
91
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
92 int
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
93 buf_charpos_to_bytepos (b, charpos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
94 struct buffer *b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
95 int charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
96 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
97 Lisp_Object tail;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
98 int gapend_byte = BUF_GPT_BYTE (b) + BUF_GAP_SIZE (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
99 int best_above, best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
100 int best_below, best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
101
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
102 if (charpos < BUF_BEG (b) || charpos > BUF_Z (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
103 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
104
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
105 best_above = BUF_Z (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
106 best_above_byte = BUF_Z_BYTE (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
107
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
108 /* If this buffer has as many characters as bytes,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
109 each character must be one byte.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
110 This takes care of the case where enable-multibyte-characters is nil. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
111 if (best_above == best_above_byte)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
112 return charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
113
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
114 best_below = 1;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
115 best_below_byte = 1;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
116
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
117 /* We find in best_above and best_above_byte
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
118 the closest known point above CHARPOS,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
119 and in best_below and best_below_byte
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
120 the closest known point below CHARPOS,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
121
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
122 If at any point we can tell that the space between those
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
123 two best approximations is all single-byte,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
124 we interpolate the result immediately. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
125
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
126 CONSIDER (BUF_PT (b), BUF_PT_BYTE (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
127 CONSIDER (BUF_GPT (b), BUF_GPT_BYTE (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
128 CONSIDER (BUF_BEGV (b), BUF_BEGV_BYTE (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
129 CONSIDER (BUF_ZV (b), BUF_ZV_BYTE (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
130
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
131 if (b == cached_buffer && BUF_MODIFF (b) == cached_modiff)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
132 CONSIDER (cached_charpos, cached_bytepos);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
133
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
134 tail = BUF_MARKERS (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
135 while (XSYMBOL (tail) != XSYMBOL (Qnil))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
136 {
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
137 CONSIDER (XMARKER (tail)->charpos, XMARKER (tail)->bytepos);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
138
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
139 /* If we are down to a range of 50 chars,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
140 don't bother checking any other markers;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
141 scan the intervening chars directly now. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
142 if (best_above - best_below < 50)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
143 break;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
144
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
145 tail = XMARKER (tail)->chain;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
146 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
147
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
148 /* We get here if we did not exactly hit one of the known places.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
149 We have one known above and one known below.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
150 Scan, counting characters, from whichever one is closer. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
151
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
152 if (charpos - best_below < best_above - charpos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
153 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
154 int record = charpos - best_below > 5000;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
155
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
156 while (best_below != charpos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
157 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
158 best_below++;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
159 BUF_INC_POS (b, best_below_byte);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
160 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
161
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
162 /* If this position is quite far from the nearest known position,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
163 cache the correspondence by creating a marker here.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
164 It will last until the next GC. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
165 if (record)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
166 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
167 Lisp_Object marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
168 marker = Fmake_marker ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
169 set_marker_both (marker, Qnil, best_below, best_below_byte);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
170 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
171
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
172 cached_buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
173 cached_modiff = BUF_MODIFF (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
174 cached_charpos = best_below;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
175 cached_bytepos = best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
176
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
177 return best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
178 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
179 else
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
180 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
181 int record = best_above - charpos > 5000;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
182
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
183 while (best_above != charpos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
184 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
185 best_above--;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
186 BUF_DEC_POS (b, best_above_byte);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
187 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
188
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
189 /* If this position is quite far from the nearest known position,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
190 cache the correspondence by creating a marker here.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
191 It will last until the next GC. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
192 if (record)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
193 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
194 Lisp_Object marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
195 marker = Fmake_marker ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
196 set_marker_both (marker, Qnil, best_above, best_above_byte);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
197 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
198
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
199 cached_buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
200 cached_modiff = BUF_MODIFF (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
201 cached_charpos = best_above;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
202 cached_bytepos = best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
203
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
204 return best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
205 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
206 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
207
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
208 #undef CONSIDER
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
209
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
210 /* bytepos_to_charpos returns the char position corresponding to BYTEPOS. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
211
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
212 /* This macro is a subroutine of bytepos_to_charpos.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
213 It is used when BYTEPOS is actually the byte position. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
214
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
215 #define CONSIDER(BYTEPOS, CHARPOS) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
216 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
217 int this_bytepos = (BYTEPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
218 int changed = 0; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
219 \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
220 if (this_bytepos == bytepos) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
221 return (CHARPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
222 else if (this_bytepos > bytepos) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
223 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
224 if (this_bytepos < best_above_byte) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
225 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
226 best_above = (CHARPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
227 best_above_byte = this_bytepos; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
228 changed = 1; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
229 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
230 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
231 else if (this_bytepos > best_below_byte) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
232 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
233 best_below = (CHARPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
234 best_below_byte = this_bytepos; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
235 changed = 1; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
236 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
237 \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
238 if (changed) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
239 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
240 if (best_above - best_below == best_above_byte - best_below_byte) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
241 return best_below + (bytepos - best_below_byte); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
242 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
243 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
244
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
245 int
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
246 bytepos_to_charpos (bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
247 int bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
248 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
249 return buf_bytepos_to_charpos (current_buffer, bytepos);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
250 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
251
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
252 int
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
253 buf_bytepos_to_charpos (b, bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
254 struct buffer *b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
255 int bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
256 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
257 Lisp_Object tail;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
258 int best_above, best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
259 int best_below, best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
260
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
261 if (bytepos < BUF_BEG_BYTE (b) || bytepos > BUF_Z_BYTE (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
262 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
263
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
264 best_above = BUF_Z (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
265 best_above_byte = BUF_Z_BYTE (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
266
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
267 /* If this buffer has as many characters as bytes,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
268 each character must be one byte.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
269 This takes care of the case where enable-multibyte-characters is nil. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
270 if (best_above == best_above_byte)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
271 return bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
272
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
273 best_below = 1;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
274 best_below_byte = 1;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
275
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
276 CONSIDER (BUF_PT_BYTE (b), BUF_PT (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
277 CONSIDER (BUF_GPT_BYTE (b), BUF_GPT (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
278 CONSIDER (BUF_BEGV_BYTE (b), BUF_BEGV (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
279 CONSIDER (BUF_ZV_BYTE (b), BUF_ZV (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
280
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
281 if (b == cached_buffer && BUF_MODIFF (b) == cached_modiff)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
282 CONSIDER (cached_bytepos, cached_charpos);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
283
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
284 tail = BUF_MARKERS (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
285 while (XSYMBOL (tail) != XSYMBOL (Qnil))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
286 {
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
287 CONSIDER (XMARKER (tail)->bytepos, XMARKER (tail)->charpos);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
288
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
289 /* If we are down to a range of 50 chars,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
290 don't bother checking any other markers;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
291 scan the intervening chars directly now. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
292 if (best_above - best_below < 50)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
293 break;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
294
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
295 tail = XMARKER (tail)->chain;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
296 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
297
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
298 /* We get here if we did not exactly hit one of the known places.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
299 We have one known above and one known below.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
300 Scan, counting characters, from whichever one is closer. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
301
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
302 if (bytepos - best_below_byte < best_above_byte - bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
303 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
304 int record = best_above_byte - bytepos > 5000;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
305
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
306 while (best_below_byte < bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
307 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
308 best_below++;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
309 BUF_INC_POS (b, best_below_byte);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
310 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
311
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
312 /* If this position is quite far from the nearest known position,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
313 cache the correspondence by creating a marker here.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
314 It will last until the next GC. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
315 if (record)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
316 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
317 Lisp_Object marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
318 marker = Fmake_marker ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
319 set_marker_both (marker, Qnil, best_below, best_below_byte);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
320 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
321
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
322 cached_buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
323 cached_modiff = BUF_MODIFF (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
324 cached_charpos = best_below;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
325 cached_bytepos = best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
326
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
327 return best_below;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
328 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
329 else
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
330 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
331 int record = best_above_byte - bytepos > 5000;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
332
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
333 while (best_above_byte > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
334 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
335 best_above--;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
336 BUF_DEC_POS (b, best_above_byte);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
337 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
338
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
339 /* If this position is quite far from the nearest known position,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
340 cache the correspondence by creating a marker here.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
341 It will last until the next GC. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
342 if (record)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
343 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
344 Lisp_Object marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
345 marker = Fmake_marker ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
346 set_marker_both (marker, Qnil, best_above, best_above_byte);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
347 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
348
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
349 cached_buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
350 cached_modiff = BUF_MODIFF (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
351 cached_charpos = best_above;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
352 cached_bytepos = best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
353
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
354 return best_above;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
355 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
356 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
357
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
358 #undef CONSIDER
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
359
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 /* Operations on markers. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 DEFUN ("marker-buffer", Fmarker_buffer, Smarker_buffer, 1, 1, 0,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 "Return the buffer that MARKER points into, or nil if none.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 Returns nil if MARKER points into a dead buffer.")
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 (marker)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 register Lisp_Object marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 register Lisp_Object buf;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 CHECK_MARKER (marker, 0);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 if (XMARKER (marker)->buffer)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 {
9275
bb50d17f7441 (Fmarker_buffer): Use new accessor macros instead of calling XSET directly.
Karl Heuer <kwzh@gnu.org>
parents: 9121
diff changeset
372 XSETBUFFER (buf, XMARKER (marker)->buffer);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 /* Return marker's buffer only if it is not dead. */
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
374 if (!NILP (XBUFFER (buf)->name))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375 return buf;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 return Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 DEFUN ("marker-position", Fmarker_position, Smarker_position, 1, 1, 0,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 "Return the position MARKER points at, as a character number.")
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382 (marker)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 Lisp_Object marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385 register Lisp_Object pos;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 register int i;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 register struct buffer *buf;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 CHECK_MARKER (marker, 0);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 if (XMARKER (marker)->buffer)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
391 return make_number (XMARKER (marker)->charpos);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 return Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 }
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
395
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 DEFUN ("set-marker", Fset_marker, Sset_marker, 2, 3, 0,
14082
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
397 "Position MARKER before character number POSITION in BUFFER.\n\
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 BUFFER defaults to the current buffer.\n\
14082
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
399 If POSITION is nil, makes marker point nowhere.\n\
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 Then it no longer slows down editing in any buffer.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401 Returns MARKER.")
14082
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
402 (marker, position, buffer)
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
403 Lisp_Object marker, position, buffer;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 {
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
405 register int charno, bytepos;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 register struct buffer *b;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 register struct Lisp_Marker *m;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 CHECK_MARKER (marker, 0);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 /* If position is nil or a marker that points nowhere,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 make this marker point nowhere. */
14082
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
412 if (NILP (position)
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
413 || (MARKERP (position) && !XMARKER (position)->buffer))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 unchain_marker (marker);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
419 if (NILP (buffer))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 b = current_buffer;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 else
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 CHECK_BUFFER (buffer, 1);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 b = XBUFFER (buffer);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 /* If buffer is dead, set marker to point nowhere. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 if (EQ (b->name, Qnil))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 unchain_marker (marker);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
433 m = XMARKER (marker);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
434
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
435 /* Optimize the special case where we are copying the position
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
436 of an existing marker, and MARKER is already in the same buffer. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
437 if (MARKERP (position) && b == XMARKER (position)->buffer
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
438 && b == m->buffer)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
439 {
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
440 m->bytepos = XMARKER (position)->bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
441 m->charpos = XMARKER (position)->charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
442 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
443 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
444
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
445 CHECK_NUMBER_COERCE_MARKER (position, 1);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
446
14082
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
447 charno = XINT (position);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 if (charno < BUF_BEG (b))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 charno = BUF_BEG (b);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 if (charno > BUF_Z (b))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 charno = BUF_Z (b);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
453
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
454 bytepos = buf_charpos_to_bytepos (b, charno);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
455
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
456 /* Every character is at least one byte. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
457 if (charno > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
458 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
459
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
460 m->bytepos = bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
461 m->charpos = charno;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 if (m->buffer != b)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 unchain_marker (marker);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 m->buffer = b;
10315
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
467 m->chain = BUF_MARKERS (b);
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
468 BUF_MARKERS (b) = marker;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 /* This version of Fset_marker won't let the position
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 be outside the visible part. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 Lisp_Object
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 set_marker_restricted (marker, pos, buffer)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 Lisp_Object marker, pos, buffer;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 {
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
481 register int charno, bytepos;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 register struct buffer *b;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 register struct Lisp_Marker *m;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 CHECK_MARKER (marker, 0);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 /* If position is nil or a marker that points nowhere,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 make this marker point nowhere. */
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
488 if (NILP (pos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
489 || (MARKERP (pos) && !XMARKER (pos)->buffer))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 unchain_marker (marker);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
495 if (NILP (buffer))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 b = current_buffer;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 else
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 CHECK_BUFFER (buffer, 1);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 b = XBUFFER (buffer);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 /* If buffer is dead, set marker to point nowhere. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 if (EQ (b->name, Qnil))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 unchain_marker (marker);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
509 m = XMARKER (marker);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
510
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
511 /* Optimize the special case where we are copying the position
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
512 of an existing marker, and MARKER is already in the same buffer. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
513 if (MARKERP (pos) && b == XMARKER (pos)->buffer
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
514 && b == m->buffer)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
515 {
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
516 m->bytepos = XMARKER (pos)->bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
517 m->charpos = XMARKER (pos)->charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
518 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
519 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
520
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
521 CHECK_NUMBER_COERCE_MARKER (pos, 1);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
522
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 charno = XINT (pos);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 if (charno < BUF_BEGV (b))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 charno = BUF_BEGV (b);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 if (charno > BUF_ZV (b))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 charno = BUF_ZV (b);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
529
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
530 bytepos = buf_charpos_to_bytepos (b, charno);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
531
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
532 /* Every character is at least one byte. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
533 if (charno > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
534 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
535
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
536 m->bytepos = bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
537 m->charpos = charno;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
538
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
539 if (m->buffer != b)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
540 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
541 unchain_marker (marker);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
542 m->buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
543 m->chain = BUF_MARKERS (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
544 BUF_MARKERS (b) = marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
545 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
546
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
547 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
548 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
549
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
550 /* Set the position of MARKER, specifying both the
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
551 character position and the corresponding byte position. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
552
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
553 Lisp_Object
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
554 set_marker_both (marker, buffer, charpos, bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
555 Lisp_Object marker, buffer;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
556 int charpos, bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
557 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
558 register struct buffer *b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
559 register struct Lisp_Marker *m;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
560
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
561 CHECK_MARKER (marker, 0);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
562 /* If position is nil or a marker that points nowhere,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
563 make this marker point nowhere. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
564 if (NILP (charpos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
565 || (MARKERP (charpos) && !XMARKER (charpos)->buffer))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
566 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
567 unchain_marker (marker);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
568 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
569 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
570
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
571 CHECK_NUMBER_COERCE_MARKER (charpos, 1);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
572 if (NILP (buffer))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
573 b = current_buffer;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
574 else
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
575 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
576 CHECK_BUFFER (buffer, 1);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
577 b = XBUFFER (buffer);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
578 /* If buffer is dead, set marker to point nowhere. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
579 if (EQ (b->name, Qnil))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
580 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
581 unchain_marker (marker);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
582 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
583 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
584 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
585
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
586 m = XMARKER (marker);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
587
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
588 /* In a single-byte buffer, the two positions must be equal. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
589 if (BUF_Z (b) == BUF_Z_BYTE (b)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
590 && charpos != bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
591 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
592 /* Every character is at least one byte. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
593 if (charpos > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
594 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
595
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
596 m->bytepos = bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
597 m->charpos = charpos;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 if (m->buffer != b)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 unchain_marker (marker);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 m->buffer = b;
10315
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
603 m->chain = BUF_MARKERS (b);
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
604 BUF_MARKERS (b) = marker;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
610 /* This version of set_marker_both won't let the position
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
611 be outside the visible part. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
612
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
613 Lisp_Object
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
614 set_marker_restricted_both (marker, buffer, charpos, bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
615 Lisp_Object marker, buffer;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
616 int charpos, bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
617 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
618 register struct buffer *b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
619 register struct Lisp_Marker *m;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
620
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
621 CHECK_MARKER (marker, 0);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
622
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
623 if (NILP (buffer))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
624 b = current_buffer;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
625 else
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
626 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
627 CHECK_BUFFER (buffer, 1);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
628 b = XBUFFER (buffer);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
629 /* If buffer is dead, set marker to point nowhere. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
630 if (EQ (b->name, Qnil))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
631 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
632 unchain_marker (marker);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
633 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
634 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
635 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
636
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
637 m = XMARKER (marker);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
638
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
639 if (charpos < BUF_BEGV (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
640 charpos = BUF_BEGV (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
641 if (charpos > BUF_ZV (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
642 charpos = BUF_ZV (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
643 if (bytepos < BUF_BEGV_BYTE (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
644 bytepos = BUF_BEGV_BYTE (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
645 if (bytepos > BUF_ZV_BYTE (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
646 bytepos = BUF_ZV_BYTE (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
647
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
648 /* In a single-byte buffer, the two positions must be equal. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
649 if (BUF_Z (b) == BUF_Z_BYTE (b)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
650 && charpos != bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
651 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
652 /* Every character is at least one byte. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
653 if (charpos > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
654 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
655
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
656 m->bytepos = bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
657 m->charpos = charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
658
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
659 if (m->buffer != b)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
660 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
661 unchain_marker (marker);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
662 m->buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
663 m->chain = BUF_MARKERS (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
664 BUF_MARKERS (b) = marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
665 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
666
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
667 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
668 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
669
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 /* This is called during garbage collection,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 so we must be careful to ignore and preserve mark bits,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 including those in chain fields of markers. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673
20301
6e2ea54ad704 (unchain_marker): Define as returning nothing.
Andreas Schwab <schwab@suse.de>
parents: 16418
diff changeset
674 void
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675 unchain_marker (marker)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676 register Lisp_Object marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 register Lisp_Object tail, prev, next;
8829
6f0d48241807 (unchain_marker): Use EMACS_INT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
679 register EMACS_INT omark;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 register struct buffer *b;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 b = XMARKER (marker)->buffer;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683 if (b == 0)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 return;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 if (EQ (b->name, Qnil))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 abort ();
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688
10315
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
689 tail = BUF_MARKERS (b);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 prev = Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 while (XSYMBOL (tail) != XSYMBOL (Qnil))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 next = XMARKER (tail)->chain;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 XUNMARK (next);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 if (XMARKER (marker) == XMARKER (tail))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697 {
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
698 if (NILP (prev))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 {
10315
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
700 BUF_MARKERS (b) = next;
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
701 /* Deleting first marker from the buffer's chain. Crash
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
702 if new first marker in chain does not say it belongs
10999
84076f6a1f1b (unchain_marker): Allow differing buffers
Richard M. Stallman <rms@gnu.org>
parents: 10315
diff changeset
703 to the same buffer, or at least that they have the same
84076f6a1f1b (unchain_marker): Allow differing buffers
Richard M. Stallman <rms@gnu.org>
parents: 10315
diff changeset
704 base buffer. */
84076f6a1f1b (unchain_marker): Allow differing buffers
Richard M. Stallman <rms@gnu.org>
parents: 10315
diff changeset
705 if (!NILP (next) && b->text != XMARKER (next)->buffer->text)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706 abort ();
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708 else
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 omark = XMARKBIT (XMARKER (prev)->chain);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 XMARKER (prev)->chain = next;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712 XSETMARKBIT (XMARKER (prev)->chain, omark);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
714 break;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 else
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 prev = tail;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 tail = next;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720 XMARKER (marker)->buffer = 0;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
723 /* Return the char position of marker MARKER, as a C integer. */
10315
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
724
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
725 int
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 marker_position (marker)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 Lisp_Object marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 register struct Lisp_Marker *m = XMARKER (marker);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 register struct buffer *buf = m->buffer;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
731
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
732 if (!buf)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
733 error ("Marker does not point anywhere");
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
734
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
735 return m->charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
736 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
737
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
738 /* Return the byte position of marker MARKER, as a C integer. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
739
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
740 int
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
741 marker_byte_position (marker)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
742 Lisp_Object marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
743 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
744 register struct Lisp_Marker *m = XMARKER (marker);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
745 register struct buffer *buf = m->buffer;
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
746 register int i = m->bytepos;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 if (!buf)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 error ("Marker does not point anywhere");
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
751 if (i < BUF_BEG_BYTE (buf) || i > BUF_Z_BYTE (buf))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752 abort ();
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 return i;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755 }
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
756
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
757 DEFUN ("copy-marker", Fcopy_marker, Scopy_marker, 1, 2, 0,
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
758 "Return a new marker pointing at the same place as MARKER.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
759 If argument is a number, makes a new marker pointing\n\
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
760 at that position in the current buffer.\n\
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
761 The optional argument TYPE specifies the insertion type of the new marker;\n\
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
762 see `marker-insertion-type'.")
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
763 (marker, type)
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
764 register Lisp_Object marker, type;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
765 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
766 register Lisp_Object new;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
767
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
768 if (INTEGERP (marker) || MARKERP (marker))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769 {
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
770 new = Fmake_marker ();
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
771 Fset_marker (new, marker,
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
772 (MARKERP (marker) ? Fmarker_buffer (marker) : Qnil));
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
773 XMARKER (new)->insertion_type = !NILP (type);
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
774 return new;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775 }
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
776 else
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
777 marker = wrong_type_argument (Qinteger_or_marker_p, marker);
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
778 }
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
779
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
780 DEFUN ("marker-insertion-type", Fmarker_insertion_type,
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
781 Smarker_insertion_type, 1, 1, 0,
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
782 "Return insertion type of MARKER: t if it stays after inserted text.\n\
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
783 nil means the marker stays before text inserted there.")
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
784 (marker)
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
785 register Lisp_Object marker;
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
786 {
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
787 register Lisp_Object buf;
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
788 CHECK_MARKER (marker, 0);
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
789 return XMARKER (marker)->insertion_type ? Qt : Qnil;
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
790 }
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
791
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
792 DEFUN ("set-marker-insertion-type", Fset_marker_insertion_type,
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
793 Sset_marker_insertion_type, 2, 2, 0,
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
794 "Set the insertion-type of MARKER to TYPE.\n\
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
795 If TYPE is t, it means the marker advances when you insert text at it.\n\
13327
e518c2be8d7b (Fset_marker_insertion_type): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12999
diff changeset
796 If TYPE is nil, it means the marker stays behind when you insert text at it.")
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
797 (marker, type)
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
798 Lisp_Object marker, type;
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
799 {
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
800 CHECK_MARKER (marker, 0);
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
801
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
802 XMARKER (marker)->insertion_type = ! NILP (type);
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
803 return type;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
804 }
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
805
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
806 DEFUN ("buffer-has-markers-at", Fbuffer_has_markers_at, Sbuffer_has_markers_at,
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
807 1, 1, 0,
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
808 "Return t if there are markers pointing at POSITION in the current buffer.")
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
809 (position)
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
810 Lisp_Object position;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
811 {
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
812 register Lisp_Object tail;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
813 register int charno;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
814
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
815 charno = XINT (position);
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
816
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
817 if (charno < BEG)
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
818 charno = BEG;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
819 if (charno > Z)
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
820 charno = Z;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
821
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
822 for (tail = BUF_MARKERS (current_buffer);
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
823 XSYMBOL (tail) != XSYMBOL (Qnil);
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
824 tail = XMARKER (tail)->chain)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
825 if (XMARKER (tail)->charpos == charno)
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
826 return Qt;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
827
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
828 return Qnil;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
829 }
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830
20301
6e2ea54ad704 (unchain_marker): Define as returning nothing.
Andreas Schwab <schwab@suse.de>
parents: 16418
diff changeset
831 void
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832 syms_of_marker ()
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834 defsubr (&Smarker_position);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 defsubr (&Smarker_buffer);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836 defsubr (&Sset_marker);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837 defsubr (&Scopy_marker);
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
838 defsubr (&Smarker_insertion_type);
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
839 defsubr (&Sset_marker_insertion_type);
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
840 defsubr (&Sbuffer_has_markers_at);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 }