O'Reilly logo

Writing GNU Emacs Extensions by Bob Glickstein

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Keymaps

Unfortunately, the names of the commands—backward-page and what-page and so on—obscure their function in Quip mode, which is to operate on quips, not pages. Therefore it might be wise to do this:

(defalias 'backward-quip 'backward-page)
(defalias 'forward-quip 'forward-page)
(defalias 'narrow-to-quip 'narrow-to-page)
(defalias 'what-quip 'what-page)

But that's not quite enough. Even with these aliases defined, the existing keybindings—C-x [, C-x ], and C-x n p—are still bound to the "page" commands, so that if users list the keybindings in Quip mode using describe-bindings, they'll see:

C-x [

backward-page

C-x ]

forward-page

C-x n p

narrow-to-page

(among many others) but nothing relating to quips. It would be better if these keysequences referred to the quip variant of the command names—in Quip mode only, of course. While we're at it, we should also change C-x n p (so chosen because it means narrow to page) to C-x n q (narrow to quip). We could also give a keybinding to what-quip, which doesn't have one by default. At this point we need a keymap specific to Quip mode.

A keymap is a Lisp data structure that maps keystrokes to the commands they should invoke. When you press C-f, for instance, Emacs consults the "global" keymap and finds the binding for C-f, namely forward-char. Each entry in a keymap represents a single keystroke.

Key sequences, such as C-x C-w (write-file), are implemented by nesting keymaps. In the global keymap, the entry for C-x contains a nested keymap instead of ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required