annotate src/insdel.c @ 109179:8cfee7d2955f

Convert DEFUNs to standard C. * src/alloc.c: Convert DEFUNs to standard C. * src/buffer.c: * src/bytecode.c: * src/callint.c: * src/callproc.c: * src/casefiddle.c: * src/casetab.c: * src/category.c: * src/character.c: * src/charset.c: * src/chartab.c: * src/cmds.c: * src/coding.c: * src/composite.c: * src/data.c: * src/dbusbind.c: * src/dired.c: * src/dispnew.c: * src/doc.c: * src/dosfns.c: * src/editfns.c: * src/emacs.c: * src/eval.c: * src/fileio.c: * src/filelock.c: * src/floatfns.c: * src/fns.c: * src/font.c: * src/fontset.c: * src/frame.c: * src/fringe.c: * src/image.c: * src/indent.c: * src/insdel.c: * src/keyboard.c: * src/keymap.c: * src/lread.c: * src/macros.c: * src/marker.c: * src/menu.c: * src/minibuf.c: * src/msdos.c: * src/nsfns.m: * src/nsmenu.m: * src/nsselect.m: * src/print.c: * src/process.c: * src/search.c: * src/sound.c: * src/syntax.c: * src/term.c: * src/terminal.c: * src/textprop.c: * src/undo.c: * src/w16select.c: * src/w32console.c: * src/w32fns.c: * src/w32font.c: * src/w32menu.c: * src/w32proc.c: * src/w32select.c: * src/window.c: * src/xdisp.c: * src/xfaces.c: * src/xfns.c: * src/xmenu.c: * src/xselect.c: * src/xsettings.c: * src/xsmfns.c: Likewise.
author Dan Nicolaescu <dann@ics.uci.edu>
date Thu, 08 Jul 2010 14:25:08 -0700
parents 750db9f3e6d8
children e856a274549b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Buffer insertion/deletion and gap motion for GNU Emacs.
64770
a0d1312ede66 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64616
diff changeset
2 Copyright (C) 1985, 1986, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106222
diff changeset
3 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
79759
fc2bcd2a8aad Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78602
diff changeset
4 Free Software Foundation, Inc.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 This file is part of GNU Emacs.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93610
diff changeset
8 GNU Emacs is free software: you can redistribute it and/or modify
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 it under the terms of the GNU General Public License as published by
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93610
diff changeset
10 the Free Software Foundation, either version 3 of the License, or
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93610
diff changeset
11 (at your option) any later version.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 GNU Emacs is distributed in the hope that it will be useful,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 GNU General Public License for more details.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93610
diff changeset
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
01ad7ec29c98 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: 4078
diff changeset
22 #include <config.h>
105669
68dd71358159 * alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105661
diff changeset
23 #include <setjmp.h>
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include "lisp.h"
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
25 #include "intervals.h"
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 #include "buffer.h"
88378
46d69e409b5b Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 43218
diff changeset
27 #include "character.h"
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 #include "window.h"
2480
6f4b9c548425 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
29 #include "blockinput.h"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21323
diff changeset
30 #include "region-cache.h"
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
32 #ifndef NULL
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
33 #define NULL 0
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
34 #endif
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
35
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
36 static void insert_from_string_1 (Lisp_Object string,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
37 EMACS_INT pos, EMACS_INT pos_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
38 EMACS_INT nchars, EMACS_INT nbytes,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
39 int inherit, int before_markers);
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
40 static void insert_from_buffer_1 (struct buffer *buf,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
41 EMACS_INT from, EMACS_INT nchars,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
42 int inherit);
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
43 static void gap_left (EMACS_INT charpos, EMACS_INT bytepos, int newgap);
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
44 static void gap_right (EMACS_INT charpos, EMACS_INT bytepos);
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
45 static void adjust_markers_gap_motion (EMACS_INT from, EMACS_INT to,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
46 EMACS_INT amount);
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
47 static void adjust_markers_for_insert (EMACS_INT from, EMACS_INT from_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
48 EMACS_INT to, EMACS_INT to_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
49 int before_markers);
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
50 static void adjust_markers_for_replace (EMACS_INT, EMACS_INT, EMACS_INT,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
51 EMACS_INT, EMACS_INT, EMACS_INT);
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
52 static void adjust_point (EMACS_INT nchars, EMACS_INT nbytes);
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
53
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 108890
diff changeset
54 Lisp_Object Fcombine_after_change_execute (void);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
55
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
56 /* Non-nil means don't call the after-change-functions right away,
107984
bef5d1738c0b Make variable forwarding explicit rather the using special values.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
57 just record an element in combine_after_change_list. */
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
58 Lisp_Object Vcombine_after_change_calls;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
59
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
60 /* List of elements of the form (BEG-UNCHANGED END-UNCHANGED CHANGE-AMOUNT)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
61 describing changes which happened while combine_after_change_calls
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
62 was nonzero. We use this to decide how to call them
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
63 once the deferral ends.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
64
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
65 In each element.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
66 BEG-UNCHANGED is the number of chars before the changed range.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
67 END-UNCHANGED is the number of chars after the changed range,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
68 and CHANGE-AMOUNT is the number of characters inserted by the change
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
69 (negative for a deletion). */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
70 Lisp_Object combine_after_change_list;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
71
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
72 /* Buffer which combine_after_change_list is about. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
73 Lisp_Object combine_after_change_buffer;
39244
796039437953 (Qinhibit_modification_hooks): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37760
diff changeset
74
796039437953 (Qinhibit_modification_hooks): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37760
diff changeset
75 Lisp_Object Qinhibit_modification_hooks;
796039437953 (Qinhibit_modification_hooks): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37760
diff changeset
76
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
77
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
78 /* Check all markers in the current buffer, looking for something invalid. */
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
79
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
80 static int check_markers_debug_flag;
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
81
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
82 #define CHECK_MARKERS() \
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
83 if (check_markers_debug_flag) \
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
84 check_markers (); \
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
85 else
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
86
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
87 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 108890
diff changeset
88 check_markers (void)
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
89 {
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
90 register struct Lisp_Marker *tail;
23566
25baa4bda79d (check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents: 23555
diff changeset
91 int multibyte = ! NILP (current_buffer->enable_multibyte_characters);
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
92
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
93 for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next)
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
94 {
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
95 if (tail->buffer->text != current_buffer->text)
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
96 abort ();
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
97 if (tail->charpos > Z)
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
98 abort ();
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
99 if (tail->bytepos > Z_BYTE)
23566
25baa4bda79d (check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents: 23555
diff changeset
100 abort ();
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
101 if (multibyte && ! CHAR_HEAD_P (FETCH_BYTE (tail->bytepos)))
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
102 abort ();
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
103 }
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
104 }
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
105
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
106 /* Move gap to position CHARPOS.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
107 Note that this can quit! */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
108
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
109 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
110 move_gap (EMACS_INT charpos)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
111 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
112 move_gap_both (charpos, charpos_to_bytepos (charpos));
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
113 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
114
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
115 /* Move gap to byte position BYTEPOS, which is also char position CHARPOS.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 Note that this can quit! */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
118 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
119 move_gap_both (EMACS_INT charpos, EMACS_INT bytepos)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
121 if (bytepos < GPT_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
122 gap_left (charpos, bytepos, 0);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
123 else if (bytepos > GPT_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
124 gap_right (charpos, bytepos);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
127 /* Move the gap to a position less than the current GPT.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
128 BYTEPOS describes the new position as a byte position,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
129 and CHARPOS is the corresponding char position.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 If NEWGAP is nonzero, then don't update beg_unchanged and end_unchanged. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
132 static void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
133 gap_left (EMACS_INT charpos, EMACS_INT bytepos, int newgap)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 register unsigned char *to, *from;
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
136 register EMACS_INT i;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
137 EMACS_INT new_s1;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 if (!newgap)
25373
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
140 BUF_COMPUTE_UNCHANGED (current_buffer, charpos, GPT);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
142 i = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 to = GAP_END_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 from = GPT_ADDR;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
145 new_s1 = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 /* Now copy the characters. To move the gap down,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 copy characters up. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 while (1)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 /* I gets number of characters left to copy. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
153 i = new_s1 - bytepos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 if (i == 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 /* If a quit is requested, stop copying now.
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
157 Change BYTEPOS to be where we have actually moved the gap to. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 if (QUITP)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
160 bytepos = new_s1;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
161 charpos = BYTE_TO_CHAR (bytepos);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 /* Move at most 32000 chars before checking again for a quit. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 if (i > 32000)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 i = 32000;
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
167 new_s1 -= i;
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
168 from -= i, to -= i;
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
169 memmove (to, from, i);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
172 /* Adjust markers, and buffer data structure, to put the gap at BYTEPOS.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
173 BYTEPOS is where the loop above stopped, which may be what was specified
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 or may be where a quit was detected. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
175 adjust_markers_gap_motion (bytepos, GPT_BYTE, GAP_SIZE);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
176 GPT_BYTE = bytepos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
177 GPT = charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
178 if (bytepos < charpos)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
179 abort ();
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
180 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 QUIT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183
105426
d0a6d64c3cfc Fix typos in comments.
Juanma Barranquero <lekktu@gmail.com>
parents: 102759
diff changeset
184 /* Move the gap to a position greater than the current GPT.
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
185 BYTEPOS describes the new position as a byte position,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
186 and CHARPOS is the corresponding char position. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
187
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
188 static void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
189 gap_right (EMACS_INT charpos, EMACS_INT bytepos)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 register unsigned char *to, *from;
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
192 register EMACS_INT i;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
193 EMACS_INT new_s1;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194
25373
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
195 BUF_COMPUTE_UNCHANGED (current_buffer, charpos, GPT);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
197 i = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 from = GAP_END_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 to = GPT_ADDR;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
200 new_s1 = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 /* Now copy the characters. To move the gap up,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 copy characters down. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 while (1)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 /* I gets number of characters left to copy. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
208 i = bytepos - new_s1;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 if (i == 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 /* If a quit is requested, stop copying now.
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
212 Change BYTEPOS to be where we have actually moved the gap to. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 if (QUITP)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
215 bytepos = new_s1;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
216 charpos = BYTE_TO_CHAR (bytepos);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 /* Move at most 32000 chars before checking again for a quit. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 if (i > 32000)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 i = 32000;
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
222 new_s1 += i;
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
223 memmove (to, from, i);
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
224 from += i, to += i;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
227 adjust_markers_gap_motion (GPT_BYTE + GAP_SIZE, bytepos + GAP_SIZE,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
228 - GAP_SIZE);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
229 GPT = charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
230 GPT_BYTE = bytepos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
231 if (bytepos < charpos)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
232 abort ();
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
233 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 QUIT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 }
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
236
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
237 /* Add AMOUNT to the byte position of every marker in the current buffer
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
238 whose current byte position is between FROM (exclusive) and TO (inclusive).
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
239
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 Also, any markers past the outside of that interval, in the direction
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 of adjustment, are first moved back to the near end of the interval
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
242 and then adjusted by AMOUNT.
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
243
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
244 When the latter adjustment is done, if AMOUNT is negative,
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
245 we record the adjustment for undo. (This case happens only for
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
246 deletion.)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
247
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
248 The markers' character positions are not altered,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
249 because gap motion does not affect character positions. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
250
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
251 int adjust_markers_test;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
253 static void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
254 adjust_markers_gap_motion (EMACS_INT from, EMACS_INT to, EMACS_INT amount)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 {
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
256 /* Now that a marker has a bytepos, not counting the gap,
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
257 nothing needs to be done here. */
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
258 #if 0
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 Lisp_Object marker;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 register struct Lisp_Marker *m;
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
261 register EMACS_INT mpos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
263 marker = BUF_MARKERS (current_buffer);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
265 while (!NILP (marker))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 m = XMARKER (marker);
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
268 mpos = m->bytepos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 if (amount > 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 if (mpos > to && mpos < to + amount)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
272 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
273 if (adjust_markers_test)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
274 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
275 mpos = to + amount;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
276 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 {
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
280 /* Here's the case where a marker is inside text being deleted.
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
281 AMOUNT can be negative for gap motion, too,
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
282 but then this range contains no markers. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 if (mpos > from + amount && mpos <= from)
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
284 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
285 if (adjust_markers_test)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
286 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
287 mpos = from + amount;
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
288 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 if (mpos > from && mpos <= to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 mpos += amount;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 m->bufpos = mpos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 marker = m->chain;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 }
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
295 #endif
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 }
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
297
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
298 /* Adjust all markers for a deletion
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
299 whose range in bytes is FROM_BYTE to TO_BYTE.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
300 The range in charpos is FROM to TO.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
301
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
302 This function assumes that the gap is adjacent to
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
303 or inside of the range being deleted. */
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
304
26731
9b7d48762152 (adjust_markers_for_delete): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 26715
diff changeset
305 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
306 adjust_markers_for_delete (EMACS_INT from, EMACS_INT from_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
307 EMACS_INT to, EMACS_INT to_byte)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
308 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
309 Lisp_Object marker;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
310 register struct Lisp_Marker *m;
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
311 register EMACS_INT charpos;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
312
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
313 for (m = BUF_MARKERS (current_buffer); m; m = m->next)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
314 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
315 charpos = m->charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
316
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
317 if (charpos > Z)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
318 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
319
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
320 /* If the marker is after the deletion,
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
321 relocate by number of chars / bytes deleted. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
322 if (charpos > to)
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
323 {
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
324 m->charpos -= to - from;
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
325 m->bytepos -= to_byte - from_byte;
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
326 }
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
327 /* Here's the case where a marker is inside text being deleted. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
328 else if (charpos > from)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
329 {
32601
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
330 if (! m->insertion_type)
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
331 { /* Normal markers will end up at the beginning of the
32601
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
332 re-inserted text after undoing a deletion, and must be
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48090
diff changeset
333 adjusted to move them to the correct place. */
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
334 XSETMISC (marker, m);
106222
35b575add861 (adjust_markers_for_delete): Move it in the right direction! (bug#4803)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106185
diff changeset
335 record_marker_adjustment (marker, from - charpos);
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
336 }
32601
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
337 else if (charpos < to)
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
338 { /* Before-insertion markers will automatically move forward
32601
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
339 upon re-inserting the deleted text, so we have to arrange
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
340 for them to move backward to the correct position. */
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
341 XSETMISC (marker, m);
106222
35b575add861 (adjust_markers_for_delete): Move it in the right direction! (bug#4803)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106185
diff changeset
342 record_marker_adjustment (marker, to - charpos);
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
343 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
344 m->charpos = from;
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
345 m->bytepos = from_byte;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
346 }
32601
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
347 /* Here's the case where a before-insertion marker is immediately
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
348 before the deleted region. */
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
349 else if (charpos == from && m->insertion_type)
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
350 {
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
351 /* Undoing the change uses normal insertion, which will
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
352 incorrectly make MARKER move forward, so we arrange for it
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
353 to then move backward to the correct place at the beginning
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
354 of the deleted region. */
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
355 XSETMISC (marker, m);
32601
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
356 record_marker_adjustment (marker, to - from);
f9b498650e20 (adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents: 31829
diff changeset
357 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
358 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
359 }
23259
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
360
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
361
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
362 /* Adjust markers for an insertion that stretches from FROM / FROM_BYTE
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
363 to TO / TO_BYTE. We have to relocate the charpos of every marker
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
364 that points after the insertion (but not their bytepos).
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
365
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
366 When a marker points at the insertion point,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
367 we advance it if either its insertion-type is t
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
368 or BEFORE_MARKERS is true. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
369
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
370 static void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
371 adjust_markers_for_insert (EMACS_INT from, EMACS_INT from_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
372 EMACS_INT to, EMACS_INT to_byte, int before_markers)
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
373 {
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
374 struct Lisp_Marker *m;
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
375 int adjusted = 0;
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
376 EMACS_INT nchars = to - from;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
377 EMACS_INT nbytes = to_byte - from_byte;
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
378
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
379 for (m = BUF_MARKERS (current_buffer); m; m = m->next)
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
380 {
85016
c7d378d22b24 (adjust_markers_for_insert): Generalize assertion checks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82394
diff changeset
381 eassert (m->bytepos >= m->charpos
c7d378d22b24 (adjust_markers_for_insert): Generalize assertion checks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82394
diff changeset
382 && m->bytepos - m->charpos <= Z_BYTE - Z);
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
383
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
384 if (m->bytepos == from_byte)
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
385 {
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
386 if (m->insertion_type || before_markers)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
387 {
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
388 m->bytepos = to_byte;
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
389 m->charpos = to;
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
390 if (m->insertion_type)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
391 adjusted = 1;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
392 }
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
393 }
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
394 else if (m->bytepos > from_byte)
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
395 {
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
396 m->bytepos += nbytes;
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
397 m->charpos += nchars;
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
398 }
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
399 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
400
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
401 /* Adjusting only markers whose insertion-type is t may result in
108890
d9257436d2b1 Remove obsolete macro BASE_LEADING_CODE_P.
Juanma Barranquero <lekktu@gmail.com>
parents: 107984
diff changeset
402 - disordered start and end in overlays, and
54555
b136a4512609 * insdel.c (adjust_markers_for_insert): Call fix_start_end_in_overlays.
Masatake YAMATO <jet@gyve.org>
parents: 52401
diff changeset
403 - disordered overlays in the slot `overlays_before' of current_buffer. */
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
404 if (adjusted)
54555
b136a4512609 * insdel.c (adjust_markers_for_insert): Call fix_start_end_in_overlays.
Masatake YAMATO <jet@gyve.org>
parents: 52401
diff changeset
405 {
b136a4512609 * insdel.c (adjust_markers_for_insert): Call fix_start_end_in_overlays.
Masatake YAMATO <jet@gyve.org>
parents: 52401
diff changeset
406 fix_start_end_in_overlays(from, to);
b136a4512609 * insdel.c (adjust_markers_for_insert): Call fix_start_end_in_overlays.
Masatake YAMATO <jet@gyve.org>
parents: 52401
diff changeset
407 fix_overlays_before (current_buffer, from, to);
b136a4512609 * insdel.c (adjust_markers_for_insert): Call fix_start_end_in_overlays.
Masatake YAMATO <jet@gyve.org>
parents: 52401
diff changeset
408 }
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
409 }
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
410
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
411 /* Adjust point for an insertion of NBYTES bytes, which are NCHARS characters.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
412
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
413 This is used only when the value of point changes due to an insert
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
414 or delete; it does not represent a conceptual change in point as a
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
415 marker. In particular, point is not crossing any interval
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
416 boundaries, so there's no need to use the usual SET_PT macro. In
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
417 fact it would be incorrect to do so, because either the old or the
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
418 new value of point is out of sync with the current set of
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
419 intervals. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
420
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
421 static void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
422 adjust_point (EMACS_INT nchars, EMACS_INT nbytes)
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
423 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
424 BUF_PT (current_buffer) += nchars;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
425 BUF_PT_BYTE (current_buffer) += nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
426
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
427 /* In a single-byte buffer, the two positions must be equal. */
85016
c7d378d22b24 (adjust_markers_for_insert): Generalize assertion checks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82394
diff changeset
428 eassert (PT_BYTE >= PT && PT_BYTE - PT <= ZV_BYTE - ZV);
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
429 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
431 /* Adjust markers for a replacement of a text at FROM (FROM_BYTE) of
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
432 length OLD_CHARS (OLD_BYTES) to a new text of length NEW_CHARS
29065
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
433 (NEW_BYTES). It is assumed that OLD_CHARS > 0, i.e., this is not
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
434 an insertion. */
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
435
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
436 static void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
437 adjust_markers_for_replace (EMACS_INT from, EMACS_INT from_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
438 EMACS_INT old_chars, EMACS_INT old_bytes,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
439 EMACS_INT new_chars, EMACS_INT new_bytes)
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
440 {
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
441 register struct Lisp_Marker *m;
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
442 EMACS_INT prev_to_byte = from_byte + old_bytes;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
443 EMACS_INT diff_chars = new_chars - old_chars;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
444 EMACS_INT diff_bytes = new_bytes - old_bytes;
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
445
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
446 for (m = BUF_MARKERS (current_buffer); m; m = m->next)
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
447 {
29065
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
448 if (m->bytepos >= prev_to_byte)
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
449 {
29065
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
450 m->charpos += diff_chars;
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
451 m->bytepos += diff_bytes;
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
452 }
29065
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
453 else if (m->bytepos > from_byte)
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
454 {
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
455 m->charpos = from;
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
456 m->bytepos = from_byte;
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
457 }
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
458 }
23455
84276318b663 (adjust_markers_for_combining): This function deleted.
Kenichi Handa <handa@m17n.org>
parents: 23400
diff changeset
459
84276318b663 (adjust_markers_for_combining): This function deleted.
Kenichi Handa <handa@m17n.org>
parents: 23400
diff changeset
460 CHECK_MARKERS ();
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
461 }
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
462
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
463
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
464 /* Make the gap NBYTES_ADDED bytes longer. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
466 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
467 make_gap_larger (EMACS_INT nbytes_added)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 Lisp_Object tem;
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
470 EMACS_INT real_gap_loc;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
471 EMACS_INT real_gap_loc_byte;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
472 EMACS_INT old_gap_size;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 /* If we have to get more space, get enough to last a while. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
475 nbytes_added += 2000;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476
106108
48d6337584da (make_gap_larger): Don't make as many assumptions about the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105877
diff changeset
477 { EMACS_INT total_size = Z_BYTE - BEG_BYTE + GAP_SIZE + nbytes_added;
48d6337584da (make_gap_larger): Don't make as many assumptions about the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105877
diff changeset
478 if (total_size < 0
48d6337584da (make_gap_larger): Don't make as many assumptions about the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105877
diff changeset
479 /* Don't allow a buffer size that won't fit in a Lisp integer. */
48d6337584da (make_gap_larger): Don't make as many assumptions about the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105877
diff changeset
480 || total_size != XINT (make_number (total_size))
48d6337584da (make_gap_larger): Don't make as many assumptions about the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105877
diff changeset
481 /* Don't allow a buffer size that won't fit in an int
48d6337584da (make_gap_larger): Don't make as many assumptions about the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105877
diff changeset
482 even if it will fit in a Lisp integer.
48d6337584da (make_gap_larger): Don't make as many assumptions about the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105877
diff changeset
483 That won't work because so many places still use `int'. */
48d6337584da (make_gap_larger): Don't make as many assumptions about the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105877
diff changeset
484 || total_size != (EMACS_INT) (int) total_size)
48d6337584da (make_gap_larger): Don't make as many assumptions about the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105877
diff changeset
485 error ("Buffer exceeds maximum size");
48d6337584da (make_gap_larger): Don't make as many assumptions about the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105877
diff changeset
486 }
11691
ca7058c74ef3 (make_gap): Don't allow buffer size that won't fit in int.
Richard M. Stallman <rms@gnu.org>
parents: 11657
diff changeset
487
31603
04e50cacc23f (make_gap): Use enlarge_buffer_text.
Gerd Moellmann <gerd@gnu.org>
parents: 29379
diff changeset
488 enlarge_buffer_text (current_buffer, nbytes_added);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 /* Prevent quitting in move_gap. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 tem = Vinhibit_quit;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 Vinhibit_quit = Qt;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 real_gap_loc = GPT;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
495 real_gap_loc_byte = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 old_gap_size = GAP_SIZE;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 /* Call the newly allocated space a gap at the end of the whole space. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 GPT = Z + GAP_SIZE;
20574
928b9aff1e64 (make_gap): Set GPT_BYTE along with GPT.
Richard M. Stallman <rms@gnu.org>
parents: 20568
diff changeset
500 GPT_BYTE = Z_BYTE + GAP_SIZE;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
501 GAP_SIZE = nbytes_added;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 /* Move the new gap down to be consecutive with the end of the old one.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 This adjusts the markers properly too. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
505 gap_left (real_gap_loc + old_gap_size, real_gap_loc_byte + old_gap_size, 1);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 /* Now combine the two into one large gap. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 GAP_SIZE += old_gap_size;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 GPT = real_gap_loc;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
510 GPT_BYTE = real_gap_loc_byte;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
512 /* Put an anchor. */
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
513 *(Z_ADDR) = 0;
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
514
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 Vinhibit_quit = tem;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 }
41830
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
517
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
518
48090
b7e13d33cf41 Comment.
Dave Love <fx@gnu.org>
parents: 46468
diff changeset
519 /* Make the gap NBYTES_REMOVED bytes shorter. */
41830
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
520
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
521 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
522 make_gap_smaller (EMACS_INT nbytes_removed)
41830
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
523 {
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
524 Lisp_Object tem;
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
525 EMACS_INT real_gap_loc;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
526 EMACS_INT real_gap_loc_byte;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
527 EMACS_INT real_Z;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
528 EMACS_INT real_Z_byte;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
529 EMACS_INT real_beg_unchanged;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
530 EMACS_INT new_gap_size;
41830
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
531
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
532 /* Make sure the gap is at least 20 bytes. */
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
533 if (GAP_SIZE - nbytes_removed < 20)
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
534 nbytes_removed = GAP_SIZE - 20;
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
535
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
536 /* Prevent quitting in move_gap. */
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
537 tem = Vinhibit_quit;
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
538 Vinhibit_quit = Qt;
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
539
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
540 real_gap_loc = GPT;
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
541 real_gap_loc_byte = GPT_BYTE;
43218
a4b638169822 (make_gap_smaller): Preserve BEG_UNCHANGED during gap
Kim F. Storm <storm@cua.dk>
parents: 42662
diff changeset
542 new_gap_size = GAP_SIZE - nbytes_removed;
41830
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
543 real_Z = Z;
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
544 real_Z_byte = Z_BYTE;
43218
a4b638169822 (make_gap_smaller): Preserve BEG_UNCHANGED during gap
Kim F. Storm <storm@cua.dk>
parents: 42662
diff changeset
545 real_beg_unchanged = BEG_UNCHANGED;
41830
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
546
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
547 /* Pretend that the last unwanted part of the gap is the entire gap,
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
548 and that the first desired part of the gap is part of the buffer
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
549 text. */
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
550 memset (GPT_ADDR, 0, new_gap_size);
43218
a4b638169822 (make_gap_smaller): Preserve BEG_UNCHANGED during gap
Kim F. Storm <storm@cua.dk>
parents: 42662
diff changeset
551 GPT += new_gap_size;
a4b638169822 (make_gap_smaller): Preserve BEG_UNCHANGED during gap
Kim F. Storm <storm@cua.dk>
parents: 42662
diff changeset
552 GPT_BYTE += new_gap_size;
a4b638169822 (make_gap_smaller): Preserve BEG_UNCHANGED during gap
Kim F. Storm <storm@cua.dk>
parents: 42662
diff changeset
553 Z += new_gap_size;
a4b638169822 (make_gap_smaller): Preserve BEG_UNCHANGED during gap
Kim F. Storm <storm@cua.dk>
parents: 42662
diff changeset
554 Z_BYTE += new_gap_size;
41830
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
555 GAP_SIZE = nbytes_removed;
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
556
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
557 /* Move the unwanted pretend gap to the end of the buffer. This
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
558 adjusts the markers properly too. */
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
559 gap_right (Z, Z_BYTE);
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
560
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
561 enlarge_buffer_text (current_buffer, -nbytes_removed);
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
562
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
563 /* Now restore the desired gap. */
43218
a4b638169822 (make_gap_smaller): Preserve BEG_UNCHANGED during gap
Kim F. Storm <storm@cua.dk>
parents: 42662
diff changeset
564 GAP_SIZE = new_gap_size;
41830
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
565 GPT = real_gap_loc;
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
566 GPT_BYTE = real_gap_loc_byte;
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
567 Z = real_Z;
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
568 Z_BYTE = real_Z_byte;
43218
a4b638169822 (make_gap_smaller): Preserve BEG_UNCHANGED during gap
Kim F. Storm <storm@cua.dk>
parents: 42662
diff changeset
569 BEG_UNCHANGED = real_beg_unchanged;
41830
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
570
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
571 /* Put an anchor. */
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
572 *(Z_ADDR) = 0;
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
573
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
574 Vinhibit_quit = tem;
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
575 }
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
576
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
577 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
578 make_gap (EMACS_INT nbytes_added)
41830
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
579 {
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
580 if (nbytes_added >= 0)
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
581 make_gap_larger (nbytes_added);
41964
79c7c91bc460 (make_gap) [DOUG_LEA_MALLOC]: Call make_gap_smaller if
Andrew Innes <andrewi@gnu.org>
parents: 41830
diff changeset
582 #if defined USE_MMAP_FOR_BUFFERS || defined REL_ALLOC || defined DOUG_LEA_MALLOC
41830
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
583 else
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
584 make_gap_smaller (-nbytes_added);
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
585 #endif
71cbc17f7f8b (make_gap_larger): New function.
Andrew Innes <andrewi@gnu.org>
parents: 41001
diff changeset
586 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
588 /* Copy NBYTES bytes of text from FROM_ADDR to TO_ADDR.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
589 FROM_MULTIBYTE says whether the incoming text is multibyte.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
590 TO_MULTIBYTE says whether to store the text as multibyte.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
591 If FROM_MULTIBYTE != TO_MULTIBYTE, we convert.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
592
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
593 Return the number of bytes stored at TO_ADDR. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
594
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
595 EMACS_INT
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
596 copy_text (const unsigned char *from_addr, unsigned char *to_addr,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
597 EMACS_INT nbytes, int from_multibyte, int to_multibyte)
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
598 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
599 if (from_multibyte == to_multibyte)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
600 {
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
601 memcpy (to_addr, from_addr, nbytes);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
602 return nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
603 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
604 else if (from_multibyte)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
605 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
606 EMACS_INT nchars = 0;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
607 EMACS_INT bytes_left = nbytes;
25764
72f00825a576 (copy_text): Removed unused variables.
Gerd Moellmann <gerd@gnu.org>
parents: 25662
diff changeset
608 Lisp_Object tbl = Qnil;
22876
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
609
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
610 while (bytes_left > 0)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
611 {
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
612 int thislen, c;
106185
f2cea199b0c4 * character.h (STRING_CHAR, STRING_CHAR_AND_LENGTH): Remove
Andreas Schwab <schwab@linux-m68k.org>
parents: 106108
diff changeset
613 c = STRING_CHAR_AND_LENGTH (from_addr, thislen);
100761
e55e55a286f4 (copy_text): To convert a non-ASCII char to unibyte,
Kenichi Handa <handa@m17n.org>
parents: 94963
diff changeset
614 if (! ASCII_CHAR_P (c))
e55e55a286f4 (copy_text): To convert a non-ASCII char to unibyte,
Kenichi Handa <handa@m17n.org>
parents: 94963
diff changeset
615 c &= 0xFF;
22876
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
616 *to_addr++ = c;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
617 from_addr += thislen;
21676
81bbd2c2724a (copy_text): Count down bytes_left properly
Richard M. Stallman <rms@gnu.org>
parents: 21526
diff changeset
618 bytes_left -= thislen;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
619 nchars++;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
620 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
621 return nchars;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
622 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
623 else
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
624 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
625 unsigned char *initial_to_addr = to_addr;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
626
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
627 /* Convert single-byte to multibyte. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
628 while (nbytes > 0)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
629 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
630 int c = *from_addr++;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
631
105661
bac26aa40069 Remove leftover table unibyte_to_multibyte_table.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105426
diff changeset
632 if (!ASCII_CHAR_P (c))
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
633 {
105661
bac26aa40069 Remove leftover table unibyte_to_multibyte_table.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105426
diff changeset
634 c = BYTE8_TO_CHAR (c);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
635 to_addr += CHAR_STRING (c, to_addr);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
636 nbytes--;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
637 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
638 else
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
639 /* Special case for speed. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
640 *to_addr++ = c, nbytes--;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
641 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
642 return to_addr - initial_to_addr;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
643 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
644 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
645
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
646 /* Return the number of bytes it would take
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
647 to convert some single-byte text to multibyte.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
648 The single-byte text consists of NBYTES bytes at PTR. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
649
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
650 EMACS_INT
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
651 count_size_as_multibyte (const unsigned char *ptr, EMACS_INT nbytes)
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
652 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
653 EMACS_INT i;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
654 EMACS_INT outgoing_nbytes = 0;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
655
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
656 for (i = 0; i < nbytes; i++)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
657 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
658 unsigned int c = *ptr++;
21037
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
659
105661
bac26aa40069 Remove leftover table unibyte_to_multibyte_table.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105426
diff changeset
660 if (ASCII_CHAR_P (c))
21037
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
661 outgoing_nbytes++;
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
662 else
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
663 {
105661
bac26aa40069 Remove leftover table unibyte_to_multibyte_table.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105426
diff changeset
664 c = BYTE8_TO_CHAR (c);
23133
48fb93ba8b10 (count_size_as_multibyte): Use macro CHAR_BYTES instead of Fchar_bytes.
Kenichi Handa <handa@m17n.org>
parents: 23053
diff changeset
665 outgoing_nbytes += CHAR_BYTES (c);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
666 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
667 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
668
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
669 return outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
670 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
671
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 /* Insert a string of specified length before point.
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
673 This function judges multibyteness based on
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
674 enable_multibyte_characters in the current buffer;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
675 it never converts between single-byte and multibyte.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
676
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
677 DO NOT use this for the contents of a Lisp string or a Lisp buffer!
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
678 prepare_to_modify_buffer could relocate the text. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
679
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
680 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
681 insert (const unsigned char *string, EMACS_INT nbytes)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
683 if (nbytes > 0)
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
684 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
685 EMACS_INT len = chars_in_text (string, nbytes), opoint;
67773
b0256e43a6b8 (insert, insert_and_inherit, insert_before_markers)
Eli Zaretskii <eliz@gnu.org>
parents: 64770
diff changeset
686 insert_1_both (string, len, nbytes, 0, 1, 0);
b0256e43a6b8 (insert, insert_and_inherit, insert_before_markers)
Eli Zaretskii <eliz@gnu.org>
parents: 64770
diff changeset
687 opoint = PT - len;
b0256e43a6b8 (insert, insert_and_inherit, insert_before_markers)
Eli Zaretskii <eliz@gnu.org>
parents: 64770
diff changeset
688 signal_after_change (opoint, 0, len);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
689 update_compositions (opoint, PT, CHECK_BORDER);
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
690 }
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
691 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
693 /* Likewise, but inherit text properties from neighboring characters. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
694
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
695 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
696 insert_and_inherit (const unsigned char *string, EMACS_INT nbytes)
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
697 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
698 if (nbytes > 0)
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
699 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
700 EMACS_INT len = chars_in_text (string, nbytes), opoint;
67773
b0256e43a6b8 (insert, insert_and_inherit, insert_before_markers)
Eli Zaretskii <eliz@gnu.org>
parents: 64770
diff changeset
701 insert_1_both (string, len, nbytes, 1, 1, 0);
b0256e43a6b8 (insert, insert_and_inherit, insert_before_markers)
Eli Zaretskii <eliz@gnu.org>
parents: 64770
diff changeset
702 opoint = PT - len;
b0256e43a6b8 (insert, insert_and_inherit, insert_before_markers)
Eli Zaretskii <eliz@gnu.org>
parents: 64770
diff changeset
703 signal_after_change (opoint, 0, len);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
704 update_compositions (opoint, PT, CHECK_BORDER);
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
705 }
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
706 }
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
707
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
708 /* Insert the character C before point. Do not inherit text properties. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
711 insert_char (int c)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712 {
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
713 unsigned char str[MAX_MULTIBYTE_LENGTH];
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
714 int len;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
715
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
716 if (! NILP (current_buffer->enable_multibyte_characters))
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
717 len = CHAR_STRING (c, str);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
718 else
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
719 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
720 len = 1;
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
721 str[0] = c;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
722 }
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
723
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
724 insert (str, len);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
727 /* Insert the null-terminated string S before point. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
730 insert_string (const char *s)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 insert (s, strlen (s));
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 /* Like `insert' except that all markers pointing at the place where
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 the insertion happens are adjusted to point after it.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 Don't use this function to insert part of a Lisp string,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738 since gc could happen and relocate it. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
740 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
741 insert_before_markers (const unsigned char *string, EMACS_INT nbytes)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
743 if (nbytes > 0)
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
744 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
745 EMACS_INT len = chars_in_text (string, nbytes), opoint;
67773
b0256e43a6b8 (insert, insert_and_inherit, insert_before_markers)
Eli Zaretskii <eliz@gnu.org>
parents: 64770
diff changeset
746 insert_1_both (string, len, nbytes, 0, 1, 1);
b0256e43a6b8 (insert, insert_and_inherit, insert_before_markers)
Eli Zaretskii <eliz@gnu.org>
parents: 64770
diff changeset
747 opoint = PT - len;
b0256e43a6b8 (insert, insert_and_inherit, insert_before_markers)
Eli Zaretskii <eliz@gnu.org>
parents: 64770
diff changeset
748 signal_after_change (opoint, 0, len);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
749 update_compositions (opoint, PT, CHECK_BORDER);
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
750 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
753 /* Likewise, but inherit text properties from neighboring characters. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
754
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
755 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
756 insert_before_markers_and_inherit (const unsigned char *string,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
757 EMACS_INT nbytes)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
758 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
759 if (nbytes > 0)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
760 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
761 EMACS_INT len = chars_in_text (string, nbytes), opoint;
67773
b0256e43a6b8 (insert, insert_and_inherit, insert_before_markers)
Eli Zaretskii <eliz@gnu.org>
parents: 64770
diff changeset
762 insert_1_both (string, len, nbytes, 1, 1, 1);
b0256e43a6b8 (insert, insert_and_inherit, insert_before_markers)
Eli Zaretskii <eliz@gnu.org>
parents: 64770
diff changeset
763 opoint = PT - len;
b0256e43a6b8 (insert, insert_and_inherit, insert_before_markers)
Eli Zaretskii <eliz@gnu.org>
parents: 64770
diff changeset
764 signal_after_change (opoint, 0, len);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
765 update_compositions (opoint, PT, CHECK_BORDER);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
766 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
767 }
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
768
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
769 /* Subroutine used by the insert functions above. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
770
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
771 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
772 insert_1 (const unsigned char *string, EMACS_INT nbytes,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
773 int inherit, int prepare, int before_markers)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
774 {
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
775 insert_1_both (string, chars_in_text (string, nbytes), nbytes,
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
776 inherit, prepare, before_markers);
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
777 }
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
778
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
779
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
780 #ifdef BYTE_COMBINING_DEBUG
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
781
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
782 /* See if the bytes before POS/POS_BYTE combine with bytes
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
783 at the start of STRING to form a single character.
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
784 If so, return the number of bytes at the start of STRING
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
785 which combine in this way. Otherwise, return 0. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
786
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
787 int
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
788 count_combining_before (const unsigned char *string, EMACS_INT length,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
789 EMACS_INT pos, EMACS_INT pos_byte)
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
790 {
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
791 int len, combining_bytes;
46468
9648dbb4974e (copy_text, count_size_as_multibyte, insert_1):
Ken Raeburn <raeburn@raeburn.org>
parents: 46426
diff changeset
792 const unsigned char *p;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
793
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
794 if (NILP (current_buffer->enable_multibyte_characters))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
795 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
796
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
797 /* At first, we can exclude the following cases:
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
798 (1) STRING[0] can't be a following byte of multibyte sequence.
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
799 (2) POS is the start of the current buffer.
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
800 (3) A character before POS is not a multibyte character. */
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
801 if (length == 0 || CHAR_HEAD_P (*string)) /* case (1) */
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
802 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
803 if (pos_byte == BEG_BYTE) /* case (2) */
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
804 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
805 len = 1;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
806 p = BYTE_POS_ADDR (pos_byte - 1);
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
807 while (! CHAR_HEAD_P (*p)) p--, len++;
108890
d9257436d2b1 Remove obsolete macro BASE_LEADING_CODE_P.
Juanma Barranquero <lekktu@gmail.com>
parents: 107984
diff changeset
808 if (! LEADING_CODE_P (*p)) /* case (3) */
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
809 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
810
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
811 combining_bytes = BYTES_BY_CHAR_HEAD (*p) - len;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
812 if (combining_bytes <= 0)
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
813 /* The character preceding POS is, complete and no room for
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
814 combining bytes (combining_bytes == 0), or an independent 8-bit
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
815 character (combining_bytes < 0). */
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
816 return 0;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
817
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
818 /* We have a combination situation. Count the bytes at STRING that
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
819 may combine. */
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
820 p = string + 1;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
821 while (!CHAR_HEAD_P (*p) && p < string + length)
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
822 p++;
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
823
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
824 return (combining_bytes < p - string ? combining_bytes : p - string);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
825 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
826
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
827 /* See if the bytes after POS/POS_BYTE combine with bytes
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
828 at the end of STRING to form a single character.
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
829 If so, return the number of bytes after POS/POS_BYTE
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
830 which combine in this way. Otherwise, return 0. */
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
831
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
832 int
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
833 count_combining_after (const unsigned char *string,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
834 EMACS_INT length, EMACS_INT pos, EMACS_INT pos_byte)
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
835 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
836 EMACS_INT opos_byte = pos_byte;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
837 EMACS_INT i;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
838 EMACS_INT bytes;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
839 unsigned char *bufp;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
840
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
841 if (NILP (current_buffer->enable_multibyte_characters))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
842 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
843
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
844 /* At first, we can exclude the following cases:
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
845 (1) The last byte of STRING is an ASCII.
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
846 (2) POS is the last of the current buffer.
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
847 (3) A character at POS can't be a following byte of multibyte
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
848 character. */
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
849 if (length > 0 && ASCII_BYTE_P (string[length - 1])) /* case (1) */
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
850 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
851 if (pos_byte == Z_BYTE) /* case (2) */
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
852 return 0;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
853 bufp = BYTE_POS_ADDR (pos_byte);
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
854 if (CHAR_HEAD_P (*bufp)) /* case (3) */
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
855 return 0;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
856
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
857 i = length - 1;
23203
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
858 while (i >= 0 && ! CHAR_HEAD_P (string[i]))
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
859 {
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
860 i--;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
861 }
23203
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
862 if (i < 0)
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
863 {
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
864 /* All characters in STRING are not character head. We must
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
865 check also preceding bytes at POS. We are sure that the gap
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
866 is at POS. */
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
867 unsigned char *p = BEG_ADDR;
23203
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
868 i = pos_byte - 2;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
869 while (i >= 0 && ! CHAR_HEAD_P (p[i]))
23203
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
870 i--;
108890
d9257436d2b1 Remove obsolete macro BASE_LEADING_CODE_P.
Juanma Barranquero <lekktu@gmail.com>
parents: 107984
diff changeset
871 if (i < 0 || !LEADING_CODE_P (p[i]))
23203
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
872 return 0;
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
873
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
874 bytes = BYTES_BY_CHAR_HEAD (p[i]);
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
875 return (bytes <= pos_byte - 1 - i + length
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
876 ? 0
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
877 : bytes - (pos_byte - 1 - i + length));
23203
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
878 }
108890
d9257436d2b1 Remove obsolete macro BASE_LEADING_CODE_P.
Juanma Barranquero <lekktu@gmail.com>
parents: 107984
diff changeset
879 if (!LEADING_CODE_P (string[i]))
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
880 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
881
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
882 bytes = BYTES_BY_CHAR_HEAD (string[i]) - (length - i);
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
883 bufp++, pos_byte++;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
884 while (!CHAR_HEAD_P (*bufp)) bufp++, pos_byte++;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
885
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
886 return (bytes <= pos_byte - opos_byte ? bytes : pos_byte - opos_byte);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
887 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
888
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
889 #endif
23566
25baa4bda79d (check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents: 23555
diff changeset
890
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
891
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
892 /* Insert a sequence of NCHARS chars which occupy NBYTES bytes
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
893 starting at STRING. INHERIT, PREPARE and BEFORE_MARKERS
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
894 are the same as in insert_1. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
896 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
897 insert_1_both (const unsigned char *string,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
898 EMACS_INT nchars, EMACS_INT nbytes,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
899 int inherit, int prepare, int before_markers)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
900 {
40331
97afe8612d00 (insert_1_both): Do nothing if NCHARS == 0.
Gerd Moellmann <gerd@gnu.org>
parents: 39682
diff changeset
901 if (nchars == 0)
97afe8612d00 (insert_1_both): Do nothing if NCHARS == 0.
Gerd Moellmann <gerd@gnu.org>
parents: 39682
diff changeset
902 return;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48090
diff changeset
903
21054
5d592343630f (insert_1_both): If enable-multibyte-characters is nil,
Kenichi Handa <handa@m17n.org>
parents: 21037
diff changeset
904 if (NILP (current_buffer->enable_multibyte_characters))
5d592343630f (insert_1_both): If enable-multibyte-characters is nil,
Kenichi Handa <handa@m17n.org>
parents: 21037
diff changeset
905 nchars = nbytes;
5d592343630f (insert_1_both): If enable-multibyte-characters is nil,
Kenichi Handa <handa@m17n.org>
parents: 21037
diff changeset
906
21817
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
907 if (prepare)
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
908 /* Do this before moving and increasing the gap,
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
909 because the before-change hooks might move the gap
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
910 or make it smaller. */
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
911 prepare_to_modify_buffer (PT, PT, NULL);
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
912
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
913 if (PT != GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
914 move_gap_both (PT, PT_BYTE);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
915 if (GAP_SIZE < nbytes)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
916 make_gap (nbytes - GAP_SIZE);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
917
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
918 #ifdef BYTE_COMBINING_DEBUG
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
919 if (count_combining_before (string, nbytes, PT, PT_BYTE)
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
920 || count_combining_after (string, nbytes, PT, PT_BYTE))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
921 abort ();
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
922 #endif
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
923
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
924 /* Record deletion of the surrounding text that combines with
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
925 the insertion. This, together with recording the insertion,
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
926 will add up to the right stuff in the undo list. */
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
927 record_insert (PT, nchars);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
928 MODIFF++;
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
929 CHARS_MODIFF = MODIFF;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
930
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
931 memcpy (GPT_ADDR, string, nbytes);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
932
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
933 GAP_SIZE -= nbytes;
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
934 GPT += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
935 ZV += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
936 Z += nchars;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
937 GPT_BYTE += nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
938 ZV_BYTE += nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
939 Z_BYTE += nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
940 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
941
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
942 if (GPT_BYTE < GPT)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
943 abort ();
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
944
45818
e70fd49212a0 (insert_1_both, insert_from_string_1)
Kim F. Storm <storm@cua.dk>
parents: 43218
diff changeset
945 /* The insert may have been in the unchanged region, so check again. */
e70fd49212a0 (insert_1_both, insert_from_string_1)
Kim F. Storm <storm@cua.dk>
parents: 43218
diff changeset
946 if (Z - GPT < END_UNCHANGED)
e70fd49212a0 (insert_1_both, insert_from_string_1)
Kim F. Storm <storm@cua.dk>
parents: 43218
diff changeset
947 END_UNCHANGED = Z - GPT;
e70fd49212a0 (insert_1_both, insert_from_string_1)
Kim F. Storm <storm@cua.dk>
parents: 43218
diff changeset
948
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
949 adjust_overlays_for_insert (PT, nchars);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
950 adjust_markers_for_insert (PT, PT_BYTE,
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
951 PT + nchars, PT_BYTE + nbytes,
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
952 before_markers);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
953
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
954 if (BUF_INTERVALS (current_buffer) != 0)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
955 offset_intervals (current_buffer, PT, nchars);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
956
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
957 if (!inherit && BUF_INTERVALS (current_buffer) != 0)
26604
381c4e70f9fb (insert_1_both): Call set_text_properties with last
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
958 set_text_properties (make_number (PT), make_number (PT + nchars),
381c4e70f9fb (insert_1_both): Call set_text_properties with last
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
959 Qnil, Qnil, Qnil);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
960
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
961 adjust_point (nchars, nbytes);
23538
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
962
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
963 CHECK_MARKERS ();
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
964 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
965
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
966 /* Insert the part of the text of STRING, a Lisp object assumed to be
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
967 of type string, consisting of the LENGTH characters (LENGTH_BYTE bytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
968 starting at position POS / POS_BYTE. If the text of STRING has properties,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
969 copy them into the buffer.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
970
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
971 It does not work to use `insert' for this, because a GC could happen
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
972 before we copy the stuff into the buffer, and relocate the string
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
973 without insert noticing. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
974
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
975 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
976 insert_from_string (Lisp_Object string, EMACS_INT pos, EMACS_INT pos_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
977 EMACS_INT length, EMACS_INT length_byte, int inherit)
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
978 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
979 EMACS_INT opoint = PT;
58735
dc21606c560a (insert_from_string_before_markers)
Richard M. Stallman <rms@gnu.org>
parents: 57878
diff changeset
980
dc21606c560a (insert_from_string_before_markers)
Richard M. Stallman <rms@gnu.org>
parents: 57878
diff changeset
981 if (SCHARS (string) == 0)
dc21606c560a (insert_from_string_before_markers)
Richard M. Stallman <rms@gnu.org>
parents: 57878
diff changeset
982 return;
dc21606c560a (insert_from_string_before_markers)
Richard M. Stallman <rms@gnu.org>
parents: 57878
diff changeset
983
21765
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
984 insert_from_string_1 (string, pos, pos_byte, length, length_byte,
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
985 inherit, 0);
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
986 signal_after_change (opoint, 0, PT - opoint);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
987 update_compositions (opoint, PT, CHECK_BORDER);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
988 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
989
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
990 /* Like `insert_from_string' except that all markers pointing
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
991 at the place where the insertion happens are adjusted to point after it. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
992
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
993 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
994 insert_from_string_before_markers (Lisp_Object string,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
995 EMACS_INT pos, EMACS_INT pos_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
996 EMACS_INT length, EMACS_INT length_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
997 int inherit)
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
998 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
999 EMACS_INT opoint = PT;
58735
dc21606c560a (insert_from_string_before_markers)
Richard M. Stallman <rms@gnu.org>
parents: 57878
diff changeset
1000
dc21606c560a (insert_from_string_before_markers)
Richard M. Stallman <rms@gnu.org>
parents: 57878
diff changeset
1001 if (SCHARS (string) == 0)
dc21606c560a (insert_from_string_before_markers)
Richard M. Stallman <rms@gnu.org>
parents: 57878
diff changeset
1002 return;
dc21606c560a (insert_from_string_before_markers)
Richard M. Stallman <rms@gnu.org>
parents: 57878
diff changeset
1003
21765
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
1004 insert_from_string_1 (string, pos, pos_byte, length, length_byte,
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
1005 inherit, 1);
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
1006 signal_after_change (opoint, 0, PT - opoint);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1007 update_compositions (opoint, PT, CHECK_BORDER);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1008 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1009
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1010 /* Subroutine of the insertion functions above. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1011
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1012 static void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1013 insert_from_string_1 (Lisp_Object string, EMACS_INT pos, EMACS_INT pos_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1014 EMACS_INT nchars, EMACS_INT nbytes,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1015 int inherit, int before_markers)
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1016 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1017 struct gcpro gcpro1;
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1018 EMACS_INT outgoing_nbytes = nbytes;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1019 INTERVAL intervals;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1020
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1021 /* Make OUTGOING_NBYTES describe the text
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1022 as it will be inserted in this buffer. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1023
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1024 if (NILP (current_buffer->enable_multibyte_characters))
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1025 outgoing_nbytes = nchars;
21246
6c16216d0e69 (insert_from_string_1, replace_range):
Richard M. Stallman <rms@gnu.org>
parents: 21244
diff changeset
1026 else if (! STRING_MULTIBYTE (string))
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1027 outgoing_nbytes
46426
d7f3f0434d43 * insdel.c (insert_from_string_1): Use SDATA.
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
1028 = count_size_as_multibyte (SDATA (string) + pos_byte,
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1029 nbytes);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1030
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1031 GCPRO1 (string);
21817
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
1032 /* Do this before moving and increasing the gap,
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
1033 because the before-change hooks might move the gap
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
1034 or make it smaller. */
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1035 prepare_to_modify_buffer (PT, PT, NULL);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1036
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1037 if (PT != GPT)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1038 move_gap_both (PT, PT_BYTE);
25170
dbc159883883 (insert_from_string_1): Check gap size against number
Andreas Schwab <schwab@suse.de>
parents: 25025
diff changeset
1039 if (GAP_SIZE < outgoing_nbytes)
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1040 make_gap (outgoing_nbytes - GAP_SIZE);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1041 UNGCPRO;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1042
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1043 /* Copy the string text into the buffer, perhaps converting
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1044 between single-byte and multibyte. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1045 copy_text (SDATA (string) + pos_byte, GPT_ADDR, nbytes,
21246
6c16216d0e69 (insert_from_string_1, replace_range):
Richard M. Stallman <rms@gnu.org>
parents: 21244
diff changeset
1046 STRING_MULTIBYTE (string),
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1047 ! NILP (current_buffer->enable_multibyte_characters));
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1048
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1049 #ifdef BYTE_COMBINING_DEBUG
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1050 /* We have copied text into the gap, but we have not altered
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1051 PT or PT_BYTE yet. So we can pass PT and PT_BYTE
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1052 to these functions and get the same results as we would
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1053 have got earlier on. Meanwhile, PT_ADDR does point to
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1054 the text that has been stored by copy_text. */
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1055 if (count_combining_before (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE)
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1056 || count_combining_after (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1057 abort ();
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1058 #endif
22107
5507c26908af (insert_1_both, insert_from_string_1, replace_range)
Richard M. Stallman <rms@gnu.org>
parents: 21817
diff changeset
1059
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1060 record_insert (PT, nchars);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1061 MODIFF++;
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1062 CHARS_MODIFF = MODIFF;
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1063
20642
818677afe7bc (insert_from_string_1): Decrement GAP_SIZE by
Kenichi Handa <handa@m17n.org>
parents: 20608
diff changeset
1064 GAP_SIZE -= outgoing_nbytes;
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1065 GPT += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1066 ZV += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1067 Z += nchars;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1068 GPT_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1069 ZV_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1070 Z_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1071 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1072
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1073 if (GPT_BYTE < GPT)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1074 abort ();
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1075
45818
e70fd49212a0 (insert_1_both, insert_from_string_1)
Kim F. Storm <storm@cua.dk>
parents: 43218
diff changeset
1076 /* The insert may have been in the unchanged region, so check again. */
e70fd49212a0 (insert_1_both, insert_from_string_1)
Kim F. Storm <storm@cua.dk>
parents: 43218
diff changeset
1077 if (Z - GPT < END_UNCHANGED)
e70fd49212a0 (insert_1_both, insert_from_string_1)
Kim F. Storm <storm@cua.dk>
parents: 43218
diff changeset
1078 END_UNCHANGED = Z - GPT;
e70fd49212a0 (insert_1_both, insert_from_string_1)
Kim F. Storm <storm@cua.dk>
parents: 43218
diff changeset
1079
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1080 adjust_overlays_for_insert (PT, nchars);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1081 adjust_markers_for_insert (PT, PT_BYTE, PT + nchars,
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1082 PT_BYTE + outgoing_nbytes,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1083 before_markers);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1084
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1085 offset_intervals (current_buffer, PT, nchars);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1086
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1087 intervals = STRING_INTERVALS (string);
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1088 /* Get the intervals for the part of the string we are inserting. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1089 if (nbytes < SBYTES (string))
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1090 intervals = copy_intervals (intervals, pos, nchars);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48090
diff changeset
1091
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1092 /* Insert those intervals. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1093 graft_intervals_into_buffer (intervals, PT, nchars,
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1094 current_buffer, inherit);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1095
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1096 adjust_point (nchars, outgoing_nbytes);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1097
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1098 CHECK_MARKERS ();
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1099 }
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1100
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1101 /* Insert a sequence of NCHARS chars which occupy NBYTES bytes
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1102 starting at GPT_ADDR. */
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1103
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1104 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1105 insert_from_gap (EMACS_INT nchars, EMACS_INT nbytes)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1106 {
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1107 if (NILP (current_buffer->enable_multibyte_characters))
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1108 nchars = nbytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1109
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1110 record_insert (GPT, nchars);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1111 MODIFF++;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1112
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1113 GAP_SIZE -= nbytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1114 GPT += nchars;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1115 ZV += nchars;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1116 Z += nchars;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1117 GPT_BYTE += nbytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1118 ZV_BYTE += nbytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1119 Z_BYTE += nbytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1120 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1121
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1122 if (GPT_BYTE < GPT)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1123 abort ();
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1124
89598
dd3ec25f37e8 (insert_from_gap): Adjust intervals correctly.
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
1125 adjust_overlays_for_insert (GPT - nchars, nchars);
dd3ec25f37e8 (insert_from_gap): Adjust intervals correctly.
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
1126 adjust_markers_for_insert (GPT - nchars, GPT_BYTE - nbytes,
dd3ec25f37e8 (insert_from_gap): Adjust intervals correctly.
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
1127 GPT, GPT_BYTE, 0);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1128
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1129 if (BUF_INTERVALS (current_buffer) != 0)
89598
dd3ec25f37e8 (insert_from_gap): Adjust intervals correctly.
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
1130 {
dd3ec25f37e8 (insert_from_gap): Adjust intervals correctly.
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
1131 offset_intervals (current_buffer, GPT - nchars, nchars);
dd3ec25f37e8 (insert_from_gap): Adjust intervals correctly.
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
1132 graft_intervals_into_buffer (NULL_INTERVAL, GPT - nchars, nchars,
dd3ec25f37e8 (insert_from_gap): Adjust intervals correctly.
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
1133 current_buffer, 0);
dd3ec25f37e8 (insert_from_gap): Adjust intervals correctly.
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
1134 }
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1135
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1136 if (GPT - nchars < PT)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1137 adjust_point (nchars, nbytes);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1138
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89326
diff changeset
1139 CHECK_MARKERS ();
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1140 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1142 /* Insert text from BUF, NCHARS characters starting at CHARPOS, into the
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1143 current buffer. If the text in BUF has properties, they are absorbed
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1144 into the current buffer.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1145
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1146 It does not work to use `insert' for this, because a malloc could happen
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
1147 and relocate BUF's text before the copy happens. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1148
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1149 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1150 insert_from_buffer (struct buffer *buf,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1151 EMACS_INT charpos, EMACS_INT nchars, int inherit)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1152 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1153 EMACS_INT opoint = PT;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1154
21765
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
1155 insert_from_buffer_1 (buf, charpos, nchars, inherit);
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
1156 signal_after_change (opoint, 0, PT - opoint);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1157 update_compositions (opoint, PT, CHECK_BORDER);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1158 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1159
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1160 static void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1161 insert_from_buffer_1 (struct buffer *buf,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1162 EMACS_INT from, EMACS_INT nchars, int inherit)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1163 {
22107
5507c26908af (insert_1_both, insert_from_string_1, replace_range)
Richard M. Stallman <rms@gnu.org>
parents: 21817
diff changeset
1164 register Lisp_Object temp;
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1165 EMACS_INT chunk, chunk_expanded;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1166 EMACS_INT from_byte = buf_charpos_to_bytepos (buf, from);
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1167 EMACS_INT to_byte = buf_charpos_to_bytepos (buf, from + nchars);
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1168 EMACS_INT incoming_nbytes = to_byte - from_byte;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1169 EMACS_INT outgoing_nbytes = incoming_nbytes;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1170 INTERVAL intervals;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1171
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1172 /* Make OUTGOING_NBYTES describe the text
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1173 as it will be inserted in this buffer. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1174
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1175 if (NILP (current_buffer->enable_multibyte_characters))
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1176 outgoing_nbytes = nchars;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1177 else if (NILP (buf->enable_multibyte_characters))
23850
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1178 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1179 EMACS_INT outgoing_before_gap = 0;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1180 EMACS_INT outgoing_after_gap = 0;
23850
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1181
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1182 if (from < BUF_GPT (buf))
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1183 {
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1184 chunk = BUF_GPT_BYTE (buf) - from_byte;
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1185 if (chunk > incoming_nbytes)
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1186 chunk = incoming_nbytes;
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1187 outgoing_before_gap
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1188 = count_size_as_multibyte (BUF_BYTE_ADDRESS (buf, from_byte),
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1189 chunk);
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1190 }
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1191 else
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1192 chunk = 0;
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1193
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1194 if (chunk < incoming_nbytes)
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1195 outgoing_after_gap
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48090
diff changeset
1196 = count_size_as_multibyte (BUF_BYTE_ADDRESS (buf,
23850
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1197 from_byte + chunk),
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1198 incoming_nbytes - chunk);
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1199
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1200 outgoing_nbytes = outgoing_before_gap + outgoing_after_gap;
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1201 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48090
diff changeset
1202
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1203 /* Make sure point-max won't overflow after this insertion. */
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1204 XSETINT (temp, outgoing_nbytes + Z);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1205 if (outgoing_nbytes + Z != XINT (temp))
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1206 error ("Maximum buffer size exceeded");
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1207
21817
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
1208 /* Do this before moving and increasing the gap,
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
1209 because the before-change hooks might move the gap
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
1210 or make it smaller. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1211 prepare_to_modify_buffer (PT, PT, NULL);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1212
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1213 if (PT != GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1214 move_gap_both (PT, PT_BYTE);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1215 if (GAP_SIZE < outgoing_nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1216 make_gap (outgoing_nbytes - GAP_SIZE);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1217
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1218 if (from < BUF_GPT (buf))
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1219 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1220 chunk = BUF_GPT_BYTE (buf) - from_byte;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1221 if (chunk > incoming_nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1222 chunk = incoming_nbytes;
23850
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1223 /* Record number of output bytes, so we know where
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1224 to put the output from the second copy_text. */
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1225 chunk_expanded
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1226 = copy_text (BUF_BYTE_ADDRESS (buf, from_byte),
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1227 GPT_ADDR, chunk,
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1228 ! NILP (buf->enable_multibyte_characters),
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1229 ! NILP (current_buffer->enable_multibyte_characters));
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1230 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1231 else
23850
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1232 chunk_expanded = chunk = 0;
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1233
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1234 if (chunk < incoming_nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1235 copy_text (BUF_BYTE_ADDRESS (buf, from_byte + chunk),
23850
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1236 GPT_ADDR + chunk_expanded, incoming_nbytes - chunk,
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1237 ! NILP (buf->enable_multibyte_characters),
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1238 ! NILP (current_buffer->enable_multibyte_characters));
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1239
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1240 #ifdef BYTE_COMBINING_DEBUG
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1241 /* We have copied text into the gap, but we have not altered
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1242 PT or PT_BYTE yet. So we can pass PT and PT_BYTE
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1243 to these functions and get the same results as we would
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1244 have got earlier on. Meanwhile, GPT_ADDR does point to
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1245 the text that has been stored by copy_text. */
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1246 if (count_combining_before (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE)
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1247 || count_combining_after (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1248 abort ();
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1249 #endif
22107
5507c26908af (insert_1_both, insert_from_string_1, replace_range)
Richard M. Stallman <rms@gnu.org>
parents: 21817
diff changeset
1250
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1251 record_insert (PT, nchars);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1252 MODIFF++;
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1253 CHARS_MODIFF = MODIFF;
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1254
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1255 GAP_SIZE -= outgoing_nbytes;
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1256 GPT += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1257 ZV += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1258 Z += nchars;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1259 GPT_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1260 ZV_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1261 Z_BYTE += outgoing_nbytes;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1262 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1263
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1264 if (GPT_BYTE < GPT)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1265 abort ();
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1266
45818
e70fd49212a0 (insert_1_both, insert_from_string_1)
Kim F. Storm <storm@cua.dk>
parents: 43218
diff changeset
1267 /* The insert may have been in the unchanged region, so check again. */
e70fd49212a0 (insert_1_both, insert_from_string_1)
Kim F. Storm <storm@cua.dk>
parents: 43218
diff changeset
1268 if (Z - GPT < END_UNCHANGED)
e70fd49212a0 (insert_1_both, insert_from_string_1)
Kim F. Storm <storm@cua.dk>
parents: 43218
diff changeset
1269 END_UNCHANGED = Z - GPT;
e70fd49212a0 (insert_1_both, insert_from_string_1)
Kim F. Storm <storm@cua.dk>
parents: 43218
diff changeset
1270
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1271 adjust_overlays_for_insert (PT, nchars);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1272 adjust_markers_for_insert (PT, PT_BYTE, PT + nchars,
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1273 PT_BYTE + outgoing_nbytes,
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1274 0);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1275
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1276 if (BUF_INTERVALS (current_buffer) != 0)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1277 offset_intervals (current_buffer, PT, nchars);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1278
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1279 /* Get the intervals for the part of the string we are inserting. */
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1280 intervals = BUF_INTERVALS (buf);
93610
f65c3e4b689b (insert_from_buffer_1): Don't compare bytes in destination
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91807
diff changeset
1281 if (nchars < BUF_Z (buf) - BUF_BEG (buf))
28813
12946e495506 (insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1282 {
12946e495506 (insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1283 if (buf == current_buffer && PT <= from)
12946e495506 (insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1284 from += nchars;
12946e495506 (insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1285 intervals = copy_intervals (intervals, from, nchars);
12946e495506 (insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1286 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48090
diff changeset
1287
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1288 /* Insert those intervals. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1289 graft_intervals_into_buffer (intervals, PT, nchars, current_buffer, inherit);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1290
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1291 adjust_point (nchars, outgoing_nbytes);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1292 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1293
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1294 /* Record undo information and adjust markers and position keepers for
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1295 a replacement of a text PREV_TEXT at FROM to a new text of LEN
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1296 chars (LEN_BYTE bytes) which resides in the gap just after
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1297 GPT_ADDR.
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1298
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1299 PREV_TEXT nil means the new text was just inserted. */
20937
f77dcb2556c5 (adjust_before_replace): Comment added.
Kenichi Handa <handa@m17n.org>
parents: 20889
diff changeset
1300
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1301 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1302 adjust_after_replace (EMACS_INT from, EMACS_INT from_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1303 Lisp_Object prev_text, EMACS_INT len, EMACS_INT len_byte)
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1304 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1305 EMACS_INT nchars_del = 0, nbytes_del = 0;
23597
fda73fa21974 (byte_combining_error): New function.
Kenichi Handa <handa@m17n.org>
parents: 23566
diff changeset
1306
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1307 #ifdef BYTE_COMBINING_DEBUG
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1308 if (count_combining_before (GPT_ADDR, len_byte, from, from_byte)
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1309 || count_combining_after (GPT_ADDR, len_byte, from, from_byte))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1310 abort ();
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1311 #endif
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1312
23538
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1313 if (STRINGP (prev_text))
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1314 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1315 nchars_del = SCHARS (prev_text);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1316 nbytes_del = SBYTES (prev_text);
23538
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1317 }
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1318
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1319 /* Update various buffer positions for the new text. */
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1320 GAP_SIZE -= len_byte;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1321 ZV += len; Z+= len;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1322 ZV_BYTE += len_byte; Z_BYTE += len_byte;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1323 GPT += len; GPT_BYTE += len_byte;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1324 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1325
29065
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
1326 if (nchars_del > 0)
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
1327 adjust_markers_for_replace (from, from_byte, nchars_del, nbytes_del,
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
1328 len, len_byte);
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
1329 else
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
1330 adjust_markers_for_insert (from, from_byte,
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
1331 from + len, from_byte + len_byte, 0);
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1332
23538
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1333 if (! EQ (current_buffer->undo_list, Qt))
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1334 {
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1335 if (nchars_del > 0)
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1336 record_delete (from, prev_text);
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1337 record_insert (from, len);
23538
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1338 }
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1339
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1340 if (len > nchars_del)
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1341 adjust_overlays_for_insert (from, len - nchars_del);
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1342 else if (len < nchars_del)
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1343 adjust_overlays_for_delete (from, nchars_del - len);
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1344 if (BUF_INTERVALS (current_buffer) != 0)
23137
fed2ba47003f (adjust_after_replace): Fix the code to recode undo
Kenichi Handa <handa@m17n.org>
parents: 23133
diff changeset
1345 {
fed2ba47003f (adjust_after_replace): Fix the code to recode undo
Kenichi Handa <handa@m17n.org>
parents: 23133
diff changeset
1346 offset_intervals (current_buffer, from, len - nchars_del);
fed2ba47003f (adjust_after_replace): Fix the code to recode undo
Kenichi Handa <handa@m17n.org>
parents: 23133
diff changeset
1347 }
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1348
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1349 if (from < PT)
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1350 adjust_point (len - nchars_del, len_byte - nbytes_del);
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1351
23566
25baa4bda79d (check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents: 23555
diff changeset
1352 /* As byte combining will decrease Z, we must check this again. */
25373
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1353 if (Z - GPT < END_UNCHANGED)
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1354 END_UNCHANGED = Z - GPT;
23566
25baa4bda79d (check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents: 23555
diff changeset
1355
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1356 CHECK_MARKERS ();
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1357
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1358 if (len == 0)
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1359 evaporate_overlays (from);
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1360 MODIFF++;
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1361 CHARS_MODIFF = MODIFF;
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1362 }
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1363
42662
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1364 /* Like adjust_after_replace, but doesn't require PREV_TEXT.
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1365 This is for use when undo is not enabled in the current buffer. */
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1366
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1367 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1368 adjust_after_replace_noundo (EMACS_INT from, EMACS_INT from_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1369 EMACS_INT nchars_del, EMACS_INT nbytes_del,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1370 EMACS_INT len, EMACS_INT len_byte)
42662
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1371 {
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1372 #ifdef BYTE_COMBINING_DEBUG
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1373 if (count_combining_before (GPT_ADDR, len_byte, from, from_byte)
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1374 || count_combining_after (GPT_ADDR, len_byte, from, from_byte))
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1375 abort ();
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1376 #endif
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1377
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1378 /* Update various buffer positions for the new text. */
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1379 GAP_SIZE -= len_byte;
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1380 ZV += len; Z+= len;
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1381 ZV_BYTE += len_byte; Z_BYTE += len_byte;
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1382 GPT += len; GPT_BYTE += len_byte;
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1383 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1384
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1385 if (nchars_del > 0)
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1386 adjust_markers_for_replace (from, from_byte, nchars_del, nbytes_del,
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1387 len, len_byte);
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1388 else
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1389 adjust_markers_for_insert (from, from_byte,
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1390 from + len, from_byte + len_byte, 0);
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1391
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1392 if (len > nchars_del)
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1393 adjust_overlays_for_insert (from, len - nchars_del);
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1394 else if (len < nchars_del)
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1395 adjust_overlays_for_delete (from, nchars_del - len);
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1396 if (BUF_INTERVALS (current_buffer) != 0)
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1397 {
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1398 offset_intervals (current_buffer, from, len - nchars_del);
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1399 }
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1400
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1401 if (from < PT)
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1402 adjust_point (len - nchars_del, len_byte - nbytes_del);
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1403
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1404 /* As byte combining will decrease Z, we must check this again. */
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1405 if (Z - GPT < END_UNCHANGED)
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1406 END_UNCHANGED = Z - GPT;
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1407
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1408 CHECK_MARKERS ();
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1409
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1410 if (len == 0)
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1411 evaporate_overlays (from);
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1412 MODIFF++;
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1413 CHARS_MODIFF = MODIFF;
42662
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1414 }
e95258418289 (adjust_after_replace_noundo): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42581
diff changeset
1415
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1416 /* Record undo information, adjust markers and position keepers for an
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1417 insertion of a text from FROM (FROM_BYTE) to TO (TO_BYTE). The
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1418 text already exists in the current buffer but character length (TO
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1419 - FROM) may be incorrect, the correct length is NEWLEN. */
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1420
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1421 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1422 adjust_after_insert (EMACS_INT from, EMACS_INT from_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1423 EMACS_INT to, EMACS_INT to_byte, EMACS_INT newlen)
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1424 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1425 EMACS_INT len = to - from, len_byte = to_byte - from_byte;
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1426
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1427 if (GPT != to)
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1428 move_gap_both (to, to_byte);
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1429 GAP_SIZE += len_byte;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1430 GPT -= len; GPT_BYTE -= len_byte;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1431 ZV -= len; ZV_BYTE -= len_byte;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1432 Z -= len; Z_BYTE -= len_byte;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1433 adjust_after_replace (from, from_byte, Qnil, newlen, len_byte);
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1434 }
57878
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1435
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1436 /* Replace the text from character positions FROM to TO with NEW,
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1437 If PREPARE is nonzero, call prepare_to_modify_buffer.
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1438 If INHERIT, the newly inserted text should inherit text properties
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1439 from the surrounding non-deleted text. */
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1440
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1441 /* Note that this does not yet handle markers quite right.
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1442 Also it needs to record a single undo-entry that does a replacement
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1443 rather than a separate delete and insert.
23053
09d1521f9984 (replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents: 23028
diff changeset
1444 That way, undo will also handle markers properly.
09d1521f9984 (replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents: 23028
diff changeset
1445
09d1521f9984 (replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents: 23028
diff changeset
1446 But if MARKERS is 0, don't relocate markers. */
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1447
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1448 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1449 replace_range (EMACS_INT from, EMACS_INT to, Lisp_Object new,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1450 int prepare, int inherit, int markers)
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1451 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1452 EMACS_INT inschars = SCHARS (new);
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1453 EMACS_INT insbytes = SBYTES (new);
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1454 EMACS_INT from_byte, to_byte;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1455 EMACS_INT nbytes_del, nchars_del;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1456 register Lisp_Object temp;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1457 struct gcpro gcpro1;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1458 INTERVAL intervals;
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1459 EMACS_INT outgoing_insbytes = insbytes;
23259
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1460 Lisp_Object deletion;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1461
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1462 CHECK_MARKERS ();
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1463
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1464 GCPRO1 (new);
31829
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31603
diff changeset
1465 deletion = Qnil;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1466
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1467 if (prepare)
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1468 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1469 EMACS_INT range_length = to - from;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1470 prepare_to_modify_buffer (from, to, &from);
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1471 to = from + range_length;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1472 }
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1473
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1474 UNGCPRO;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1475
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1476 /* Make args be valid */
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1477 if (from < BEGV)
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1478 from = BEGV;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1479 if (to > ZV)
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1480 to = ZV;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1481
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1482 from_byte = CHAR_TO_BYTE (from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1483 to_byte = CHAR_TO_BYTE (to);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1484
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1485 nchars_del = to - from;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1486 nbytes_del = to_byte - from_byte;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1487
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1488 if (nbytes_del <= 0 && insbytes == 0)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1489 return;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1490
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1491 /* Make OUTGOING_INSBYTES describe the text
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1492 as it will be inserted in this buffer. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1493
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1494 if (NILP (current_buffer->enable_multibyte_characters))
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1495 outgoing_insbytes = inschars;
21246
6c16216d0e69 (insert_from_string_1, replace_range):
Richard M. Stallman <rms@gnu.org>
parents: 21244
diff changeset
1496 else if (! STRING_MULTIBYTE (new))
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1497 outgoing_insbytes
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1498 = count_size_as_multibyte (SDATA (new), insbytes);
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1499
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1500 /* Make sure point-max won't overflow after this insertion. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1501 XSETINT (temp, Z_BYTE - nbytes_del + insbytes);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1502 if (Z_BYTE - nbytes_del + insbytes != XINT (temp))
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1503 error ("Maximum buffer size exceeded");
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1504
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1505 GCPRO1 (new);
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1506
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1507 /* Make sure the gap is somewhere in or next to what we are deleting. */
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1508 if (from > GPT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1509 gap_right (from, from_byte);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1510 if (to < GPT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1511 gap_left (to, to_byte, 0);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1512
23597
fda73fa21974 (byte_combining_error): New function.
Kenichi Handa <handa@m17n.org>
parents: 23566
diff changeset
1513 /* Even if we don't record for undo, we must keep the original text
fda73fa21974 (byte_combining_error): New function.
Kenichi Handa <handa@m17n.org>
parents: 23566
diff changeset
1514 because we may have to recover it because of inappropriate byte
fda73fa21974 (byte_combining_error): New function.
Kenichi Handa <handa@m17n.org>
parents: 23566
diff changeset
1515 combining. */
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1516 if (! EQ (current_buffer->undo_list, Qt))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1517 deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1);
23259
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1518
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1519 GAP_SIZE += nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1520 ZV -= nchars_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1521 Z -= nchars_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1522 ZV_BYTE -= nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1523 Z_BYTE -= nbytes_del;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1524 GPT = from;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1525 GPT_BYTE = from_byte;
55740
eba675d00657 (del_range_2, replace_range): Don't write an anchor if the gap is empty.
Richard M. Stallman <rms@gnu.org>
parents: 54555
diff changeset
1526 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1527
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1528 if (GPT_BYTE < GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1529 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1530
25373
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1531 if (GPT - BEG < BEG_UNCHANGED)
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1532 BEG_UNCHANGED = GPT - BEG;
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1533 if (Z - GPT < END_UNCHANGED)
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1534 END_UNCHANGED = Z - GPT;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1535
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1536 if (GAP_SIZE < insbytes)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1537 make_gap (insbytes - GAP_SIZE);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1538
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1539 /* Copy the string text into the buffer, perhaps converting
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1540 between single-byte and multibyte. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1541 copy_text (SDATA (new), GPT_ADDR, insbytes,
21246
6c16216d0e69 (insert_from_string_1, replace_range):
Richard M. Stallman <rms@gnu.org>
parents: 21244
diff changeset
1542 STRING_MULTIBYTE (new),
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1543 ! NILP (current_buffer->enable_multibyte_characters));
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1544
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1545 #ifdef BYTE_COMBINING_DEBUG
22896
6d368c9a689e (replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents: 22876
diff changeset
1546 /* We have copied text into the gap, but we have not marked
6d368c9a689e (replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents: 22876
diff changeset
1547 it as part of the buffer. So we can use the old FROM and FROM_BYTE
6d368c9a689e (replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents: 22876
diff changeset
1548 here, for both the previous text and the following text.
6d368c9a689e (replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents: 22876
diff changeset
1549 Meanwhile, GPT_ADDR does point to
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1550 the text that has been stored by copy_text. */
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1551 if (count_combining_before (GPT_ADDR, outgoing_insbytes, from, from_byte)
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1552 || count_combining_after (GPT_ADDR, outgoing_insbytes, from, from_byte))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1553 abort ();
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1554 #endif
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1555
23259
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1556 if (! EQ (current_buffer->undo_list, Qt))
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1557 {
77621
beb7c0b976bd (replace_range): For undo, record insertion first.
Richard M. Stallman <rms@gnu.org>
parents: 76240
diff changeset
1558 /* Record the insertion first, so that when we undo,
beb7c0b976bd (replace_range): For undo, record insertion first.
Richard M. Stallman <rms@gnu.org>
parents: 76240
diff changeset
1559 the deletion will be undone first. Thus, undo
beb7c0b976bd (replace_range): For undo, record insertion first.
Richard M. Stallman <rms@gnu.org>
parents: 76240
diff changeset
1560 will insert before deleting, and thus will keep
beb7c0b976bd (replace_range): For undo, record insertion first.
Richard M. Stallman <rms@gnu.org>
parents: 76240
diff changeset
1561 the markers before and after this text separate. */
beb7c0b976bd (replace_range): For undo, record insertion first.
Richard M. Stallman <rms@gnu.org>
parents: 76240
diff changeset
1562 record_insert (from + SCHARS (deletion), inschars);
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1563 record_delete (from, deletion);
23259
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1564 }
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1565
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1566 GAP_SIZE -= outgoing_insbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1567 GPT += inschars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1568 ZV += inschars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1569 Z += inschars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1570 GPT_BYTE += outgoing_insbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1571 ZV_BYTE += outgoing_insbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1572 Z_BYTE += outgoing_insbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1573 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1574
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1575 if (GPT_BYTE < GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1576 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1577
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1578 /* Adjust the overlay center as needed. This must be done after
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1579 adjusting the markers that bound the overlays. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1580 adjust_overlays_for_delete (from, nchars_del);
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1581 adjust_overlays_for_insert (from, inschars);
40923
5ed9e7521ec5 (replace_range): Use adjust_markers_for_replace
Richard M. Stallman <rms@gnu.org>
parents: 40331
diff changeset
1582
5ed9e7521ec5 (replace_range): Use adjust_markers_for_replace
Richard M. Stallman <rms@gnu.org>
parents: 40331
diff changeset
1583 /* Adjust markers for the deletion and the insertion. */
23053
09d1521f9984 (replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents: 23028
diff changeset
1584 if (markers)
40923
5ed9e7521ec5 (replace_range): Use adjust_markers_for_replace
Richard M. Stallman <rms@gnu.org>
parents: 40331
diff changeset
1585 adjust_markers_for_replace (from, from_byte, nchars_del, nbytes_del,
5ed9e7521ec5 (replace_range): Use adjust_markers_for_replace
Richard M. Stallman <rms@gnu.org>
parents: 40331
diff changeset
1586 inschars, outgoing_insbytes);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1587
22896
6d368c9a689e (replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents: 22876
diff changeset
1588 offset_intervals (current_buffer, from, inschars - nchars_del);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1589
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1590 /* Get the intervals for the part of the string we are inserting--
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1591 not including the combined-before bytes. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1592 intervals = STRING_INTERVALS (new);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1593 /* Insert those intervals. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1594 graft_intervals_into_buffer (intervals, from, inschars,
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1595 current_buffer, inherit);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1596
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1597 /* Relocate point as if it were a marker. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1598 if (from < PT)
23212
42fcd022d4e5 (adjust_after_replace): Don't add combining bytes to
Kenichi Handa <handa@m17n.org>
parents: 23203
diff changeset
1599 adjust_point ((from + inschars - (PT < to ? PT : to)),
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1600 (from_byte + outgoing_insbytes
23212
42fcd022d4e5 (adjust_after_replace): Don't add combining bytes to
Kenichi Handa <handa@m17n.org>
parents: 23203
diff changeset
1601 - (PT_BYTE < to_byte ? PT_BYTE : to_byte)));
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1602
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1603 if (outgoing_insbytes == 0)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1604 evaporate_overlays (from);
21135
42badfae3618 (insert_1_both, insert_from_string_1, insert_from_buffer_1):
Richard M. Stallman <rms@gnu.org>
parents: 21126
diff changeset
1605
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1606 CHECK_MARKERS ();
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1607
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1608 MODIFF++;
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1609 CHARS_MODIFF = MODIFF;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1610 UNGCPRO;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1611
22896
6d368c9a689e (replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents: 22876
diff changeset
1612 signal_after_change (from, nchars_del, GPT - from);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1613 update_compositions (from, GPT, CHECK_BORDER);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1614 }
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1615
57878
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1616 /* Replace the text from character positions FROM to TO with
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1617 the text in INS of length INSCHARS.
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1618 Keep the text properties that applied to the old characters
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1619 (extending them to all the new chars if there are more new chars).
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1620
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1621 Note that this does not yet handle markers quite right.
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1622
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1623 If MARKERS is nonzero, relocate markers.
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1624
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1625 Unlike most functions at this level, never call
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1626 prepare_to_modify_buffer and never call signal_after_change. */
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1627
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1628 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1629 replace_range_2 (EMACS_INT from, EMACS_INT from_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1630 EMACS_INT to, EMACS_INT to_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1631 char *ins, EMACS_INT inschars, EMACS_INT insbytes,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1632 int markers)
57878
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1633 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1634 EMACS_INT nbytes_del, nchars_del;
57878
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1635 Lisp_Object temp;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1636
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1637 CHECK_MARKERS ();
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1638
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1639 nchars_del = to - from;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1640 nbytes_del = to_byte - from_byte;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1641
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1642 if (nbytes_del <= 0 && insbytes == 0)
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1643 return;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1644
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1645 /* Make sure point-max won't overflow after this insertion. */
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1646 XSETINT (temp, Z_BYTE - nbytes_del + insbytes);
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1647 if (Z_BYTE - nbytes_del + insbytes != XINT (temp))
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1648 error ("Maximum buffer size exceeded");
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1649
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1650 /* Make sure the gap is somewhere in or next to what we are deleting. */
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1651 if (from > GPT)
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1652 gap_right (from, from_byte);
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1653 if (to < GPT)
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1654 gap_left (to, to_byte, 0);
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1655
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1656 GAP_SIZE += nbytes_del;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1657 ZV -= nchars_del;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1658 Z -= nchars_del;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1659 ZV_BYTE -= nbytes_del;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1660 Z_BYTE -= nbytes_del;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1661 GPT = from;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1662 GPT_BYTE = from_byte;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1663 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1664
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1665 if (GPT_BYTE < GPT)
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1666 abort ();
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1667
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1668 if (GPT - BEG < BEG_UNCHANGED)
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1669 BEG_UNCHANGED = GPT - BEG;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1670 if (Z - GPT < END_UNCHANGED)
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1671 END_UNCHANGED = Z - GPT;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1672
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1673 if (GAP_SIZE < insbytes)
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1674 make_gap (insbytes - GAP_SIZE);
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1675
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1676 /* Copy the replacement text into the buffer. */
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
1677 memcpy (GPT_ADDR, ins, insbytes);
57878
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1678
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1679 #ifdef BYTE_COMBINING_DEBUG
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1680 /* We have copied text into the gap, but we have not marked
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1681 it as part of the buffer. So we can use the old FROM and FROM_BYTE
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1682 here, for both the previous text and the following text.
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1683 Meanwhile, GPT_ADDR does point to
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1684 the text that has been stored by copy_text. */
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1685 if (count_combining_before (GPT_ADDR, insbytes, from, from_byte)
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1686 || count_combining_after (GPT_ADDR, insbytes, from, from_byte))
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1687 abort ();
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1688 #endif
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1689
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1690 GAP_SIZE -= insbytes;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1691 GPT += inschars;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1692 ZV += inschars;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1693 Z += inschars;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1694 GPT_BYTE += insbytes;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1695 ZV_BYTE += insbytes;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1696 Z_BYTE += insbytes;
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1697 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1698
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1699 if (GPT_BYTE < GPT)
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1700 abort ();
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1701
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1702 /* Adjust the overlay center as needed. This must be done after
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1703 adjusting the markers that bound the overlays. */
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1704 if (nchars_del != inschars)
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1705 {
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1706 adjust_overlays_for_insert (from, inschars);
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1707 adjust_overlays_for_delete (from + inschars, nchars_del);
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1708 }
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1709
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1710 /* Adjust markers for the deletion and the insertion. */
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1711 if (markers
59853
d0109a1ac6a0 (replace_range_2): Fix bugs in adjusting markers and point.
Kenichi Handa <handa@m17n.org>
parents: 58735
diff changeset
1712 && ! (nchars_del == 1 && inschars == 1 && nbytes_del == insbytes))
57878
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1713 adjust_markers_for_replace (from, from_byte, nchars_del, nbytes_del,
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1714 inschars, insbytes);
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1715
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1716 offset_intervals (current_buffer, from, inschars - nchars_del);
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1717
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1718 /* Relocate point as if it were a marker. */
59853
d0109a1ac6a0 (replace_range_2): Fix bugs in adjusting markers and point.
Kenichi Handa <handa@m17n.org>
parents: 58735
diff changeset
1719 if (from < PT && (nchars_del != inschars || nbytes_del != insbytes))
d0109a1ac6a0 (replace_range_2): Fix bugs in adjusting markers and point.
Kenichi Handa <handa@m17n.org>
parents: 58735
diff changeset
1720 {
d0109a1ac6a0 (replace_range_2): Fix bugs in adjusting markers and point.
Kenichi Handa <handa@m17n.org>
parents: 58735
diff changeset
1721 if (PT < to)
d0109a1ac6a0 (replace_range_2): Fix bugs in adjusting markers and point.
Kenichi Handa <handa@m17n.org>
parents: 58735
diff changeset
1722 /* PT was within the deleted text. Move it to FROM. */
d0109a1ac6a0 (replace_range_2): Fix bugs in adjusting markers and point.
Kenichi Handa <handa@m17n.org>
parents: 58735
diff changeset
1723 adjust_point (from - PT, from_byte - PT_BYTE);
d0109a1ac6a0 (replace_range_2): Fix bugs in adjusting markers and point.
Kenichi Handa <handa@m17n.org>
parents: 58735
diff changeset
1724 else
d0109a1ac6a0 (replace_range_2): Fix bugs in adjusting markers and point.
Kenichi Handa <handa@m17n.org>
parents: 58735
diff changeset
1725 adjust_point (inschars - nchars_del, insbytes - nbytes_del);
d0109a1ac6a0 (replace_range_2): Fix bugs in adjusting markers and point.
Kenichi Handa <handa@m17n.org>
parents: 58735
diff changeset
1726 }
57878
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1727
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1728 if (insbytes == 0)
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1729 evaporate_overlays (from);
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1730
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1731 CHECK_MARKERS ();
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1732
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1733 MODIFF++;
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1734 CHARS_MODIFF = MODIFF;
57878
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1735 }
57a0b4f747a1 (replace_range_2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 55740
diff changeset
1736
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1737 /* Delete characters in current buffer
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1738 from FROM up to (but not including) TO.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1739 If TO comes before FROM, we delete nothing. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1740
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1741 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1742 del_range (EMACS_INT from, EMACS_INT to)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1743 {
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1744 del_range_1 (from, to, 1, 0);
6126
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
1745 }
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
1746
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1747 /* Like del_range; PREPARE says whether to call prepare_to_modify_buffer.
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1748 RET_STRING says to return the deleted text. */
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1749
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1750 Lisp_Object
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1751 del_range_1 (EMACS_INT from, EMACS_INT to, int prepare, int ret_string)
6126
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
1752 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1753 EMACS_INT from_byte, to_byte;
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1754 Lisp_Object deletion;
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1755 struct gcpro gcpro1;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1756
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1757 /* Make args be valid */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1758 if (from < BEGV)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1759 from = BEGV;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1760 if (to > ZV)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1761 to = ZV;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1762
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1763 if (to <= from)
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1764 return Qnil;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1766 if (prepare)
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1767 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1768 EMACS_INT range_length = to - from;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1769 prepare_to_modify_buffer (from, to, &from);
36070
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1770 to = min (ZV, from + range_length);
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1771 }
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1772
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1773 from_byte = CHAR_TO_BYTE (from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1774 to_byte = CHAR_TO_BYTE (to);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1775
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1776 deletion = del_range_2 (from, from_byte, to, to_byte, ret_string);
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1777 GCPRO1(deletion);
24041
2eed8853546f (del_range_1): Call signal_after_change.
Kenichi Handa <handa@m17n.org>
parents: 23929
diff changeset
1778 signal_after_change (from, to - from, 0);
27664
c5c27d509bdf (del_range_1): Call update_compositions.
Kenichi Handa <handa@m17n.org>
parents: 26860
diff changeset
1779 update_compositions (from, from, CHECK_HEAD);
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1780 UNGCPRO;
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1781 return deletion;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1782 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1783
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1784 /* Like del_range_1 but args are byte positions, not char positions. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1785
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1786 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1787 del_range_byte (EMACS_INT from_byte, EMACS_INT to_byte, int prepare)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1788 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1789 EMACS_INT from, to;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1790
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1791 /* Make args be valid */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1792 if (from_byte < BEGV_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1793 from_byte = BEGV_BYTE;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1794 if (to_byte > ZV_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1795 to_byte = ZV_BYTE;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1796
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1797 if (to_byte <= from_byte)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1798 return;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1799
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1800 from = BYTE_TO_CHAR (from_byte);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1801 to = BYTE_TO_CHAR (to_byte);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1802
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1803 if (prepare)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1804 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1805 EMACS_INT old_from = from, old_to = Z - to;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1806 EMACS_INT range_length = to - from;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1807 prepare_to_modify_buffer (from, to, &from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1808 to = from + range_length;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1809
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1810 if (old_from != from)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1811 from_byte = CHAR_TO_BYTE (from);
36070
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1812 if (to > ZV)
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1813 {
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1814 to = ZV;
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1815 to_byte = ZV_BYTE;
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1816 }
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1817 else if (old_to == Z - to)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1818 to_byte = CHAR_TO_BYTE (to);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1819 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1820
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1821 del_range_2 (from, from_byte, to, to_byte, 0);
24041
2eed8853546f (del_range_1): Call signal_after_change.
Kenichi Handa <handa@m17n.org>
parents: 23929
diff changeset
1822 signal_after_change (from, to - from, 0);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1823 update_compositions (from, from, CHECK_HEAD);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1824 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1825
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1826 /* Like del_range_1, but positions are specified both as charpos
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1827 and bytepos. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1828
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1829 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1830 del_range_both (EMACS_INT from, EMACS_INT from_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1831 EMACS_INT to, EMACS_INT to_byte, int prepare)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1832 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1833 /* Make args be valid */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1834 if (from_byte < BEGV_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1835 from_byte = BEGV_BYTE;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1836 if (to_byte > ZV_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1837 to_byte = ZV_BYTE;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1838
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1839 if (to_byte <= from_byte)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1840 return;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1841
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1842 if (from < BEGV)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1843 from = BEGV;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1844 if (to > ZV)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1845 to = ZV;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1846
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1847 if (prepare)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1848 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1849 EMACS_INT old_from = from, old_to = Z - to;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1850 EMACS_INT range_length = to - from;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1851 prepare_to_modify_buffer (from, to, &from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1852 to = from + range_length;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1853
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1854 if (old_from != from)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1855 from_byte = CHAR_TO_BYTE (from);
36070
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1856 if (to > ZV)
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1857 {
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1858 to = ZV;
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1859 to_byte = ZV_BYTE;
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1860 }
2a1ee495a194 (del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents: 34974
diff changeset
1861 else if (old_to == Z - to)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1862 to_byte = CHAR_TO_BYTE (to);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1863 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1864
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1865 del_range_2 (from, from_byte, to, to_byte, 0);
24041
2eed8853546f (del_range_1): Call signal_after_change.
Kenichi Handa <handa@m17n.org>
parents: 23929
diff changeset
1866 signal_after_change (from, to - from, 0);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1867 update_compositions (from, from, CHECK_HEAD);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1868 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1869
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1870 /* Delete a range of text, specified both as character positions
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1871 and byte positions. FROM and TO are character positions,
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1872 while FROM_BYTE and TO_BYTE are byte positions.
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1873 If RET_STRING is true, the deleted area is returned as a string. */
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1874
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1875 Lisp_Object
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1876 del_range_2 (EMACS_INT from, EMACS_INT from_byte,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1877 EMACS_INT to, EMACS_INT to_byte, int ret_string)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1878 {
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1879 register EMACS_INT nbytes_del, nchars_del;
21236
90e90245e679 (insert_1_both, insert_from_string_1, insert_from_buffer_1):
Richard M. Stallman <rms@gnu.org>
parents: 21228
diff changeset
1880 Lisp_Object deletion;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1881
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1882 CHECK_MARKERS ();
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1883
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1884 nchars_del = to - from;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1885 nbytes_del = to_byte - from_byte;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1886
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1887 /* Make sure the gap is somewhere in or next to what we are deleting. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1888 if (from > GPT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1889 gap_right (from, from_byte);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1890 if (to < GPT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1891 gap_left (to, to_byte, 0);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1892
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1893 #ifdef BYTE_COMBINING_DEBUG
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1894 if (count_combining_before (BUF_BYTE_ADDRESS (current_buffer, to_byte),
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1895 Z_BYTE - to_byte, from, from_byte))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1896 abort ();
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1897 #endif
21236
90e90245e679 (insert_1_both, insert_from_string_1, insert_from_buffer_1):
Richard M. Stallman <rms@gnu.org>
parents: 21228
diff changeset
1898
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1899 if (ret_string || ! EQ (current_buffer->undo_list, Qt))
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1900 deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1);
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1901 else
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1902 deletion = Qnil;
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1903
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1904 /* Relocate all markers pointing into the new, larger gap
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1905 to point at the end of the text before the gap.
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1906 Do this before recording the deletion,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1907 so that undo handles this after reinserting the text. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1908 adjust_markers_for_delete (from, from_byte, to, to_byte);
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1909
22107
5507c26908af (insert_1_both, insert_from_string_1, replace_range)
Richard M. Stallman <rms@gnu.org>
parents: 21817
diff changeset
1910 if (! EQ (current_buffer->undo_list, Qt))
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1911 record_delete (from, deletion);
1247
8dce1588f37f (del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents: 484
diff changeset
1912 MODIFF++;
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1913 CHARS_MODIFF = MODIFF;
1247
8dce1588f37f (del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents: 484
diff changeset
1914
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1915 /* Relocate point as if it were a marker. */
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
1916 if (from < PT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1917 adjust_point (from - (PT < to ? PT : to),
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1918 from_byte - (PT_BYTE < to_byte ? PT_BYTE : to_byte));
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1919
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1920 offset_intervals (current_buffer, from, - nchars_del);
1963
05dd60327cc4 (del_range): Update point before offset_intervals.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
1921
11474
510885be2758 (insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
1922 /* Adjust the overlay center as needed. This must be done after
12617
2a4a6e89558d Comment change.
Karl Heuer <kwzh@gnu.org>
parents: 12244
diff changeset
1923 adjusting the markers that bound the overlays. */
21191
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1924 adjust_overlays_for_delete (from, nchars_del);
11474
510885be2758 (insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
1925
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1926 GAP_SIZE += nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1927 ZV_BYTE -= nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1928 Z_BYTE -= nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1929 ZV -= nchars_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1930 Z -= nchars_del;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1931 GPT = from;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1932 GPT_BYTE = from_byte;
102185
d6a2f8a116ac (del_range_2): Don't modify gap contents when called
Andreas Schwab <schwab@suse.de>
parents: 100951
diff changeset
1933 if (GAP_SIZE > 0 && !current_buffer->text->inhibit_shrinking)
d6a2f8a116ac (del_range_2): Don't modify gap contents when called
Andreas Schwab <schwab@suse.de>
parents: 100951
diff changeset
1934 /* Put an anchor, unless called from decode_coding_object which
d6a2f8a116ac (del_range_2): Don't modify gap contents when called
Andreas Schwab <schwab@suse.de>
parents: 100951
diff changeset
1935 needs to access the previous gap contents. */
d6a2f8a116ac (del_range_2): Don't modify gap contents when called
Andreas Schwab <schwab@suse.de>
parents: 100951
diff changeset
1936 *(GPT_ADDR) = 0;
21191
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1937
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1938 if (GPT_BYTE < GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1939 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1940
25373
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1941 if (GPT - BEG < BEG_UNCHANGED)
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1942 BEG_UNCHANGED = GPT - BEG;
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1943 if (Z - GPT < END_UNCHANGED)
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1944 END_UNCHANGED = Z - GPT;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1945
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1946 CHECK_MARKERS ();
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1947
8840
7242936baf4e (del_range_1): Call evaporate_overlays after deleting text.
Karl Heuer <kwzh@gnu.org>
parents: 8687
diff changeset
1948 evaporate_overlays (from);
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1949
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1950 return deletion;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1951 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1952
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1953 /* Call this if you're about to change the region of BUFFER from
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1954 character positions START to END. This checks the read-only
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1955 properties of the region, calls the necessary modification hooks,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1956 and warns the next redisplay that it should pay attention to that
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1957 area.
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1958
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1959 If PRESERVE_CHARS_MODIFF is non-zero, do not update CHARS_MODIFF.
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1960 Otherwise set CHARS_MODIFF to the new value of MODIFF. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1961
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1962 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1963 modify_region (struct buffer *buffer, EMACS_INT start, EMACS_INT end,
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
1964 int preserve_chars_modiff)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1965 {
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1966 struct buffer *old_buffer = current_buffer;
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1967
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1968 if (buffer != old_buffer)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1969 set_buffer_internal (buffer);
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1970
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1971 prepare_to_modify_buffer (start, end, NULL);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1972
25373
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1973 BUF_COMPUTE_UNCHANGED (buffer, start - 1, end);
5237
378540cf056f (del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents: 5168
diff changeset
1974
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
1975 if (MODIFF <= SAVE_MODIFF)
5237
378540cf056f (del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents: 5168
diff changeset
1976 record_first_change ();
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1977 MODIFF++;
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1978 if (! preserve_chars_modiff)
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 71640
diff changeset
1979 CHARS_MODIFF = MODIFF;
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1980
10564
69cae342dde5 (modify_region): Clear point_before_scroll field.
Richard M. Stallman <rms@gnu.org>
parents: 10391
diff changeset
1981 buffer->point_before_scroll = Qnil;
69cae342dde5 (modify_region): Clear point_before_scroll field.
Richard M. Stallman <rms@gnu.org>
parents: 10391
diff changeset
1982
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1983 if (buffer != old_buffer)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1984 set_buffer_internal (old_buffer);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1985 }
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1986
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1987 /* Check that it is okay to modify the buffer between START and END,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1988 which are char positions.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1989
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
1990 Run the before-change-function, if any. If intervals are in use,
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
1991 verify that the text to be modified is not read-only, and call
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1992 any modification properties the text may have.
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1993
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1994 If PRESERVE_PTR is nonzero, we relocate *PRESERVE_PTR
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1995 by holding its value temporarily in a marker. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1996
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1997 void
102759
ec3ec7f5d54e * editfns.c (general_insert_function): Adjust to insdel.c changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102753
diff changeset
1998 prepare_to_modify_buffer (EMACS_INT start, EMACS_INT end,
ec3ec7f5d54e * editfns.c (general_insert_function): Adjust to insdel.c changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102753
diff changeset
1999 EMACS_INT *preserve_ptr)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2000 {
71640
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2001 struct buffer *base_buffer;
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2002
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
2003 if (!NILP (current_buffer->read_only))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2004 Fbarf_if_buffer_read_only ();
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2005
25025
be2881684382 (prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents: 24342
diff changeset
2006 /* Let redisplay consider other windows than selected_window
be2881684382 (prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents: 24342
diff changeset
2007 if modifying another buffer. */
be2881684382 (prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents: 24342
diff changeset
2008 if (XBUFFER (XWINDOW (selected_window)->buffer) != current_buffer)
be2881684382 (prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents: 24342
diff changeset
2009 ++windows_or_buffers_changed;
be2881684382 (prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents: 24342
diff changeset
2010
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
2011 if (BUF_INTERVALS (current_buffer) != 0)
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2012 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2013 if (preserve_ptr)
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2014 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2015 Lisp_Object preserve_marker;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2016 struct gcpro gcpro1;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2017 preserve_marker = Fcopy_marker (make_number (*preserve_ptr), Qnil);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2018 GCPRO1 (preserve_marker);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2019 verify_interval_modification (current_buffer, start, end);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2020 *preserve_ptr = marker_position (preserve_marker);
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
2021 unchain_marker (XMARKER (preserve_marker));
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2022 UNGCPRO;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2023 }
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2024 else
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2025 verify_interval_modification (current_buffer, start, end);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2026 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2027
71640
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2028 /* For indirect buffers, use the base buffer to check clashes. */
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2029 if (current_buffer->base_buffer != 0)
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2030 base_buffer = current_buffer->base_buffer;
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2031 else
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2032 base_buffer = current_buffer;
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2033
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2034 #ifdef CLASH_DETECTION
71640
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2035 if (!NILP (base_buffer->file_truename)
12621
e71c530e5ae5 (prepare_to_modify_buffer): Don't lock the file
Richard M. Stallman <rms@gnu.org>
parents: 12617
diff changeset
2036 /* Make binding buffer-file-name to nil effective. */
71640
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2037 && !NILP (base_buffer->filename)
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
2038 && SAVE_MODIFF >= MODIFF)
71640
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2039 lock_file (base_buffer->file_truename);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2040 #else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2041 /* At least warn if this file has changed on disk since it was visited. */
71640
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2042 if (!NILP (base_buffer->filename)
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
2043 && SAVE_MODIFF >= MODIFF
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
2044 && NILP (Fverify_visited_file_modtime (Fcurrent_buffer ()))
71640
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2045 && !NILP (Ffile_exists_p (base_buffer->filename)))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2046 call1 (intern ("ask-user-about-supersession-threat"),
71640
5cdc253a3479 * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2047 base_buffer->filename);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2048 #endif /* not CLASH_DETECTION */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2049
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2050 signal_before_change (start, end, preserve_ptr);
2050
3ffbf2314074 (prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 2019
diff changeset
2051
9409
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
2052 if (current_buffer->newline_cache)
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
2053 invalidate_region_cache (current_buffer,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
2054 current_buffer->newline_cache,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
2055 start - BEG, Z - end);
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
2056 if (current_buffer->width_run_cache)
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
2057 invalidate_region_cache (current_buffer,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
2058 current_buffer->width_run_cache,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
2059 start - BEG, Z - end);
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
2060
2050
3ffbf2314074 (prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 2019
diff changeset
2061 Vdeactivate_mark = Qt;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2062 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2063
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2064 /* These macros work with an argument named `preserve_ptr'
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2065 and a local variable named `preserve_marker'. */
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2066
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2067 #define PRESERVE_VALUE \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2068 if (preserve_ptr && NILP (preserve_marker)) \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2069 preserve_marker = Fcopy_marker (make_number (*preserve_ptr), Qnil)
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2070
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2071 #define RESTORE_VALUE \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2072 if (! NILP (preserve_marker)) \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2073 { \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2074 *preserve_ptr = marker_position (preserve_marker); \
51671
54f0e48f9f7d (check_markers, adjust_markers_for_delete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49600
diff changeset
2075 unchain_marker (XMARKER (preserve_marker)); \
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2076 }
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2077
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2078 #define PRESERVE_START_END \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2079 if (NILP (start_marker)) \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2080 start_marker = Fcopy_marker (start, Qnil); \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2081 if (NILP (end_marker)) \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2082 end_marker = Fcopy_marker (end, Qnil);
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2083
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2084 #define FETCH_START \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2085 (! NILP (start_marker) ? Fmarker_position (start_marker) : start)
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2086
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2087 #define FETCH_END \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2088 (! NILP (end_marker) ? Fmarker_position (end_marker) : end)
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2089
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2090 /* Set a variable to nil if an error occurred.
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2091 Don't change the variable if there was no error.
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2092 VAL is a cons-cell (VARIABLE . NO-ERROR-FLAG).
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2093 VARIABLE is the variable to maybe set to nil.
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2094 NO-ERROR-FLAG is nil if there was an error,
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2095 anything else meaning no error (so this function does nothing). */
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2096 Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 108890
diff changeset
2097 reset_var_on_error (Lisp_Object val)
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2098 {
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2099 if (NILP (XCDR (val)))
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2100 Fset (XCAR (val), Qnil);
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2101 return Qnil;
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2102 }
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2103
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
2104 /* Signal a change to the buffer immediately before it happens.
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2105 START_INT and END_INT are the bounds of the text to be changed.
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2106
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2107 If PRESERVE_PTR is nonzero, we relocate *PRESERVE_PTR
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2108 by holding its value temporarily in a marker. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2109
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
2110 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
2111 signal_before_change (EMACS_INT start_int, EMACS_INT end_int,
102759
ec3ec7f5d54e * editfns.c (general_insert_function): Adjust to insdel.c changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102753
diff changeset
2112 EMACS_INT *preserve_ptr)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2113 {
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
2114 Lisp_Object start, end;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2115 Lisp_Object start_marker, end_marker;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2116 Lisp_Object preserve_marker;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2117 struct gcpro gcpro1, gcpro2, gcpro3;
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2118 int count = SPECPDL_INDEX ();
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
2119
23400
8a51c720f8d7 (signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents: 23340
diff changeset
2120 if (inhibit_modification_hooks)
8a51c720f8d7 (signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents: 23340
diff changeset
2121 return;
8a51c720f8d7 (signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents: 23340
diff changeset
2122
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
2123 start = make_number (start_int);
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
2124 end = make_number (end_int);
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2125 preserve_marker = Qnil;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2126 start_marker = Qnil;
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2127 end_marker = Qnil;
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2128 GCPRO3 (preserve_marker, start_marker, end_marker);
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
2129
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2130 specbind (Qinhibit_modification_hooks, Qt);
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2131
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2132 /* If buffer is unmodified, run a special hook for that case. */
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
2133 if (SAVE_MODIFF >= MODIFF
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
2134 && !NILP (Vfirst_change_hook)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
2135 && !NILP (Vrun_hooks))
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2136 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2137 PRESERVE_VALUE;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2138 PRESERVE_START_END;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2139 call1 (Vrun_hooks, Qfirst_change_hook);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2140 }
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
2141
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2142 /* Now run the before-change-functions if any. */
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2143 if (!NILP (Vbefore_change_functions))
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2144 {
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2145 Lisp_Object args[3];
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2146 Lisp_Object rvoe_arg = Fcons (Qbefore_change_functions, Qnil);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2147
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2148 PRESERVE_VALUE;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2149 PRESERVE_START_END;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2150
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2151 /* Mark before-change-functions to be reset to nil in case of error. */
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2152 record_unwind_protect (reset_var_on_error, rvoe_arg);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2153
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2154 /* Actually run the hook functions. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2155 args[0] = Qbefore_change_functions;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2156 args[1] = FETCH_START;
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2157 args[2] = FETCH_END;
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2158 Frun_hook_with_args (3, args);
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2159
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2160 /* There was no error: unarm the reset_on_error. */
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2161 XSETCDR (rvoe_arg, Qt);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2162 }
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
2163
51837
87ec975874ab (signal_before_change, signal_after_change): Use new type for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51671
diff changeset
2164 if (current_buffer->overlays_before || current_buffer->overlays_after)
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2165 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2166 PRESERVE_VALUE;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2167 report_overlay_modification (FETCH_START, FETCH_END, 0,
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2168 FETCH_START, FETCH_END, Qnil);
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2169 }
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2170
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2171 if (! NILP (start_marker))
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2172 free_marker (start_marker);
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2173 if (! NILP (end_marker))
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2174 free_marker (end_marker);
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2175 RESTORE_VALUE;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2176 UNGCPRO;
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2177
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2178 unbind_to (count, Qnil);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2179 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2180
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
2181 /* Signal a change immediately after it happens.
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2182 CHARPOS is the character position of the start of the changed text.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2183 LENDEL is the number of characters of the text before the change.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2184 (Not the whole buffer; just the part that was changed.)
15123
d6106d651a71 (signal_after_change): Correct the arg to report_overlay_modification.
Richard M. Stallman <rms@gnu.org>
parents: 14479
diff changeset
2185 LENINS is the number of characters in that part of the text
d6106d651a71 (signal_after_change): Correct the arg to report_overlay_modification.
Richard M. Stallman <rms@gnu.org>
parents: 14479
diff changeset
2186 after the change. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2187
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
2188 void
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
2189 signal_after_change (EMACS_INT charpos, EMACS_INT lendel, EMACS_INT lenins)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2190 {
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2191 int count = SPECPDL_INDEX ();
23400
8a51c720f8d7 (signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents: 23340
diff changeset
2192 if (inhibit_modification_hooks)
8a51c720f8d7 (signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents: 23340
diff changeset
2193 return;
8a51c720f8d7 (signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents: 23340
diff changeset
2194
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2195 /* If we are deferring calls to the after-change functions
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2196 and there are no before-change functions,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2197 just record the args that we were going to use. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2198 if (! NILP (Vcombine_after_change_calls)
29379
ad856393dab2 (signal_before_change, signal_after_change): Don't check
Dave Love <fx@gnu.org>
parents: 29065
diff changeset
2199 && NILP (Vbefore_change_functions)
51837
87ec975874ab (signal_before_change, signal_after_change): Use new type for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51671
diff changeset
2200 && !current_buffer->overlays_before
87ec975874ab (signal_before_change, signal_after_change): Use new type for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51671
diff changeset
2201 && !current_buffer->overlays_after)
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2202 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2203 Lisp_Object elt;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2204
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2205 if (!NILP (combine_after_change_list)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2206 && current_buffer != XBUFFER (combine_after_change_buffer))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2207 Fcombine_after_change_execute ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2208
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2209 elt = Fcons (make_number (charpos - BEG),
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2210 Fcons (make_number (Z - (charpos - lendel + lenins)),
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2211 Fcons (make_number (lenins - lendel), Qnil)));
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2212 combine_after_change_list
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2213 = Fcons (elt, combine_after_change_list);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2214 combine_after_change_buffer = Fcurrent_buffer ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2215
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2216 return;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2217 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2218
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48090
diff changeset
2219 if (!NILP (combine_after_change_list))
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2220 Fcombine_after_change_execute ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2221
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2222 specbind (Qinhibit_modification_hooks, Qt);
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2223
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2224 if (!NILP (Vafter_change_functions))
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2225 {
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2226 Lisp_Object args[4];
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2227 Lisp_Object rvoe_arg = Fcons (Qafter_change_functions, Qnil);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2228
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2229 /* Mark after-change-functions to be reset to nil in case of error. */
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2230 record_unwind_protect (reset_var_on_error, rvoe_arg);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2231
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2232 /* Actually run the hook functions. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2233 args[0] = Qafter_change_functions;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2234 XSETFASTINT (args[1], charpos);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2235 XSETFASTINT (args[2], charpos + lenins);
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2236 XSETFASTINT (args[3], lendel);
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2237 Frun_hook_with_args (4, args);
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2238
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2239 /* There was no error: unarm the reset_on_error. */
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2240 XSETCDR (rvoe_arg, Qt);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2241 }
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
2242
51837
87ec975874ab (signal_before_change, signal_after_change): Use new type for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51671
diff changeset
2243 if (current_buffer->overlays_before || current_buffer->overlays_after)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2244 report_overlay_modification (make_number (charpos),
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2245 make_number (charpos + lenins),
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
2246 1,
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2247 make_number (charpos),
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2248 make_number (charpos + lenins),
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
2249 make_number (lendel));
13026
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
2250
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
2251 /* After an insertion, call the text properties
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
2252 insert-behind-hooks or insert-in-front-hooks. */
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
2253 if (lendel == 0)
21526
fff9425b9230 (signal_after_change): Fix mixing of Lisp_Object and
Andreas Schwab <schwab@suse.de>
parents: 21514
diff changeset
2254 report_interval_modification (make_number (charpos),
fff9425b9230 (signal_after_change): Fix mixing of Lisp_Object and
Andreas Schwab <schwab@suse.de>
parents: 21514
diff changeset
2255 make_number (charpos + lenins));
78602
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2256
b86e73d7c635 (reset_var_on_error): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
2257 unbind_to (count, Qnil);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2258 }
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2259
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2260 Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 108890
diff changeset
2261 Fcombine_after_change_execute_1 (Lisp_Object val)
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2262 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2263 Vcombine_after_change_calls = val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2264 return val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2265 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2266
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2267 DEFUN ("combine-after-change-execute", Fcombine_after_change_execute,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40923
diff changeset
2268 Scombine_after_change_execute, 0, 0, 0,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40923
diff changeset
2269 doc: /* This function is for use internally in `combine-after-change-calls'. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2270 (void)
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2271 {
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45818
diff changeset
2272 int count = SPECPDL_INDEX ();
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
2273 EMACS_INT beg, end, change;
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
2274 EMACS_INT begpos, endpos;
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2275 Lisp_Object tail;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2276
23646
595d8a052b71 (Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents: 23600
diff changeset
2277 if (NILP (combine_after_change_list))
595d8a052b71 (Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents: 23600
diff changeset
2278 return Qnil;
595d8a052b71 (Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents: 23600
diff changeset
2279
76240
f8d6199cdf00 (Fcombine_after_change_execute): Return nil if
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
2280 /* It is rare for combine_after_change_buffer to be invalid, but
f8d6199cdf00 (Fcombine_after_change_execute): Return nil if
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
2281 possible. It can happen when combine-after-change-calls is
f8d6199cdf00 (Fcombine_after_change_execute): Return nil if
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
2282 non-nil, and insertion calls a file handler (e.g. through
f8d6199cdf00 (Fcombine_after_change_execute): Return nil if
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
2283 lock_file) which scribbles into a temp file -- cyd */
f8d6199cdf00 (Fcombine_after_change_execute): Return nil if
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
2284 if (!BUFFERP (combine_after_change_buffer)
f8d6199cdf00 (Fcombine_after_change_execute): Return nil if
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
2285 || NILP (XBUFFER (combine_after_change_buffer)->name))
f8d6199cdf00 (Fcombine_after_change_execute): Return nil if
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
2286 {
f8d6199cdf00 (Fcombine_after_change_execute): Return nil if
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
2287 combine_after_change_list = Qnil;
f8d6199cdf00 (Fcombine_after_change_execute): Return nil if
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
2288 return Qnil;
f8d6199cdf00 (Fcombine_after_change_execute): Return nil if
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
2289 }
f8d6199cdf00 (Fcombine_after_change_execute): Return nil if
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
2290
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2291 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2292
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2293 Fset_buffer (combine_after_change_buffer);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2294
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2295 /* # chars unchanged at beginning of buffer. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2296 beg = Z - BEG;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2297 /* # chars unchanged at end of buffer. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2298 end = beg;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2299 /* Total amount of insertion (negative for deletion). */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2300 change = 0;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2301
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2302 /* Scan the various individual changes,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2303 accumulating the range info in BEG, END and CHANGE. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2304 for (tail = combine_after_change_list; CONSP (tail);
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2305 tail = XCDR (tail))
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2306 {
17373
4f931fa4c0be (Fcombine_after_change_execute): Fix Lisp_Object/integer confusion.
Karl Heuer <kwzh@gnu.org>
parents: 17034
diff changeset
2307 Lisp_Object elt;
102753
b6116169967f * insdel.c (move_gap, move_gap_both, gap_left, gap_right)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102185
diff changeset
2308 EMACS_INT thisbeg, thisend, thischange;
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2309
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2310 /* Extract the info from the next element. */
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2311 elt = XCAR (tail);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2312 if (! CONSP (elt))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2313 continue;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2314 thisbeg = XINT (XCAR (elt));
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2315
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2316 elt = XCDR (elt);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2317 if (! CONSP (elt))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2318 continue;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2319 thisend = XINT (XCAR (elt));
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2320
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2321 elt = XCDR (elt);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2322 if (! CONSP (elt))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2323 continue;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2324 thischange = XINT (XCAR (elt));
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2325
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2326 /* Merge this range into the accumulated range. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2327 change += thischange;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2328 if (thisbeg < beg)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2329 beg = thisbeg;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2330 if (thisend < end)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2331 end = thisend;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2332 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2333
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2334 /* Get the current start and end positions of the range
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2335 that was changed. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2336 begpos = BEG + beg;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2337 endpos = Z - end;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48090
diff changeset
2338
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2339 /* We are about to handle these, so discard them. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2340 combine_after_change_list = Qnil;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2341
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2342 /* Now run the after-change functions for real.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2343 Turn off the flag that defers them. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2344 record_unwind_protect (Fcombine_after_change_execute_1,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2345 Vcombine_after_change_calls);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2346 signal_after_change (begpos, endpos - begpos - change, endpos - begpos);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2347 update_compositions (begpos, endpos, CHECK_ALL);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2348
23646
595d8a052b71 (Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents: 23600
diff changeset
2349 return unbind_to (count, Qnil);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2350 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2351
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21323
diff changeset
2352 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 108890
diff changeset
2353 syms_of_insdel (void)
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2354 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2355 staticpro (&combine_after_change_list);
64616
bd56ec807f9a (syms_of_insdel): staticpro combine_after_change_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 64084
diff changeset
2356 staticpro (&combine_after_change_buffer);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2357 combine_after_change_list = Qnil;
23646
595d8a052b71 (Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents: 23600
diff changeset
2358 combine_after_change_buffer = Qnil;
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2359
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
2360 DEFVAR_BOOL ("check-markers-debug-flag", &check_markers_debug_flag,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40923
diff changeset
2361 doc: /* Non-nil means enable debugging checks for invalid marker positions. */);
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
2362 check_markers_debug_flag = 0;
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2363 DEFVAR_LISP ("combine-after-change-calls", &Vcombine_after_change_calls,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40923
diff changeset
2364 doc: /* Used internally by the `combine-after-change-calls' macro. */);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2365 Vcombine_after_change_calls = Qnil;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2366
25579
5662c18836ae (syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents: 25509
diff changeset
2367 DEFVAR_BOOL ("inhibit-modification-hooks", &inhibit_modification_hooks,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40923
diff changeset
2368 doc: /* Non-nil means don't run any of the hooks that respond to buffer changes.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40923
diff changeset
2369 This affects `before-change-functions' and `after-change-functions',
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40923
diff changeset
2370 as well as hooks attached to text properties and overlays. */);
25579
5662c18836ae (syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents: 25509
diff changeset
2371 inhibit_modification_hooks = 0;
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2372 Qinhibit_modification_hooks = intern_c_string ("inhibit-modification-hooks");
39244
796039437953 (Qinhibit_modification_hooks): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37760
diff changeset
2373 staticpro (&Qinhibit_modification_hooks);
25579
5662c18836ae (syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents: 25509
diff changeset
2374
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2375 defsubr (&Scombine_after_change_execute);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2376 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51837
diff changeset
2377
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51837
diff changeset
2378 /* arch-tag: 9b34b886-47d7-465e-a234-299af411b23d
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51837
diff changeset
2379 (do not change this comment) */