2.1.3 Undo and Redo

If you make a mistake, you can usually correct it by pressing shift-U, the “undo” command. First, clear the stack (M-0 DEL) and exit and restart Calc (C-x * * C-x * *) to make sure things start off with a clean slate. Now:

1:  2          2:  2          1:  8          2:  2          1:  6
    .          1:  3              .          1:  3              .
                   .                             .

   2 RET           3              ^              U              *

You can undo any number of times. Calc keeps a complete record of all you have done since you last opened the Calc window. After the above example, you could type:

1:  6          2:  2          1:  2              .              .
    .          1:  3              .
                   .
                                                             (error)
                   U              U              U              U

You can also type D to “redo” a command that you have undone mistakenly.

    .          1:  2          2:  2          1:  6          1:  6
                   .          1:  3              .              .
                                  .
                                                             (error)
                   D              D              D              D

It was not possible to redo past the ‘6’, since that was placed there by something other than an undo command.

You can think of undo and redo as a sort of “time machine.” Press U to go backward in time, D to go forward. If you go backward and do something (like *) then, as any science fiction reader knows, you have changed your future and you cannot go forward again. Thus, the inability to redo past the ‘6’ even though there was an earlier undo command.

You can always recall an earlier result using the Trail. We’ve ignored the trail so far, but it has been faithfully recording everything we did since we loaded the Calculator. If the Trail is not displayed, press t d now to turn it on.

Let’s try grabbing an earlier result. The ‘8’ we computed was undone by a U command, and was lost even to Redo when we pressed *, but it’s still there in the trail. There should be a little ‘>’ arrow (the trail pointer) resting on the last trail entry. If there isn’t, press t ] to reset the trail pointer. Now, press t p to move the arrow onto the line containing ‘8’, and press t y to “yank” that number back onto the stack.

If you press t ] again, you will see that even our Yank command went into the trail.

Let’s go further back in time. Earlier in the tutorial we computed a huge integer using the formula ‘2^3^4’. We don’t remember what it was, but the first digits were “241”. Press t r (which stands for trail-search-reverse), then type 241. The trail cursor will jump back to the next previous occurrence of the string “241” in the trail. This is just a regular Emacs incremental search; you can now press C-s or C-r to continue the search forwards or backwards as you like.

To finish the search, press RET. This halts the incremental search and leaves the trail pointer at the thing we found. Now we can type t y to yank that number onto the stack. If we hadn’t remembered the “241”, we could simply have searched for 2^3^4, then pressed RET t n to halt and then move to the next item.

You may have noticed that all the trail-related commands begin with the letter t. (The store-and-recall commands, on the other hand, all began with s.) Calc has so many commands that there aren’t enough keys for all of them, so various commands are grouped into two-letter sequences where the first letter is called the prefix key. If you type a prefix key by accident, you can press C-g to cancel it. (In fact, you can press C-g to cancel almost anything in Emacs.) To get help on a prefix key, press that key followed by ?. Some prefixes have several lines of help, so you need to press ? repeatedly to see them all. You can also type h h to see all the help at once.

Try pressing t ? now. You will see a line of the form,

trail/time: Display; Fwd, Back; Next, Prev, Here, [, ]; Yank:  [MORE]  t-

The word “trail” indicates that the t prefix key contains trail-related commands. Each entry on the line shows one command, with a single capital letter showing which letter you press to get that command. We have used t n, t p, t ], and t y so far. The ‘[MORE]’ means you can press ? again to see more t-prefix commands. Notice that the commands are roughly divided (by semicolons) into related groups.

When you are in the help display for a prefix key, the prefix is still active. If you press another key, like y for example, it will be interpreted as a t y command. If all you wanted was to look at the help messages, press C-g afterwards to cancel the prefix.

One more way to correct an error is by editing the stack entries. The actual Stack buffer is marked read-only and must not be edited directly, but you can press ` (grave accent) to edit a stack entry.

Try entering ‘3.141439’ now. If this is supposed to represent ‘pi’, it’s got several errors. Press ` to edit this number. Now use the normal Emacs cursor motion and editing keys to change the second 4 to a 5, and to transpose the 3 and the 9. When you press RET, the number on the stack will be replaced by your new number. This works for formulas, vectors, and all other types of values you can put on the stack. The ` key also works during entry of a number or algebraic formula.