annotate man/xemacs/undo.texi @ 4995:8431b52e43b1

Move the various map* functions to C; add #'map-into. src/ChangeLog addition: 2010-01-31 Aidan Kehoe <kehoea@parhasard.net> Move #'mapcar*, #'mapcan, #'mapc, #'map, #'mapl, #'mapcon to C; extend #'mapvector, #'mapconcat, #'mapcar to support more SEQUENCES; have them all error with circular lists. * fns.c (Fsubseq): Call CHECK_SEQUENCE here; Flength can return from the debugger if it errors with a non-sequence, leading to a crash in Fsubseq if sequence really is *not* a sequence. (mapcarX): Rename mapcar1 to mapcarX; rework it comprehensively to take an optional lisp output argument, and a varying number of sequences. Special-case a single list argument, as we used to, saving its elements in the stack space for the results before calling FUNCTION, so FUNCTION can corrupt the list all it wants. dead_wrong_type_argument() in the other cases if we encounter a non-cons where we expected a cons. (Fmapconcat): Accept further SEQUENCES after separator here. Special-case the idiom (mapconcat 'identity SEQUENCE), don't even funcall. (FmapcarX): Rename this from Fmapcar. Accept optional SEQUENCES. (Fmapvector): Accept optional SEQUENCES. (Fmapcan, Fmapc, Fmap): Move these here from cl-extra.el. (Fmap_into): New function, as specified by Common Lisp. (maplist): New function, the guts of the implementation of Fmaplist and Fmapl. (Fmaplist, Fmapl, Fmapcon): Move these from cl-extra.el. (syms_of_fns): Add a few needed symbols here, for the type tests used by #'map. Add the new subrs, with aliases for #'mapc-internal and #'mapcar. * general-slots.h: Declare Qcoerce here, now it's used in both indent.c and fns.c * indent.c (syms_of_indent): Qcoerce is gone from here. * lisp.h: Add ARRAYP(), SEQUENCEP(), and the corresponding CHECK_* macros. Declare Fbit_vector, Fstring, FmapcarX, now other files need to use them. * data.c (Farrayp, Fsequencep): Use ARRAYP and SEQUENCEP, just added to lisp.h * buffer.c (Fbuffer_list): Now Fmapcar has been renamed FmapcarX and takes MANY arguments, update this function to reflect that. lisp/ChangeLog addition: 2010-01-31 Aidan Kehoe <kehoea@parhasard.net> * cl.el (mapcar*): Delete; this is now in fns.c. Use #'mapc, not #'mapc-internal in a couple of places. * cl-macs.el (mapc, mapcar*, map): Delete these compiler macros now the corresponding functions are in fns.c; there's no run-time advantage to the macros. * cl-extra.el (coerce): Extend the possible conversions here a little; it's not remotely comprehensive yet, though it does allow running slightly more Common Lisp code than previously. (cl-mapcar-many): Delete. (map, maplist, mapc, mapl, mapcan, mapcon): Move these to fns.c. * bytecomp.el (byte-compile-maybe-mapc): Use #'mapc itself, not #'mapc-internal, now the former is in C. (mapcar*): Use #'byte-compile-maybe-mapc as this function's byte-compile method, now a #'mapc that can take more than one sequence is in C. * obsolete.el (cl-mapc): Move this compatibility alias to this file. * update-elc.el (do-autoload-commands): Use #'mapc, not #'mapc-internal here.
author Aidan Kehoe <kehoea@parhasard.net>
date Sun, 31 Jan 2010 18:29:48 +0000
parents 376386a54a3c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 @node Undo, Minibuffer, Basic, Top
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3 @chapter Undoing Changes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 @cindex undo
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 @cindex mistakes, correcting
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 Emacs allows you to undo all changes you make to the text of a buffer,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 up to a certain amount of change (8000 characters). Each buffer records
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 changes individually, and the undo command always applies to the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 current buffer. Usually each editing command makes a separate entry
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 in the undo records, but some commands such as @code{query-replace}
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12 make many entries, and very simple commands such as self-inserting
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 characters are often grouped to make undoing less tedious.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 @table @kbd
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 @item C-x u
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 Undo one batch of changes (usually, one command's worth) (@code{undo}).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 @item C-_
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 The same.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 @end table
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22 @kindex C-x u
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 @kindex C-_
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 @findex undo
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25 The command @kbd{C-x u} or @kbd{C-_} allows you to undo changes. The
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 first time you give this command, it undoes the last change. Point
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 moves to the text affected by the undo, so you can see what was undone.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 Consecutive repetitions of the @kbd{C-_} or @kbd{C-x u} commands undo
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 earlier and earlier changes, back to the limit of what has been
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31 recorded. If all recorded changes have already been undone, the undo
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 command prints an error message and does nothing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 Any command other than an undo command breaks the sequence of undo
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 commands. Starting at this moment, the previous undo commands are
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 considered ordinary changes that can themselves be undone. Thus, you can
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 redo changes you have undone by typing @kbd{C-f} or any other command
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 that have no important effect, and then using more undo commands.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 If you notice that a buffer has been modified accidentally, the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 easiest way to recover is to type @kbd{C-_} repeatedly until the stars
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 disappear from the front of the mode line. When that happens, all the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43 modifications you made have been canceled. If you do not remember
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 whether you changed the buffer deliberately, type @kbd{C-_} once. When
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 you see Emacs undo the last change you made, you probably remember why you
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 made it. If the change was an accident, leave it undone. If it was
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 deliberate, redo the change as described in the preceding paragraph.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 Whenever an undo command makes the stars disappear from the mode line,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 the buffer contents is the same as it was when the file was last read in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 or saved.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 Not all buffers record undo information. Buffers whose names start with
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 spaces don't; these buffers are used internally by Emacs and its extensions
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 to hold text that users don't normally look at or edit. Minibuffers,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 help buffers, and documentation buffers also don't record undo information.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 Emacs can remember at most 8000 or so characters of deleted or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59 modified text in any one buffer for reinsertion by the undo command.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 There is also a limit on the number of individual insert, delete, or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 change actions that Emacs can remember.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 There are two keys to run the @code{undo} command, @kbd{C-x u} and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 @kbd{C-_}, because on some keyboards, it is not obvious how to type
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 @kbd{C-_}. @kbd{C-x u} is an alternative you can type in the same
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 fashion on any terminal.