Chapter 3. Cooperating Commands
This chapter shows how to get different commands to work together by saving information in one command and retrieving it in another. The simplest way to share information is to create a variable and store a value in it. We’ll certainly do that in this chapter. For instance, we’ll store the current buffer position and reuse it in a later command. But we’ll also learn some more sophisticated ways to preserve state, notably markers and symbol properties. We’ll combine these techniques with information about buffers and windows to write a set of functions that allow you to “undo” scrolling.
You’re deep into editing some complicated Lisp code. You’re concentrating, juggling the tenuous connections between the conceptual structures in your brain and the glyphs that represent them on the screen. You’re in a particularly tricky part when you notice a typo a few characters to the left. You mean to press C-b C-b C-b to back up and correct it, but instead—horrors!—you press C-v C-v C-v, paging the Emacs window three times, ending up light years away from the code you were editing. Your mental context is ruined as you try to figure out where the cursor was before your mistake, and why, and what you were doing there. As you scroll, or search, or cycle through the mark-ring or the undo-list trying to get back to where you were, you forget about that original typo you were trying to correct, and ...