annotate src/undo.c @ 66571:beb6b92a94f6

(mh-compose-space-does-completion-flag, mh-signature-separator-flag) (mh-interpret-number-as-range-flag, mh-adaptive-cmd-note-flag): Use "Non-nil means" instead of "On means" to remain checkdoc clean and consistent with Emacs. I raised this issue with the Emacs developers and Stallman agrees that "On means" should be allowed in custom docstrings but that this change requires thought and should wait until after the Emacs 22 release.
author Bill Wohler <wohler@newt.com>
date Mon, 31 Oct 2005 01:37:30 +0000
parents a0d1312ede66
children 7a9d49053af3 2d92f5c9d6ae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* undo handling for GNU Emacs.
64770
a0d1312ede66 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64084
diff changeset
2 Copyright (C) 1990, 1993, 1994, 2000, 2002, 2003, 2004,
a0d1312ede66 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64084
diff changeset
3 2005 Free Software Foundation, Inc.
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12649
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12649
diff changeset
8 it under the terms of the GNU General Public License as published by
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12649
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12649
diff changeset
10 any later version.
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12649
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12649
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12649
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12649
diff changeset
15 GNU General Public License for more details.
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12649
diff changeset
16
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12649
diff changeset
17 You should have received a copy of the GNU General Public License
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12649
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
64084
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 60000
diff changeset
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 60000
diff changeset
20 Boston, MA 02110-1301, USA. */
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 3719
diff changeset
23 #include <config.h>
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include "lisp.h"
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include "buffer.h"
6180
d369907be635 (record_delete): Save last_point_position in the undo record, rather than the
Karl Heuer <kwzh@gnu.org>
parents: 5762
diff changeset
26 #include "commands.h"
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
28 /* Limits controlling how much undo information to keep. */
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
29
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
30 EMACS_INT undo_limit;
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
31 EMACS_INT undo_strong_limit;
59069
27371673eba8 (Vundo_outer_limit): Replaces undo_outer_limit. Uses changed.
Richard M. Stallman <rms@gnu.org>
parents: 59048
diff changeset
32
27371673eba8 (Vundo_outer_limit): Replaces undo_outer_limit. Uses changed.
Richard M. Stallman <rms@gnu.org>
parents: 59048
diff changeset
33 Lisp_Object Vundo_outer_limit;
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
34
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
35 /* Function to call when undo_outer_limit is exceeded. */
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
36
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
37 Lisp_Object Vundo_outer_limit_function;
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
38
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 /* Last buffer for which undo information was recorded. */
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 Lisp_Object last_undo_buffer;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41
3696
aa9310f06c0f (syms_of_undo): Set up Qinhibit_read_only.
Richard M. Stallman <rms@gnu.org>
parents: 3687
diff changeset
42 Lisp_Object Qinhibit_read_only;
aa9310f06c0f (syms_of_undo): Set up Qinhibit_read_only.
Richard M. Stallman <rms@gnu.org>
parents: 3687
diff changeset
43
59832
ff1b86883ff8 (Qapply): New lisp var.
Kim F. Storm <storm@cua.dk>
parents: 59793
diff changeset
44 /* Marker for function call undo list elements. */
ff1b86883ff8 (Qapply): New lisp var.
Kim F. Storm <storm@cua.dk>
parents: 59793
diff changeset
45
ff1b86883ff8 (Qapply): New lisp var.
Kim F. Storm <storm@cua.dk>
parents: 59793
diff changeset
46 Lisp_Object Qapply;
ff1b86883ff8 (Qapply): New lisp var.
Kim F. Storm <storm@cua.dk>
parents: 59793
diff changeset
47
6254
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
48 /* The first time a command records something for undo.
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
49 it also allocates the undo-boundary object
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
50 which will be added to the list at the end of the command.
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
51 This ensures we can't run out of space while trying to make
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
52 an undo-boundary. */
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
53 Lisp_Object pending_boundary;
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
54
44391
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
55 /* Record point as it was at beginning of this command (if necessary)
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
56 And prepare the undo info for recording a change.
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
57 PT is the position of point that will naturally occur as a result of the
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
58 undo record that will be added just after this command terminates. */
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
59
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
60 static void
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
61 record_point (pt)
48326
eb8f8ac018c9 (record_point):
Dave Love <fx@gnu.org>
parents: 46370
diff changeset
62 int pt;
44391
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
63 {
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
64 int at_boundary;
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
65
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
66 /* Allocate a cons cell to be the undo boundary after this command. */
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
67 if (NILP (pending_boundary))
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
68 pending_boundary = Fcons (Qnil, Qnil);
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
69
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
70 if (!BUFFERP (last_undo_buffer)
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
71 || current_buffer != XBUFFER (last_undo_buffer))
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
72 Fundo_boundary ();
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
73 XSETBUFFER (last_undo_buffer, current_buffer);
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
74
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
75 if (CONSP (current_buffer->undo_list))
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
76 {
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
77 /* Set AT_BOUNDARY to 1 only when we have nothing other than
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
78 marker adjustment before undo boundary. */
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
79
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
80 Lisp_Object tail = current_buffer->undo_list, elt;
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
81
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
82 while (1)
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
83 {
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
84 if (NILP (tail))
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
85 elt = Qnil;
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
86 else
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
87 elt = XCAR (tail);
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
88 if (NILP (elt) || ! (CONSP (elt) && MARKERP (XCAR (elt))))
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
89 break;
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
90 tail = XCDR (tail);
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
91 }
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
92 at_boundary = NILP (elt);
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
93 }
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
94 else
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
95 at_boundary = 1;
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
96
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
97 if (MODIFF <= SAVE_MODIFF)
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
98 record_first_change ();
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
99
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48326
diff changeset
100 /* If we are just after an undo boundary, and
44391
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
101 point wasn't at start of deleted range, record where it was. */
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
102 if (at_boundary
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
103 && last_point_position != pt
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
104 /* If we're called from batch mode, this could be nil. */
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
105 && BUFFERP (last_point_position_buffer)
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
106 && current_buffer == XBUFFER (last_point_position_buffer))
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
107 current_buffer->undo_list
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
108 = Fcons (make_number (last_point_position), current_buffer->undo_list);
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
109 }
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
110
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 /* Record an insertion that just happened or is about to happen,
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 for LENGTH characters at position BEG.
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 (It is possible to record an insertion before or after the fact
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 because we don't need to record the contents.) */
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115
20372
259194f66d40 (record_change, record_first_change,
Kenichi Handa <handa@m17n.org>
parents: 17447
diff changeset
116 void
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 record_insert (beg, length)
12088
f0c9d02fb6e4 (record_insert): Change args to be ints, not Lisp_Objects.
Karl Heuer <kwzh@gnu.org>
parents: 10300
diff changeset
118 int beg, length;
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 {
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 Lisp_Object lbeg, lend;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121
2194
886a69457557 (record_property_change, record_delete, record_insert):
Richard M. Stallman <rms@gnu.org>
parents: 1968
diff changeset
122 if (EQ (current_buffer->undo_list, Qt))
886a69457557 (record_property_change, record_delete, record_insert):
Richard M. Stallman <rms@gnu.org>
parents: 1968
diff changeset
123 return;
886a69457557 (record_property_change, record_delete, record_insert):
Richard M. Stallman <rms@gnu.org>
parents: 1968
diff changeset
124
44391
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
125 record_point (beg);
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 /* If this is following another insertion and consecutive with it
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 in the buffer, combine the two. */
9108
c0287cefc0f8 (record_insert, truncate_undo_list, Fprimitive_undo): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 7671
diff changeset
129 if (CONSP (current_buffer->undo_list))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 {
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 Lisp_Object elt;
25663
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
132 elt = XCAR (current_buffer->undo_list);
9108
c0287cefc0f8 (record_insert, truncate_undo_list, Fprimitive_undo): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 7671
diff changeset
133 if (CONSP (elt)
25663
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
134 && INTEGERP (XCAR (elt))
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
135 && INTEGERP (XCDR (elt))
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
136 && XINT (XCDR (elt)) == beg)
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 {
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39798
diff changeset
138 XSETCDR (elt, make_number (beg + length));
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 return;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142
12088
f0c9d02fb6e4 (record_insert): Change args to be ints, not Lisp_Objects.
Karl Heuer <kwzh@gnu.org>
parents: 10300
diff changeset
143 XSETFASTINT (lbeg, beg);
f0c9d02fb6e4 (record_insert): Change args to be ints, not Lisp_Objects.
Karl Heuer <kwzh@gnu.org>
parents: 10300
diff changeset
144 XSETINT (lend, beg + length);
1524
91454bf15944 * undo.c (record_insert): Use accessors on BEG and LENGTH.
Jim Blandy <jimb@redhat.com>
parents: 1320
diff changeset
145 current_buffer->undo_list = Fcons (Fcons (lbeg, lend),
91454bf15944 * undo.c (record_insert): Use accessors on BEG and LENGTH.
Jim Blandy <jimb@redhat.com>
parents: 1320
diff changeset
146 current_buffer->undo_list);
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 /* Record that a deletion is about to take place,
21237
c5a8ee5b9b39 (record_delete): Replace LENGTH arg with STRING.
Richard M. Stallman <rms@gnu.org>
parents: 20373
diff changeset
150 of the characters in STRING, at location BEG. */
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151
20373
b6c215dec8c8 (record_delete, record_marker_adjustment): Declare them as void.
Kenichi Handa <handa@m17n.org>
parents: 20372
diff changeset
152 void
21237
c5a8ee5b9b39 (record_delete): Replace LENGTH arg with STRING.
Richard M. Stallman <rms@gnu.org>
parents: 20373
diff changeset
153 record_delete (beg, string)
c5a8ee5b9b39 (record_delete): Replace LENGTH arg with STRING.
Richard M. Stallman <rms@gnu.org>
parents: 20373
diff changeset
154 int beg;
c5a8ee5b9b39 (record_delete): Replace LENGTH arg with STRING.
Richard M. Stallman <rms@gnu.org>
parents: 20373
diff changeset
155 Lisp_Object string;
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 {
21237
c5a8ee5b9b39 (record_delete): Replace LENGTH arg with STRING.
Richard M. Stallman <rms@gnu.org>
parents: 20373
diff changeset
157 Lisp_Object sbeg;
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158
2194
886a69457557 (record_property_change, record_delete, record_insert):
Richard M. Stallman <rms@gnu.org>
parents: 1968
diff changeset
159 if (EQ (current_buffer->undo_list, Qt))
886a69457557 (record_property_change, record_delete, record_insert):
Richard M. Stallman <rms@gnu.org>
parents: 1968
diff changeset
160 return;
886a69457557 (record_property_change, record_delete, record_insert):
Richard M. Stallman <rms@gnu.org>
parents: 1968
diff changeset
161
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46285
diff changeset
162 if (PT == beg + SCHARS (string))
21272
b1bc69132f55 (record_delete): Record last_point_position when there's
Kenichi Handa <handa@m17n.org>
parents: 21237
diff changeset
163 {
44391
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
164 XSETINT (sbeg, -beg);
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
165 record_point (PT);
21272
b1bc69132f55 (record_delete): Record last_point_position when there's
Kenichi Handa <handa@m17n.org>
parents: 21237
diff changeset
166 }
b1bc69132f55 (record_delete): Record last_point_position when there's
Kenichi Handa <handa@m17n.org>
parents: 21237
diff changeset
167 else
44391
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
168 {
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
169 XSETFASTINT (sbeg, beg);
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
170 record_point (beg);
0abb30765386 (record_point): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40656
diff changeset
171 }
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
172
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 current_buffer->undo_list
21237
c5a8ee5b9b39 (record_delete): Replace LENGTH arg with STRING.
Richard M. Stallman <rms@gnu.org>
parents: 20373
diff changeset
174 = Fcons (Fcons (string, sbeg), current_buffer->undo_list);
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176
14480
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
177 /* Record the fact that MARKER is about to be adjusted by ADJUSTMENT.
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
178 This is done only when a marker points within text being deleted,
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
179 because that's the only case where an automatic marker adjustment
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
180 won't be inverted automatically by undoing the buffer modification. */
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
181
20373
b6c215dec8c8 (record_delete, record_marker_adjustment): Declare them as void.
Kenichi Handa <handa@m17n.org>
parents: 20372
diff changeset
182 void
14480
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
183 record_marker_adjustment (marker, adjustment)
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
184 Lisp_Object marker;
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
185 int adjustment;
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
186 {
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
187 if (EQ (current_buffer->undo_list, Qt))
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
188 return;
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
189
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
190 /* Allocate a cons cell to be the undo boundary after this command. */
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
191 if (NILP (pending_boundary))
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
192 pending_boundary = Fcons (Qnil, Qnil);
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
193
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48326
diff changeset
194 if (!BUFFERP (last_undo_buffer)
30961
78ce106d272e (record_first_change, record_marker_adjustment): Don'use
Gerd Moellmann <gerd@gnu.org>
parents: 30682
diff changeset
195 || current_buffer != XBUFFER (last_undo_buffer))
14480
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
196 Fundo_boundary ();
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
197 XSETBUFFER (last_undo_buffer, current_buffer);
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
198
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
199 current_buffer->undo_list
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
200 = Fcons (Fcons (marker, make_number (adjustment)),
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
201 current_buffer->undo_list);
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
202 }
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
203
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 /* Record that a replacement is about to take place,
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 for LENGTH characters at location BEG.
21237
c5a8ee5b9b39 (record_delete): Replace LENGTH arg with STRING.
Richard M. Stallman <rms@gnu.org>
parents: 20373
diff changeset
206 The replacement must not change the number of characters. */
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207
20373
b6c215dec8c8 (record_delete, record_marker_adjustment): Declare them as void.
Kenichi Handa <handa@m17n.org>
parents: 20372
diff changeset
208 void
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 record_change (beg, length)
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 int beg, length;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 {
21237
c5a8ee5b9b39 (record_delete): Replace LENGTH arg with STRING.
Richard M. Stallman <rms@gnu.org>
parents: 20373
diff changeset
212 record_delete (beg, make_buffer_string (beg, beg + length, 1));
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 record_insert (beg, length);
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 /* Record that an unmodified buffer is about to be changed.
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 Record the file modification date so that when undoing this entry
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 we can tell whether it is obsolete because the file was saved again. */
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219
20372
259194f66d40 (record_change, record_first_change,
Kenichi Handa <handa@m17n.org>
parents: 17447
diff changeset
220 void
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 record_first_change ()
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 {
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 Lisp_Object high, low;
10300
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
224 struct buffer *base_buffer = current_buffer;
5762
099857a46901 (record_first_change): Check for buffer-undo-list = t.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
225
099857a46901 (record_first_change): Check for buffer-undo-list = t.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
226 if (EQ (current_buffer->undo_list, Qt))
099857a46901 (record_first_change): Check for buffer-undo-list = t.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
227 return;
099857a46901 (record_first_change): Check for buffer-undo-list = t.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
228
30961
78ce106d272e (record_first_change, record_marker_adjustment): Don'use
Gerd Moellmann <gerd@gnu.org>
parents: 30682
diff changeset
229 if (!BUFFERP (last_undo_buffer)
78ce106d272e (record_first_change, record_marker_adjustment): Don'use
Gerd Moellmann <gerd@gnu.org>
parents: 30682
diff changeset
230 || current_buffer != XBUFFER (last_undo_buffer))
5762
099857a46901 (record_first_change): Check for buffer-undo-list = t.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
231 Fundo_boundary ();
9281
05b2bd5d5559 (record_insert, record_delete, record_first_change, record_property_change):
Karl Heuer <kwzh@gnu.org>
parents: 9108
diff changeset
232 XSETBUFFER (last_undo_buffer, current_buffer);
5762
099857a46901 (record_first_change): Check for buffer-undo-list = t.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
233
10300
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
234 if (base_buffer->base_buffer)
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
235 base_buffer = base_buffer->base_buffer;
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
236
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
237 XSETFASTINT (high, (base_buffer->modtime >> 16) & 0xffff);
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
238 XSETFASTINT (low, base_buffer->modtime & 0xffff);
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 current_buffer->undo_list = Fcons (Fcons (Qt, Fcons (high, low)), current_buffer->undo_list);
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241
1968
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
242 /* Record a change in property PROP (whose old value was VAL)
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
243 for LENGTH characters starting at position BEG in BUFFER. */
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
244
20372
259194f66d40 (record_change, record_first_change,
Kenichi Handa <handa@m17n.org>
parents: 17447
diff changeset
245 void
1968
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
246 record_property_change (beg, length, prop, value, buffer)
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
247 int beg, length;
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
248 Lisp_Object prop, value, buffer;
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
249 {
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
250 Lisp_Object lbeg, lend, entry;
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
251 struct buffer *obuf = current_buffer;
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
252 int boundary = 0;
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
253
5762
099857a46901 (record_first_change): Check for buffer-undo-list = t.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
254 if (EQ (XBUFFER (buffer)->undo_list, Qt))
2194
886a69457557 (record_property_change, record_delete, record_insert):
Richard M. Stallman <rms@gnu.org>
parents: 1968
diff changeset
255 return;
886a69457557 (record_property_change, record_delete, record_insert):
Richard M. Stallman <rms@gnu.org>
parents: 1968
diff changeset
256
6254
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
257 /* Allocate a cons cell to be the undo boundary after this command. */
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
258 if (NILP (pending_boundary))
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
259 pending_boundary = Fcons (Qnil, Qnil);
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
260
1968
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
261 if (!EQ (buffer, last_undo_buffer))
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
262 boundary = 1;
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
263 last_undo_buffer = buffer;
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
264
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
265 /* Switch temporarily to the buffer that was changed. */
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
266 current_buffer = XBUFFER (buffer);
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
267
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
268 if (boundary)
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
269 Fundo_boundary ();
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
270
10300
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
271 if (MODIFF <= SAVE_MODIFF)
1968
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
272 record_first_change ();
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
273
9281
05b2bd5d5559 (record_insert, record_delete, record_first_change, record_property_change):
Karl Heuer <kwzh@gnu.org>
parents: 9108
diff changeset
274 XSETINT (lbeg, beg);
05b2bd5d5559 (record_insert, record_delete, record_first_change, record_property_change):
Karl Heuer <kwzh@gnu.org>
parents: 9108
diff changeset
275 XSETINT (lend, beg + length);
1968
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
276 entry = Fcons (Qnil, Fcons (prop, Fcons (value, Fcons (lbeg, lend))));
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
277 current_buffer->undo_list = Fcons (entry, current_buffer->undo_list);
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
278
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
279 current_buffer = obuf;
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
280 }
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
281
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 DEFUN ("undo-boundary", Fundo_boundary, Sundo_boundary, 0, 0, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
283 doc: /* Mark a boundary between units of undo.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
284 An undo command will stop at this point,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
285 but another undo command will undo to the previous boundary. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
286 ()
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 {
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 Lisp_Object tem;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 if (EQ (current_buffer->undo_list, Qt))
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 return Qnil;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 tem = Fcar (current_buffer->undo_list);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 241
diff changeset
292 if (!NILP (tem))
6254
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
293 {
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
294 /* One way or another, cons nil onto the front of the undo list. */
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
295 if (!NILP (pending_boundary))
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
296 {
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
297 /* If we have preallocated the cons cell to use here,
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
298 use that one. */
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39798
diff changeset
299 XSETCDR (pending_boundary, current_buffer->undo_list);
6254
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
300 current_buffer->undo_list = pending_boundary;
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
301 pending_boundary = Qnil;
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
302 }
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
303 else
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
304 current_buffer->undo_list = Fcons (Qnil, current_buffer->undo_list);
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
305 }
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 return Qnil;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 /* At garbage collection time, make an undo list shorter at the end,
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
310 returning the truncated list. How this is done depends on the
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
311 variables undo-limit, undo-strong-limit and undo-outer-limit.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
312 In some cases this works by calling undo-outer-limit-function. */
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
314 void
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
315 truncate_undo_list (b)
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
316 struct buffer *b;
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 {
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
318 Lisp_Object list;
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 Lisp_Object prev, next, last_boundary;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 int size_so_far = 0;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
322 /* Make sure that calling undo-outer-limit-function
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
323 won't cause another GC. */
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
324 int count = inhibit_garbage_collection ();
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
325
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
326 /* Make the buffer current to get its local values of variables such
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
327 as undo_limit. Also so that Vundo_outer_limit_function can
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
328 tell which buffer to operate on. */
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
329 record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ());
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
330 set_buffer_internal (b);
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
331
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
332 list = b->undo_list;
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
333
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 prev = Qnil;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 next = list;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 last_boundary = Qnil;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
338 /* If the first element is an undo boundary, skip past it. */
25663
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
339 if (CONSP (next) && NILP (XCAR (next)))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 {
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341 /* Add in the space occupied by this element and its chain link. */
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 size_so_far += sizeof (struct Lisp_Cons);
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 /* Advance to next element. */
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 prev = next;
25663
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
346 next = XCDR (next);
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 }
55839
9e7829a684df (truncate_undo_list): New arg LIMITSIZE.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
348
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
349 /* Always preserve at least the most recent undo record
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
350 unless it is really horribly big.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
351
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
352 Skip, skip, skip the undo, skip, skip, skip the undo,
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
353 Skip, skip, skip the undo, skip to the undo bound'ry. */
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
354
25663
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
355 while (CONSP (next) && ! NILP (XCAR (next)))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 {
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 Lisp_Object elt;
25663
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
358 elt = XCAR (next);
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 /* Add in the space occupied by this element and its chain link. */
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 size_so_far += sizeof (struct Lisp_Cons);
9108
c0287cefc0f8 (record_insert, truncate_undo_list, Fprimitive_undo): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 7671
diff changeset
362 if (CONSP (elt))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 {
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 size_so_far += sizeof (struct Lisp_Cons);
25663
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
365 if (STRINGP (XCAR (elt)))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 size_so_far += (sizeof (struct Lisp_String) - 1
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46285
diff changeset
367 + SCHARS (XCAR (elt)));
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 /* Advance to next element. */
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 prev = next;
25663
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
372 next = XCDR (next);
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 }
55839
9e7829a684df (truncate_undo_list): New arg LIMITSIZE.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
374
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
375 /* If by the first boundary we have already passed undo_outer_limit,
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
376 we're heading for memory full, so offer to clear out the list. */
59069
27371673eba8 (Vundo_outer_limit): Replaces undo_outer_limit. Uses changed.
Richard M. Stallman <rms@gnu.org>
parents: 59048
diff changeset
377 if (INTEGERP (Vundo_outer_limit)
27371673eba8 (Vundo_outer_limit): Replaces undo_outer_limit. Uses changed.
Richard M. Stallman <rms@gnu.org>
parents: 59048
diff changeset
378 && size_so_far > XINT (Vundo_outer_limit)
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
379 && !NILP (Vundo_outer_limit_function))
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
380 {
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
381 Lisp_Object temp = last_undo_buffer;
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
382
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
383 /* Normally the function this calls is undo-outer-limit-truncate. */
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
384 if (! NILP (call1 (Vundo_outer_limit_function,
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
385 make_number (size_so_far))))
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
386 {
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
387 /* The function is responsible for making
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
388 any desired changes in buffer-undo-list. */
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
389 unbind_to (count, Qnil);
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
390 return;
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
391 }
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
392 /* That function probably used the minibuffer, and if so, that
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
393 changed last_undo_buffer. Change it back so that we don't
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
394 force next change to make an undo boundary here. */
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
395 last_undo_buffer = temp;
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
396 }
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
397
9108
c0287cefc0f8 (record_insert, truncate_undo_list, Fprimitive_undo): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 7671
diff changeset
398 if (CONSP (next))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 last_boundary = prev;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
401 /* Keep additional undo data, if it fits in the limits. */
9108
c0287cefc0f8 (record_insert, truncate_undo_list, Fprimitive_undo): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 7671
diff changeset
402 while (CONSP (next))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 {
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 Lisp_Object elt;
25663
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
405 elt = XCAR (next);
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 /* When we get to a boundary, decide whether to truncate
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
408 either before or after it. The lower threshold, undo_limit,
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 tells us to truncate after it. If its size pushes past
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
410 the higher threshold undo_strong_limit, we truncate before it. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 241
diff changeset
411 if (NILP (elt))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 {
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
413 if (size_so_far > undo_strong_limit)
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 break;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 last_boundary = prev;
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
416 if (size_so_far > undo_limit)
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 break;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 /* Add in the space occupied by this element and its chain link. */
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 size_so_far += sizeof (struct Lisp_Cons);
9108
c0287cefc0f8 (record_insert, truncate_undo_list, Fprimitive_undo): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 7671
diff changeset
422 if (CONSP (elt))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 {
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 size_so_far += sizeof (struct Lisp_Cons);
25663
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
425 if (STRINGP (XCAR (elt)))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 size_so_far += (sizeof (struct Lisp_String) - 1
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46285
diff changeset
427 + SCHARS (XCAR (elt)));
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 /* Advance to next element. */
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 prev = next;
25663
a5eaace0fa01 Use XCAR and XCDR instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 21514
diff changeset
432 next = XCDR (next);
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 /* If we scanned the whole list, it is short enough; don't change it. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 241
diff changeset
436 if (NILP (next))
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
437 ;
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 /* Truncate at the boundary where we decided to truncate. */
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
439 else if (!NILP (last_boundary))
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
440 XSETCDR (last_boundary, Qnil);
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
441 /* There's nothing we decided to keep, so clear it out. */
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 else
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
443 b->undo_list = Qnil;
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
444
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
445 unbind_to (count, Qnil);
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 DEFUN ("primitive-undo", Fprimitive_undo, Sprimitive_undo, 2, 2, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
449 doc: /* Undo N records from the front of the list LIST.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
450 Return what remains of the list. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
451 (n, list)
3719
695181e4bc20 (Fprimitive_undo): Rename arg to N to avoid conflict.
Richard M. Stallman <rms@gnu.org>
parents: 3696
diff changeset
452 Lisp_Object n, list;
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 {
7671
31d444fcae24 (Fprimitive_undo): GCPRO next and list.
Karl Heuer <kwzh@gnu.org>
parents: 7395
diff changeset
454 struct gcpro gcpro1, gcpro2;
31d444fcae24 (Fprimitive_undo): GCPRO next and list.
Karl Heuer <kwzh@gnu.org>
parents: 7395
diff changeset
455 Lisp_Object next;
46285
3f111801efb4 Rename BINDING_STACK_SIZE to SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 44391
diff changeset
456 int count = SPECPDL_INDEX ();
7671
31d444fcae24 (Fprimitive_undo): GCPRO next and list.
Karl Heuer <kwzh@gnu.org>
parents: 7395
diff changeset
457 register int arg;
59970
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
458 Lisp_Object oldlist;
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
459 int did_apply = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48326
diff changeset
460
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 #if 0 /* This is a good feature, but would make undo-start
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 unable to do what is expected. */
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 Lisp_Object tem;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 /* If the head of the list is a boundary, it is the boundary
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 preceding this command. Get rid of it and don't count it. */
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 tem = Fcar (list);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 241
diff changeset
468 if (NILP (tem))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 list = Fcdr (list);
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 #endif
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40123
diff changeset
472 CHECK_NUMBER (n);
7671
31d444fcae24 (Fprimitive_undo): GCPRO next and list.
Karl Heuer <kwzh@gnu.org>
parents: 7395
diff changeset
473 arg = XINT (n);
31d444fcae24 (Fprimitive_undo): GCPRO next and list.
Karl Heuer <kwzh@gnu.org>
parents: 7395
diff changeset
474 next = Qnil;
31d444fcae24 (Fprimitive_undo): GCPRO next and list.
Karl Heuer <kwzh@gnu.org>
parents: 7395
diff changeset
475 GCPRO2 (next, list);
59970
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
476 /* I don't think we need to gcpro oldlist, as we use it only
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
477 to check for EQ. ++kfs */
7671
31d444fcae24 (Fprimitive_undo): GCPRO next and list.
Karl Heuer <kwzh@gnu.org>
parents: 7395
diff changeset
478
37527
d585b711c8d2 (Fprimitive_undo): In a writable buffer, enable undoing
Gerd Moellmann <gerd@gnu.org>
parents: 34965
diff changeset
479 /* In a writable buffer, enable undoing read-only text that is so
d585b711c8d2 (Fprimitive_undo): In a writable buffer, enable undoing
Gerd Moellmann <gerd@gnu.org>
parents: 34965
diff changeset
480 because of text properties. */
d585b711c8d2 (Fprimitive_undo): In a writable buffer, enable undoing
Gerd Moellmann <gerd@gnu.org>
parents: 34965
diff changeset
481 if (NILP (current_buffer->read_only))
3696
aa9310f06c0f (syms_of_undo): Set up Qinhibit_read_only.
Richard M. Stallman <rms@gnu.org>
parents: 3687
diff changeset
482 specbind (Qinhibit_read_only, Qt);
aa9310f06c0f (syms_of_undo): Set up Qinhibit_read_only.
Richard M. Stallman <rms@gnu.org>
parents: 3687
diff changeset
483
34794
12ca043196d7 (Fprimitive_undo): Bind `inhibit-point-motion-hooks' to t.
Gerd Moellmann <gerd@gnu.org>
parents: 34169
diff changeset
484 /* Don't let `intangible' properties interfere with undo. */
12ca043196d7 (Fprimitive_undo): Bind `inhibit-point-motion-hooks' to t.
Gerd Moellmann <gerd@gnu.org>
parents: 34169
diff changeset
485 specbind (Qinhibit_point_motion_hooks, Qt);
12ca043196d7 (Fprimitive_undo): Bind `inhibit-point-motion-hooks' to t.
Gerd Moellmann <gerd@gnu.org>
parents: 34169
diff changeset
486
59970
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
487 oldlist = current_buffer->undo_list;
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
488
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 while (arg > 0)
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 {
39798
d54a90934144 (Fprimitive_undo): Use XCAR/XCDR.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37527
diff changeset
491 while (CONSP (list))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 {
39798
d54a90934144 (Fprimitive_undo): Use XCAR/XCDR.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37527
diff changeset
493 next = XCAR (list);
d54a90934144 (Fprimitive_undo): Use XCAR/XCDR.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37527
diff changeset
494 list = XCDR (list);
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
495 /* Exit inner loop at undo boundary. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 241
diff changeset
496 if (NILP (next))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 break;
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
498 /* Handle an integer by setting point to that value. */
9108
c0287cefc0f8 (record_insert, truncate_undo_list, Fprimitive_undo): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 7671
diff changeset
499 if (INTEGERP (next))
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
500 SET_PT (clip_to_bounds (BEGV, XINT (next), ZV));
9108
c0287cefc0f8 (record_insert, truncate_undo_list, Fprimitive_undo): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 7671
diff changeset
501 else if (CONSP (next))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 {
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
503 Lisp_Object car, cdr;
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
504
39798
d54a90934144 (Fprimitive_undo): Use XCAR/XCDR.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37527
diff changeset
505 car = XCAR (next);
d54a90934144 (Fprimitive_undo): Use XCAR/XCDR.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37527
diff changeset
506 cdr = XCDR (next);
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
507 if (EQ (car, Qt))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 {
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
509 /* Element (t high . low) records previous modtime. */
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
510 Lisp_Object high, low;
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
511 int mod_time;
10300
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
512 struct buffer *base_buffer = current_buffer;
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
513
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
514 high = Fcar (cdr);
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
515 low = Fcdr (cdr);
3687
54381151027d (record_delete): Always use XFASTINT on sbeg.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
516 mod_time = (XFASTINT (high) << 16) + XFASTINT (low);
10300
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
517
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
518 if (current_buffer->base_buffer)
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
519 base_buffer = current_buffer->base_buffer;
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
520
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
521 /* If this records an obsolete save
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
522 (not matching the actual disk file)
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
523 then don't mark unmodified. */
10300
323ad02feb1e (Fprimitive_undo): Use base buffer's modtime field.
Richard M. Stallman <rms@gnu.org>
parents: 9322
diff changeset
524 if (mod_time != base_buffer->modtime)
12649
43434a01d442 (Fprimitive_undo): Don't end inner loop
Richard M. Stallman <rms@gnu.org>
parents: 12088
diff changeset
525 continue;
1598
3e9dadf2d13c * undo.c (Fprimitive_undo): Remove whitespace in front of #ifdef
Jim Blandy <jimb@redhat.com>
parents: 1524
diff changeset
526 #ifdef CLASH_DETECTION
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
527 Funlock_buffer ();
1598
3e9dadf2d13c * undo.c (Fprimitive_undo): Remove whitespace in front of #ifdef
Jim Blandy <jimb@redhat.com>
parents: 1524
diff changeset
528 #endif /* CLASH_DETECTION */
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
529 Fset_buffer_modified_p (Qnil);
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
530 }
3687
54381151027d (record_delete): Always use XFASTINT on sbeg.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
531 else if (EQ (car, Qnil))
1968
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
532 {
59777
06bae5eee9dc (Fprimitive_undo): Handle (FUNNAME . ARGS) by calling FUNNAME.
Richard M. Stallman <rms@gnu.org>
parents: 59069
diff changeset
533 /* Element (nil PROP VAL BEG . END) is property change. */
1968
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
534 Lisp_Object beg, end, prop, val;
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
535
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
536 prop = Fcar (cdr);
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
537 cdr = Fcdr (cdr);
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
538 val = Fcar (cdr);
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
539 cdr = Fcdr (cdr);
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
540 beg = Fcar (cdr);
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
541 end = Fcdr (cdr);
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
542
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
543 Fput_text_property (beg, end, prop, val, Qnil);
de0a0ed7318e (record_property_change): Typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 1598
diff changeset
544 }
9108
c0287cefc0f8 (record_insert, truncate_undo_list, Fprimitive_undo): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 7671
diff changeset
545 else if (INTEGERP (car) && INTEGERP (cdr))
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
546 {
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
547 /* Element (BEG . END) means range was inserted. */
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
548
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
549 if (XINT (car) < BEGV
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
550 || XINT (cdr) > ZV)
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 error ("Changes to be undone are outside visible portion of buffer");
1320
c45c4e0cae7d (Fprimitive_undo): When undoing an insert, move point and then delete.
Richard M. Stallman <rms@gnu.org>
parents: 1248
diff changeset
552 /* Set point first thing, so that undoing this undo
c45c4e0cae7d (Fprimitive_undo): When undoing an insert, move point and then delete.
Richard M. Stallman <rms@gnu.org>
parents: 1248
diff changeset
553 does not send point back to where it is now. */
c45c4e0cae7d (Fprimitive_undo): When undoing an insert, move point and then delete.
Richard M. Stallman <rms@gnu.org>
parents: 1248
diff changeset
554 Fgoto_char (car);
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
555 Fdelete_region (car, cdr);
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 }
59832
ff1b86883ff8 (Qapply): New lisp var.
Kim F. Storm <storm@cua.dk>
parents: 59793
diff changeset
557 else if (EQ (car, Qapply))
59777
06bae5eee9dc (Fprimitive_undo): Handle (FUNNAME . ARGS) by calling FUNNAME.
Richard M. Stallman <rms@gnu.org>
parents: 59069
diff changeset
558 {
59992
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
559 /* Element (apply FUN . ARGS) means call FUN to undo. */
60000
bbd61dfcbd2c (Fprimitive_undo): Check that undo function does not switch buffer.
Kim F. Storm <storm@cua.dk>
parents: 59992
diff changeset
560 struct buffer *save_buffer = current_buffer;
bbd61dfcbd2c (Fprimitive_undo): Check that undo function does not switch buffer.
Kim F. Storm <storm@cua.dk>
parents: 59992
diff changeset
561
59832
ff1b86883ff8 (Qapply): New lisp var.
Kim F. Storm <storm@cua.dk>
parents: 59793
diff changeset
562 car = Fcar (cdr);
59992
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
563 cdr = Fcdr (cdr);
59832
ff1b86883ff8 (Qapply): New lisp var.
Kim F. Storm <storm@cua.dk>
parents: 59793
diff changeset
564 if (INTEGERP (car))
ff1b86883ff8 (Qapply): New lisp var.
Kim F. Storm <storm@cua.dk>
parents: 59793
diff changeset
565 {
59992
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
566 /* Long format: (apply DELTA START END FUN . ARGS). */
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
567 Lisp_Object delta = car;
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
568 Lisp_Object start = Fcar (cdr);
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
569 Lisp_Object end = Fcar (Fcdr (cdr));
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
570 Lisp_Object start_mark = Fcopy_marker (start, Qnil);
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
571 Lisp_Object end_mark = Fcopy_marker (end, Qt);
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
572
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
573 cdr = Fcdr (Fcdr (cdr));
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
574 apply1 (Fcar (cdr), Fcdr (cdr));
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
575
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
576 /* Check that the function did what the entry said it
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
577 would do. */
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
578 if (!EQ (start, Fmarker_position (start_mark))
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
579 || (XINT (delta) + XINT (end)
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
580 != marker_position (end_mark)))
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
581 error ("Changes to be undone by function different than announced");
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
582 Fset_marker (start_mark, Qnil, Qnil);
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
583 Fset_marker (end_mark, Qnil, Qnil);
59832
ff1b86883ff8 (Qapply): New lisp var.
Kim F. Storm <storm@cua.dk>
parents: 59793
diff changeset
584 }
59992
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
585 else
6e49a3404a8e (Fprimitive_undo): Check veracity of delta,start,end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59970
diff changeset
586 apply1 (car, cdr);
60000
bbd61dfcbd2c (Fprimitive_undo): Check that undo function does not switch buffer.
Kim F. Storm <storm@cua.dk>
parents: 59992
diff changeset
587
bbd61dfcbd2c (Fprimitive_undo): Check that undo function does not switch buffer.
Kim F. Storm <storm@cua.dk>
parents: 59992
diff changeset
588 if (save_buffer != current_buffer)
bbd61dfcbd2c (Fprimitive_undo): Check that undo function does not switch buffer.
Kim F. Storm <storm@cua.dk>
parents: 59992
diff changeset
589 error ("Undo function switched buffer");
59970
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
590 did_apply = 1;
59777
06bae5eee9dc (Fprimitive_undo): Handle (FUNNAME . ARGS) by calling FUNNAME.
Richard M. Stallman <rms@gnu.org>
parents: 59069
diff changeset
591 }
9108
c0287cefc0f8 (record_insert, truncate_undo_list, Fprimitive_undo): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 7671
diff changeset
592 else if (STRINGP (car) && INTEGERP (cdr))
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 {
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
594 /* Element (STRING . POS) means STRING was deleted. */
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
595 Lisp_Object membuf;
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
596 int pos = XINT (cdr);
544
054dfe2f6327 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
597
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
598 membuf = car;
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
599 if (pos < 0)
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
600 {
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
601 if (-pos < BEGV || -pos > ZV)
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
602 error ("Changes to be undone are outside visible portion of buffer");
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
603 SET_PT (-pos);
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
604 Finsert (1, &membuf);
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
605 }
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
606 else
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
607 {
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
608 if (pos < BEGV || pos > ZV)
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
609 error ("Changes to be undone are outside visible portion of buffer");
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
610 SET_PT (pos);
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
611
17447
dc2cb454b330 (Fprimitive_undo): When inserting, always insert
Richard M. Stallman <rms@gnu.org>
parents: 16039
diff changeset
612 /* Now that we record marker adjustments
dc2cb454b330 (Fprimitive_undo): When inserting, always insert
Richard M. Stallman <rms@gnu.org>
parents: 16039
diff changeset
613 (caused by deletion) for undo,
dc2cb454b330 (Fprimitive_undo): When inserting, always insert
Richard M. Stallman <rms@gnu.org>
parents: 16039
diff changeset
614 we should always insert after markers,
dc2cb454b330 (Fprimitive_undo): When inserting, always insert
Richard M. Stallman <rms@gnu.org>
parents: 16039
diff changeset
615 so that undoing the marker adjustments
dc2cb454b330 (Fprimitive_undo): When inserting, always insert
Richard M. Stallman <rms@gnu.org>
parents: 16039
diff changeset
616 put the markers back in the right place. */
dc2cb454b330 (Fprimitive_undo): When inserting, always insert
Richard M. Stallman <rms@gnu.org>
parents: 16039
diff changeset
617 Finsert (1, &membuf);
1248
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
618 SET_PT (pos);
68c77558d34b (record_delete): Record pos before the deletion.
Richard M. Stallman <rms@gnu.org>
parents: 970
diff changeset
619 }
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 }
14480
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
621 else if (MARKERP (car) && INTEGERP (cdr))
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
622 {
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
623 /* (MARKER . INTEGER) means a marker MARKER
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
624 was adjusted by INTEGER. */
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
625 if (XMARKER (car)->buffer)
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
626 Fset_marker (car,
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
627 make_number (marker_position (car) - XINT (cdr)),
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
628 Fmarker_buffer (car));
50954bb380b6 (record_marker_adjustment): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
629 }
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 arg--;
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633 }
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634
59970
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
635
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
636 /* Make sure an apply entry produces at least one undo entry,
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
637 so the test in `undo' for continuing an undo series
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
638 will work right. */
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
639 if (did_apply
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
640 && EQ (oldlist, current_buffer->undo_list))
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
641 current_buffer->undo_list
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
642 = Fcons (list3 (Qapply, Qcdr, Qnil), current_buffer->undo_list);
cf4b913c7074 (Fprimitive_undo): Record max one dummmy apply element.
Kim F. Storm <storm@cua.dk>
parents: 59864
diff changeset
643
7671
31d444fcae24 (Fprimitive_undo): GCPRO next and list.
Karl Heuer <kwzh@gnu.org>
parents: 7395
diff changeset
644 UNGCPRO;
3696
aa9310f06c0f (syms_of_undo): Set up Qinhibit_read_only.
Richard M. Stallman <rms@gnu.org>
parents: 3687
diff changeset
645 return unbind_to (count, list);
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 }
59777
06bae5eee9dc (Fprimitive_undo): Handle (FUNNAME . ARGS) by calling FUNNAME.
Richard M. Stallman <rms@gnu.org>
parents: 59069
diff changeset
647
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21272
diff changeset
648 void
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 syms_of_undo ()
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
650 {
3696
aa9310f06c0f (syms_of_undo): Set up Qinhibit_read_only.
Richard M. Stallman <rms@gnu.org>
parents: 3687
diff changeset
651 Qinhibit_read_only = intern ("inhibit-read-only");
aa9310f06c0f (syms_of_undo): Set up Qinhibit_read_only.
Richard M. Stallman <rms@gnu.org>
parents: 3687
diff changeset
652 staticpro (&Qinhibit_read_only);
aa9310f06c0f (syms_of_undo): Set up Qinhibit_read_only.
Richard M. Stallman <rms@gnu.org>
parents: 3687
diff changeset
653
59832
ff1b86883ff8 (Qapply): New lisp var.
Kim F. Storm <storm@cua.dk>
parents: 59793
diff changeset
654 Qapply = intern ("apply");
ff1b86883ff8 (Qapply): New lisp var.
Kim F. Storm <storm@cua.dk>
parents: 59793
diff changeset
655 staticpro (&Qapply);
ff1b86883ff8 (Qapply): New lisp var.
Kim F. Storm <storm@cua.dk>
parents: 59793
diff changeset
656
6254
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
657 pending_boundary = Qnil;
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
658 staticpro (&pending_boundary);
a147d798ed0d (syms_of_undo): staticpro pending_boundary.
Richard M. Stallman <rms@gnu.org>
parents: 6180
diff changeset
659
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 defsubr (&Sprimitive_undo);
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 defsubr (&Sundo_boundary);
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
662
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
663 DEFVAR_INT ("undo-limit", &undo_limit,
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
664 doc: /* Keep no more undo information once it exceeds this size.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
665 This limit is applied when garbage collection happens.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
666 When a previous command increases the total undo list size past this
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
667 value, the earlier commands that came before it are forgotten.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
668
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
669 The size is counted as the number of bytes occupied,
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
670 which includes both saved text and other data. */);
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
671 undo_limit = 20000;
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
672
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
673 DEFVAR_INT ("undo-strong-limit", &undo_strong_limit,
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
674 doc: /* Don't keep more than this much size of undo information.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
675 This limit is applied when garbage collection happens.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
676 When a previous command increases the total undo list size past this
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
677 value, that command and the earlier commands that came before it are forgotten.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
678 However, the most recent buffer-modifying command's undo info
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
679 is never discarded for this reason.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
680
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
681 The size is counted as the number of bytes occupied,
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
682 which includes both saved text and other data. */);
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
683 undo_strong_limit = 30000;
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
684
59069
27371673eba8 (Vundo_outer_limit): Replaces undo_outer_limit. Uses changed.
Richard M. Stallman <rms@gnu.org>
parents: 59048
diff changeset
685 DEFVAR_LISP ("undo-outer-limit", &Vundo_outer_limit,
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
686 doc: /* Outer limit on size of undo information for one command.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
687 At garbage collection time, if the current command has produced
59791
fc2f566fb0fd (syms_of_undo) <undo-outer-limit>: Doc update.
Luc Teirlinck <teirllm@auburn.edu>
parents: 59777
diff changeset
688 more than this much undo information, it discards the info and displays
fc2f566fb0fd (syms_of_undo) <undo-outer-limit>: Doc update.
Luc Teirlinck <teirllm@auburn.edu>
parents: 59777
diff changeset
689 a warning. This is a last-ditch limit to prevent memory overflow.
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
690
59791
fc2f566fb0fd (syms_of_undo) <undo-outer-limit>: Doc update.
Luc Teirlinck <teirllm@auburn.edu>
parents: 59777
diff changeset
691 The size is counted as the number of bytes occupied, which includes
fc2f566fb0fd (syms_of_undo) <undo-outer-limit>: Doc update.
Luc Teirlinck <teirllm@auburn.edu>
parents: 59777
diff changeset
692 both saved text and other data. A value of nil means no limit. In
fc2f566fb0fd (syms_of_undo) <undo-outer-limit>: Doc update.
Luc Teirlinck <teirllm@auburn.edu>
parents: 59777
diff changeset
693 this case, accumulating one huge undo entry could make Emacs crash as
fc2f566fb0fd (syms_of_undo) <undo-outer-limit>: Doc update.
Luc Teirlinck <teirllm@auburn.edu>
parents: 59777
diff changeset
694 a result of memory overflow.
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
695
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
696 In fact, this calls the function which is the value of
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
697 `undo-outer-limit-function' with one argument, the size.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
698 The text above describes the behavior of the function
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
699 that variable usually specifies. */);
59793
6075baf26c0a (syms_of_undo) <undo-outer-limit>: Increase value to 3 Meg.
Luc Teirlinck <teirllm@auburn.edu>
parents: 59791
diff changeset
700 Vundo_outer_limit = make_number (3000000);
59048
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
701
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
702 DEFVAR_LISP ("undo-outer-limit-function", &Vundo_outer_limit_function,
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
703 doc: /* Function to call when an undo list exceeds `undo-outer-limit'.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
704 This function is called with one argument, the current undo list size
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
705 for the most recent command (since the last undo boundary).
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
706 If the function returns t, that means truncation has been fully handled.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
707 If it returns nil, the other forms of truncation are done.
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
708
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
709 Garbage collection is inhibited around the call to this function,
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
710 so it must make sure not to do a lot of consing. */);
2daab60919ed (truncate_undo_list): Return void.
Richard M. Stallman <rms@gnu.org>
parents: 55839
diff changeset
711 Vundo_outer_limit_function = Qnil;
223
dbc50aaa4f08 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
713
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
714 /* arch-tag: d546ee01-4aed-4ffb-bb8b-eefaae50d38a
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
715 (do not change this comment) */