annotate src/marker.c @ 60177:f2c6bf193ab5

(pos_visible_p): Be sure to move to the specified position. Always get the full ascent / descent of the corresponding row, to return reliable rtop and rbot values. (back_to_previous_visible_line_start): Fix 2005-01-18 change. Must look one character back, as back_to_previous_line_start returns position after the newline. (move_it_vertically_backward): Fix heuristic for when to move further back in case line_height * 2/3 is larger than window height. (cursor_row_fully_visible_p): Rename make_cursor_line_fully_visible_p as it does not do anything anymore. Add arg current_matrix_p to use current matrix rather than desired matrix when set. (try_cursor_movement): Don't scroll to make cursor row fully visible if cursor didn't move. This avoids unexpected recentering in case of blinking cursor or accepting process output. Use current matrix to check cursor row visibility. (redisplay_window): Fix whether to recenter or move to top in case cursor line is taller than window height. (find_first_unchanged_at_end_row): Stop search if we reach a row which not enabled (instead of abort).
author Kim F. Storm <storm@cua.dk>
date Sat, 19 Feb 2005 23:30:51 +0000
parents 695cf19ef79e
children a8fa7c632ee4 375f2633d815
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.
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
2 Copyright (C) 1985, 1997, 1998, 2003 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
31830
cf1b4094811a Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
35 static void byte_char_debug_check P_ ((struct buffer *, int, int));
cf1b4094811a Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
36
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
37 /* Nonzero means enable debugging checks on byte/char correspondences. */
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
38
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
39 static int byte_debug_flag;
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
40
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21497
diff changeset
41 void
20678
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
42 clear_charpos_cache (b)
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
43 struct buffer *b;
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
44 {
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
45 if (cached_buffer == b)
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
46 cached_buffer = 0;
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
47 }
20537
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 /* 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
50
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
51 /* There are several places in the buffer where we know
44651
392bc50108e8 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 44560
diff changeset
52 the correspondence: BEG, BEGV, PT, GPT, ZV and Z,
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
53 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
54 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
55
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
56 /* 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
57
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
58 /* 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
59 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
60 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
61
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
62 #define CONSIDER(CHARPOS, BYTEPOS) \
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 int this_charpos = (CHARPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
65 int changed = 0; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
66 \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
67 if (this_charpos == charpos) \
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
68 { \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
69 int value = (BYTEPOS); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
70 if (byte_debug_flag) \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
71 byte_char_debug_check (b, charpos, value); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
72 return value; \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
73 } \
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
74 else if (this_charpos > charpos) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
75 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
76 if (this_charpos < best_above) \
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 best_above = this_charpos; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
79 best_above_byte = (BYTEPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
80 changed = 1; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
81 } \
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 else if (this_charpos > best_below) \
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 best_below = this_charpos; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
86 best_below_byte = (BYTEPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
87 changed = 1; \
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 \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
90 if (changed) \
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 if (best_above - best_below == best_above_byte - best_below_byte) \
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
93 { \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
94 int value = best_below_byte + (charpos - best_below); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
95 if (byte_debug_flag) \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
96 byte_char_debug_check (b, charpos, value); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
97 return value; \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
98 } \
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
99 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
100 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
101
31830
cf1b4094811a Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
102 static void
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
103 byte_char_debug_check (b, charpos, bytepos)
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
104 struct buffer *b;
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
105 int charpos, bytepos;
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
106 {
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
107 int nchars = 0;
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
108
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
109 if (bytepos > BUF_GPT_BYTE (b))
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
110 {
21219
29d2cf14040a (byte_char_debug_check): Call multibyte_chars_in_text
Kenichi Handa <handa@m17n.org>
parents: 20872
diff changeset
111 nchars = multibyte_chars_in_text (BUF_BEG_ADDR (b),
29d2cf14040a (byte_char_debug_check): Call multibyte_chars_in_text
Kenichi Handa <handa@m17n.org>
parents: 20872
diff changeset
112 BUF_GPT_BYTE (b) - BUF_BEG_BYTE (b));
29d2cf14040a (byte_char_debug_check): Call multibyte_chars_in_text
Kenichi Handa <handa@m17n.org>
parents: 20872
diff changeset
113 nchars += multibyte_chars_in_text (BUF_GAP_END_ADDR (b),
29d2cf14040a (byte_char_debug_check): Call multibyte_chars_in_text
Kenichi Handa <handa@m17n.org>
parents: 20872
diff changeset
114 bytepos - BUF_GPT_BYTE (b));
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
115 }
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
116 else
21219
29d2cf14040a (byte_char_debug_check): Call multibyte_chars_in_text
Kenichi Handa <handa@m17n.org>
parents: 20872
diff changeset
117 nchars = multibyte_chars_in_text (BUF_BEG_ADDR (b),
29d2cf14040a (byte_char_debug_check): Call multibyte_chars_in_text
Kenichi Handa <handa@m17n.org>
parents: 20872
diff changeset
118 bytepos - BUF_BEG_BYTE (b));
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
119
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
120 if (charpos - 1 != nchars)
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
121 abort ();
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
122 }
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
123
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
124 int
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
125 charpos_to_bytepos (charpos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
126 int charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
127 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
128 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
129 }
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 int
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
132 buf_charpos_to_bytepos (b, charpos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
133 struct buffer *b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
134 int charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
135 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
136 struct Lisp_Marker *tail;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
137 int best_above, best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
138 int best_below, best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
139
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
140 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
141 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
142
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
143 best_above = BUF_Z (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
144 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
145
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
146 /* 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
147 each character must be one byte.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
148 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
149 if (best_above == best_above_byte)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
150 return charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
151
44328
ed296e71aa64 (buf_charpos_to_bytepos, buf_bytepos_to_charpos): Use BEG and BEG_BYTE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41235
diff changeset
152 best_below = BEG;
ed296e71aa64 (buf_charpos_to_bytepos, buf_bytepos_to_charpos): Use BEG and BEG_BYTE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41235
diff changeset
153 best_below_byte = BEG_BYTE;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
154
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
155 /* 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
156 the closest known point above CHARPOS,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
157 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
158 the closest known point below CHARPOS,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
159
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
160 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
161 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
162 we interpolate the result immediately. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
163
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
164 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
165 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
166 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
167 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
168
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
169 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
170 CONSIDER (cached_charpos, cached_bytepos);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
171
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
172 for (tail = BUF_MARKERS (b); tail; tail = tail->next)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
173 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
174 CONSIDER (tail->charpos, tail->bytepos);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
175
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
176 /* 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
177 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
178 scan the intervening chars directly now. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
179 if (best_above - best_below < 50)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
180 break;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
181 }
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 /* 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
184 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
185 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
186
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
187 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
188 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
189 int record = charpos - best_below > 5000;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
190
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
191 while (best_below != charpos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
192 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
193 best_below++;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
194 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
195 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
196
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
197 /* 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
198 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
199 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
200 if (record)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
201 {
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
202 Lisp_Object marker, buffer;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
203 marker = Fmake_marker ();
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
204 XSETBUFFER (buffer, b);
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
205 set_marker_both (marker, buffer, best_below, best_below_byte);
20537
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
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
208 if (byte_debug_flag)
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
209 byte_char_debug_check (b, charpos, best_below_byte);
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
210
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
211 cached_buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
212 cached_modiff = BUF_MODIFF (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
213 cached_charpos = best_below;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
214 cached_bytepos = best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
215
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
216 return best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
217 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
218 else
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 int record = best_above - charpos > 5000;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
221
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
222 while (best_above != charpos)
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 best_above--;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
225 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
226 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
227
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
228 /* 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
229 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
230 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
231 if (record)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
232 {
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
233 Lisp_Object marker, buffer;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
234 marker = Fmake_marker ();
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
235 XSETBUFFER (buffer, b);
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
236 set_marker_both (marker, buffer, best_above, best_above_byte);
20537
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
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
239 if (byte_debug_flag)
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
240 byte_char_debug_check (b, charpos, best_above_byte);
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
241
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
242 cached_buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
243 cached_modiff = BUF_MODIFF (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
244 cached_charpos = best_above;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
245 cached_bytepos = best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
246
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
247 return best_above_byte;
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 }
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 #undef CONSIDER
50472
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
252
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
253 /* Used for debugging: recompute the bytepos corresponding to CHARPOS
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
254 in the simplest, most reliable way. */
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
255
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
256 int
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
257 verify_bytepos (charpos)
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
258 {
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
259 int below = 1;
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
260 int below_byte = 1;
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
261
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
262 while (below != charpos)
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
263 {
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
264 below++;
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
265 BUF_INC_POS (current_buffer, below_byte);
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
266 }
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
267
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
268 return below_byte;
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
269 }
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
270
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
271 /* 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
272
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
273 /* 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
274 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
275
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
276 #define CONSIDER(BYTEPOS, CHARPOS) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
277 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
278 int this_bytepos = (BYTEPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
279 int changed = 0; \
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 (this_bytepos == bytepos) \
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
282 { \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
283 int value = (CHARPOS); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
284 if (byte_debug_flag) \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
285 byte_char_debug_check (b, value, bytepos); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
286 return value; \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
287 } \
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
288 else if (this_bytepos > bytepos) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
289 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
290 if (this_bytepos < best_above_byte) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
291 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
292 best_above = (CHARPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
293 best_above_byte = this_bytepos; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
294 changed = 1; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
295 } \
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 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
298 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
299 best_below = (CHARPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
300 best_below_byte = this_bytepos; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
301 changed = 1; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
302 } \
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 if (changed) \
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 if (best_above - best_below == best_above_byte - best_below_byte) \
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
307 { \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
308 int value = best_below + (bytepos - best_below_byte); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
309 if (byte_debug_flag) \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
310 byte_char_debug_check (b, value, bytepos); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
311 return value; \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
312 } \
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
313 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
314 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
315
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
316 int
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
317 bytepos_to_charpos (bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
318 int bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
319 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
320 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
321 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
322
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
323 int
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
324 buf_bytepos_to_charpos (b, bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
325 struct buffer *b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
326 int bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
327 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
328 struct Lisp_Marker *tail;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
329 int best_above, best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
330 int best_below, best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
331
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
332 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
333 abort ();
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 = BUF_Z (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
336 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
337
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
338 /* 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
339 each character must be one byte.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
340 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
341 if (best_above == best_above_byte)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
342 return bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
343
44328
ed296e71aa64 (buf_charpos_to_bytepos, buf_bytepos_to_charpos): Use BEG and BEG_BYTE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41235
diff changeset
344 best_below = BEG;
ed296e71aa64 (buf_charpos_to_bytepos, buf_bytepos_to_charpos): Use BEG and BEG_BYTE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41235
diff changeset
345 best_below_byte = BEG_BYTE;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
346
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
347 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
348 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
349 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
350 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
351
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
352 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
353 CONSIDER (cached_bytepos, cached_charpos);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
354
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
355 for (tail = BUF_MARKERS (b); tail; tail = tail->next)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
356 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
357 CONSIDER (tail->bytepos, tail->charpos);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
358
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
359 /* 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
360 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
361 scan the intervening chars directly now. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
362 if (best_above - best_below < 50)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
363 break;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
364 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
365
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
366 /* 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
367 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
368 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
369
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
370 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
371 {
22022
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
372 int record = bytepos - best_below_byte > 5000;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
373
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
374 while (best_below_byte < bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
375 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
376 best_below++;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
377 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
378 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
379
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
380 /* 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
381 cache the correspondence by creating a marker here.
22022
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
382 It will last until the next GC.
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
383 But don't do it if BUF_MARKERS is nil;
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
384 that is a signal from Fset_buffer_multibyte. */
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
385 if (record && BUF_MARKERS (b))
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
386 {
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
387 Lisp_Object marker, buffer;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
388 marker = Fmake_marker ();
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
389 XSETBUFFER (buffer, b);
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
390 set_marker_both (marker, buffer, best_below, best_below_byte);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
391 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
392
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
393 if (byte_debug_flag)
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
394 byte_char_debug_check (b, best_below, bytepos);
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
395
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
396 cached_buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
397 cached_modiff = BUF_MODIFF (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
398 cached_charpos = best_below;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
399 cached_bytepos = best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
400
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
401 return best_below;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
402 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
403 else
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
404 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
405 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
406
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
407 while (best_above_byte > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
408 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
409 best_above--;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
410 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
411 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
412
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
413 /* 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
414 cache the correspondence by creating a marker here.
22022
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
415 It will last until the next GC.
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
416 But don't do it if BUF_MARKERS is nil;
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
417 that is a signal from Fset_buffer_multibyte. */
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
418 if (record && BUF_MARKERS (b))
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
419 {
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
420 Lisp_Object marker, buffer;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
421 marker = Fmake_marker ();
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
422 XSETBUFFER (buffer, b);
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
423 set_marker_both (marker, buffer, best_above, best_above_byte);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
424 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
425
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
426 if (byte_debug_flag)
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
427 byte_char_debug_check (b, best_above, bytepos);
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
428
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
429 cached_buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
430 cached_modiff = BUF_MODIFF (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
431 cached_charpos = best_above;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
432 cached_bytepos = best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
433
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
434 return best_above;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
435 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
436 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
437
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
438 #undef CONSIDER
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
439
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440 /* Operations on markers. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 DEFUN ("marker-buffer", Fmarker_buffer, Smarker_buffer, 1, 1, 0,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
443 doc: /* Return the buffer that MARKER points into, or nil if none.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
444 Returns nil if MARKER points into a dead buffer. */)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
445 (marker)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 register Lisp_Object marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 register Lisp_Object buf;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
449 CHECK_MARKER (marker);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 if (XMARKER (marker)->buffer)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 {
9275
bb50d17f7441 (Fmarker_buffer): Use new accessor macros instead of calling XSET directly.
Karl Heuer <kwzh@gnu.org>
parents: 9121
diff changeset
452 XSETBUFFER (buf, XMARKER (marker)->buffer);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 /* Return marker's buffer only if it is not dead. */
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
454 if (!NILP (XBUFFER (buf)->name))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 return buf;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 return Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 DEFUN ("marker-position", Fmarker_position, Smarker_position, 1, 1, 0,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
461 doc: /* Return the position MARKER points at, as a character number. */)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
462 (marker)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 Lisp_Object marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
465 CHECK_MARKER (marker);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 if (XMARKER (marker)->buffer)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
467 return make_number (XMARKER (marker)->charpos);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 return Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 }
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
471
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 DEFUN ("set-marker", Fset_marker, Sset_marker, 2, 3, 0,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
473 doc: /* Position MARKER before character number POSITION in BUFFER.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
474 BUFFER defaults to the current buffer.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
475 If POSITION is nil, makes marker point nowhere.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
476 Then it no longer slows down editing in any buffer.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
477 Returns MARKER. */)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
478 (marker, position, buffer)
14082
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
479 Lisp_Object marker, position, buffer;
118
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
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
485 CHECK_MARKER (marker);
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
486 m = XMARKER (marker);
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
487
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 /* If position is nil or a marker that points nowhere,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 make this marker point nowhere. */
14082
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
490 if (NILP (position)
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
491 || (MARKERP (position) && !XMARKER (position)->buffer))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
493 unchain_marker (m);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
497 if (NILP (buffer))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 b = current_buffer;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 else
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
501 CHECK_BUFFER (buffer);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 b = XBUFFER (buffer);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 /* If buffer is dead, set marker to point nowhere. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 if (EQ (b->name, Qnil))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
506 unchain_marker (m);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510
20537
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 (position) && b == XMARKER (position)->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 (position)->bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
517 m->charpos = XMARKER (position)->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
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
521 CHECK_NUMBER_COERCE_MARKER (position);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
522
14082
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
523 charno = XINT (position);
118
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_BEG (b))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 charno = BUF_BEG (b);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 if (charno > BUF_Z (b))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 charno = BUF_Z (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;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 if (m->buffer != b)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
541 unchain_marker (m);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 m->buffer = b;
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
543 m->next = BUF_MARKERS (b);
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
544 BUF_MARKERS (b) = m;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
546
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 /* This version of Fset_marker won't let the position
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 be outside the visible part. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
553 Lisp_Object
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 set_marker_restricted (marker, pos, buffer)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 Lisp_Object marker, pos, buffer;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 {
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
557 register int charno, bytepos;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 register struct buffer *b;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 register struct Lisp_Marker *m;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
561 CHECK_MARKER (marker);
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
562 m = XMARKER (marker);
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
563
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 /* If position is nil or a marker that points nowhere,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 make this marker point nowhere. */
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
566 if (NILP (pos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
567 || (MARKERP (pos) && !XMARKER (pos)->buffer))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
569 unchain_marker (m);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
573 if (NILP (buffer))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 b = current_buffer;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 else
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
577 CHECK_BUFFER (buffer);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 b = XBUFFER (buffer);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 /* If buffer is dead, set marker to point nowhere. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 if (EQ (b->name, Qnil))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
582 unchain_marker (m);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
587 /* 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
588 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
589 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
590 && b == m->buffer)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
591 {
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
592 m->bytepos = XMARKER (pos)->bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
593 m->charpos = XMARKER (pos)->charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
594 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
595 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
596
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
597 CHECK_NUMBER_COERCE_MARKER (pos);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
598
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 charno = XINT (pos);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 if (charno < BUF_BEGV (b))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 charno = BUF_BEGV (b);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 if (charno > BUF_ZV (b))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 charno = BUF_ZV (b);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
605
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
606 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
607
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
608 /* 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
609 if (charno > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
610 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
611
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
612 m->bytepos = bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
613 m->charpos = charno;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
614
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
615 if (m->buffer != b)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
616 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
617 unchain_marker (m);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
618 m->buffer = b;
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
619 m->next = BUF_MARKERS (b);
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
620 BUF_MARKERS (b) = m;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
621 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
622
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
623 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
624 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
625
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
626 /* 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
627 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
628
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
629 Lisp_Object
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
630 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
631 Lisp_Object marker, buffer;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
632 int charpos, bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
633 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
634 register struct buffer *b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
635 register struct Lisp_Marker *m;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
636
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
637 CHECK_MARKER (marker);
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
638 m = XMARKER (marker);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
639
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
640 if (NILP (buffer))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
641 b = current_buffer;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
642 else
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
643 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
644 CHECK_BUFFER (buffer);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
645 b = XBUFFER (buffer);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
646 /* 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
647 if (EQ (b->name, Qnil))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
648 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
649 unchain_marker (m);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
650 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
651 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
652 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
653
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
654 /* 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
655 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
656 && charpos != bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
657 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
658 /* 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
659 if (charpos > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
660 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
661
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
662 m->bytepos = bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
663 m->charpos = charpos;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 if (m->buffer != b)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
667 unchain_marker (m);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668 m->buffer = b;
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
669 m->next = BUF_MARKERS (b);
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
670 BUF_MARKERS (b) = m;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
672
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
676 /* 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
677 be outside the visible part. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
678
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
679 Lisp_Object
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
680 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
681 Lisp_Object marker, buffer;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
682 int charpos, bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
683 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
684 register struct buffer *b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
685 register struct Lisp_Marker *m;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
686
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
687 CHECK_MARKER (marker);
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
688 m = XMARKER (marker);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
689
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
690 if (NILP (buffer))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
691 b = current_buffer;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
692 else
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
693 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
694 CHECK_BUFFER (buffer);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
695 b = XBUFFER (buffer);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
696 /* 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
697 if (EQ (b->name, Qnil))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
698 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
699 unchain_marker (m);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
700 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
701 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
702 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
703
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
704 if (charpos < BUF_BEGV (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
705 charpos = BUF_BEGV (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
706 if (charpos > BUF_ZV (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
707 charpos = BUF_ZV (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
708 if (bytepos < BUF_BEGV_BYTE (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
709 bytepos = BUF_BEGV_BYTE (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
710 if (bytepos > BUF_ZV_BYTE (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
711 bytepos = BUF_ZV_BYTE (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
712
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
713 /* 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
714 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
715 && charpos != bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
716 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
717 /* 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
718 if (charpos > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
719 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
720
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
721 m->bytepos = bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
722 m->charpos = charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
723
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
724 if (m->buffer != b)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
725 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
726 unchain_marker (m);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
727 m->buffer = b;
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
728 m->next = BUF_MARKERS (b);
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
729 BUF_MARKERS (b) = m;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
730 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
731
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
732 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
733 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
734
41235
23d7de34a596 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
735 /* Remove MARKER from the chain of whatever buffer it is in.
23d7de34a596 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
736 Leave it "in no buffer".
23d7de34a596 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
737
23d7de34a596 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
738 This is called during garbage collection,
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 so we must be careful to ignore and preserve mark bits,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 including those in chain fields of markers. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741
20301
6e2ea54ad704 (unchain_marker): Define as returning nothing.
Andreas Schwab <schwab@suse.de>
parents: 16418
diff changeset
742 void
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 unchain_marker (marker)
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
744 register struct Lisp_Marker *marker;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
746 register struct Lisp_Marker *tail, *prev, *next;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 register struct buffer *b;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
749 b = marker->buffer;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750 if (b == 0)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751 return;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753 if (EQ (b->name, Qnil))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 abort ();
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
756 marker->buffer = 0;
22022
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
757
10315
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
758 tail = BUF_MARKERS (b);
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
759 prev = NULL;
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
760 while (tail)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
762 next = tail->next;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
763
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
764 if (marker == tail)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
765 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
766 if (!prev)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
767 {
10315
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
768 BUF_MARKERS (b) = next;
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
769 /* Deleting first marker from the buffer's chain. Crash
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
770 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
771 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
772 base buffer. */
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
773 if (next && b->text != next->buffer->text)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774 abort ();
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776 else
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
777 prev->next = next;
22022
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
778 /* We have removed the marker from the chain;
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
779 no need to scan the rest of the chain. */
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
780 return;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782 else
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 prev = tail;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784 tail = next;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 }
22022
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
786
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
787 /* Marker was not in its chain. */
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
788 abort ();
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
791 /* 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
792
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
793 int
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 marker_position (marker)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795 Lisp_Object marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
796 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797 register struct Lisp_Marker *m = XMARKER (marker);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 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
799
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
800 if (!buf)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
801 error ("Marker does not point anywhere");
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
802
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
803 return m->charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
804 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
805
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
806 /* 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
807
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
808 int
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
809 marker_byte_position (marker)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
810 Lisp_Object marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
811 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
812 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
813 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
814 register int i = m->bytepos;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816 if (!buf)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
817 error ("Marker does not point anywhere");
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
819 if (i < BUF_BEG_BYTE (buf) || i > BUF_Z_BYTE (buf))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 abort ();
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822 return i;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 }
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
824
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
825 DEFUN ("copy-marker", Fcopy_marker, Scopy_marker, 1, 2, 0,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
826 doc: /* Return a new marker pointing at the same place as MARKER.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
827 If argument is a number, makes a new marker pointing
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
828 at that position in the current buffer.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
829 The optional argument TYPE specifies the insertion type of the new marker;
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
830 see `marker-insertion-type'. */)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
831 (marker, type)
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
832 register Lisp_Object marker, type;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834 register Lisp_Object new;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835
22744
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
836 if (! (INTEGERP (marker) || MARKERP (marker)))
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
837 marker = wrong_type_argument (Qinteger_or_marker_p, marker);
22744
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
838
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
839 new = Fmake_marker ();
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
840 Fset_marker (new, marker,
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
841 (MARKERP (marker) ? Fmarker_buffer (marker) : Qnil));
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
842 XMARKER (new)->insertion_type = !NILP (type);
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
843 return new;
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
844 }
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
845
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
846 DEFUN ("marker-insertion-type", Fmarker_insertion_type,
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
847 Smarker_insertion_type, 1, 1, 0,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
848 doc: /* Return insertion type of MARKER: t if it stays after inserted text.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
849 nil means the marker stays before text inserted there. */)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
850 (marker)
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
851 register Lisp_Object marker;
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
852 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
853 CHECK_MARKER (marker);
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
854 return XMARKER (marker)->insertion_type ? Qt : Qnil;
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
855 }
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
856
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
857 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
858 Sset_marker_insertion_type, 2, 2, 0,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
859 doc: /* Set the insertion-type of MARKER to TYPE.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
860 If TYPE is t, it means the marker advances when you insert text at it.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
861 If TYPE is nil, it means the marker stays behind when you insert text at it. */)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
862 (marker, type)
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
863 Lisp_Object marker, type;
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
864 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
865 CHECK_MARKER (marker);
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
866
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
867 XMARKER (marker)->insertion_type = ! NILP (type);
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
868 return type;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869 }
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
870
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
871 DEFUN ("buffer-has-markers-at", Fbuffer_has_markers_at, Sbuffer_has_markers_at,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
872 1, 1, 0,
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
873 doc: /* Return t if there are markers pointing at POSITION in the current buffer. */)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
874 (position)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
875 Lisp_Object position;
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
876 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
877 register struct Lisp_Marker *tail;
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
878 register int charno;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
879
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
880 charno = XINT (position);
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
881
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
882 if (charno < BEG)
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
883 charno = BEG;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
884 if (charno > Z)
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
885 charno = Z;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
886
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
887 for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next)
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
888 if (tail->charpos == charno)
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
889 return Qt;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
890
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
891 return Qnil;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
892 }
44560
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
893
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
894 /* For debugging -- count the markers in buffer BUF. */
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
895
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
896 int
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
897 count_markers (buf)
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
898 struct buffer *buf;
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
899 {
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
900 int total = 0;
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
901 struct Lisp_Marker *tail;
44560
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
902
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
903 for (tail = BUF_MARKERS (buf); tail; tail = tail->next)
44560
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
904 total++;
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
905
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
906 return total;
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
907 }
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908
20301
6e2ea54ad704 (unchain_marker): Define as returning nothing.
Andreas Schwab <schwab@suse.de>
parents: 16418
diff changeset
909 void
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 syms_of_marker ()
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
912 defsubr (&Smarker_position);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
913 defsubr (&Smarker_buffer);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
914 defsubr (&Sset_marker);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
915 defsubr (&Scopy_marker);
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
916 defsubr (&Smarker_insertion_type);
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
917 defsubr (&Sset_marker_insertion_type);
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
918 defsubr (&Sbuffer_has_markers_at);
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
919
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
920 DEFVAR_BOOL ("byte-debug-flag", &byte_debug_flag,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
921 doc: /* Non-nil enables debugging checks in byte/char position conversions. */);
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
922 byte_debug_flag = 0;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
923 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51672
diff changeset
924
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51672
diff changeset
925 /* arch-tag: 50aa418f-cdd0-4838-b64b-94aa4b2a3b74
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51672
diff changeset
926 (do not change this comment) */