1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
<h3 class="section">Creating Keymaps</h3> <p>Here we describe the functions for creating keymaps. </p> <dl> <dt id="make-sparse-keymap">Function: <strong>make-sparse-keymap</strong> <em>&optional prompt</em>
</dt> <dd>
<p>This function creates and returns a new sparse keymap with no entries. (A sparse keymap is the kind of keymap you usually want.) The new keymap does not contain a char-table, unlike <code>make-keymap</code>, and does not bind any events. </p> <div class="example"> <pre class="example">(make-sparse-keymap)
⇒ (keymap)
</pre>
</div> <p>If you specify <var>prompt</var>, that becomes the overall prompt string for the keymap. You should specify this only for menu keymaps (see <a href="defining-menus">Defining Menus</a>). A keymap with an overall prompt string will always present a mouse menu or a keyboard menu if it is active for looking up the next input event. Don’t specify an overall prompt string for the main map of a major or minor mode, because that would cause the command loop to present a keyboard menu every time. </p>
</dd>
</dl> <dl> <dt id="make-keymap">Function: <strong>make-keymap</strong> <em>&optional prompt</em>
</dt> <dd>
<p>This function creates and returns a new full keymap. That keymap contains a char-table (see <a href="char_002dtables">Char-Tables</a>) with slots for all characters without modifiers. The new keymap initially binds all these characters to <code>nil</code>, and does not bind any other kind of event. The argument <var>prompt</var> specifies a prompt string, as in <code>make-sparse-keymap</code>. </p> <div class="example"> <pre class="example">(make-keymap)
⇒ (keymap #^[nil nil keymap nil nil nil …])
</pre>
</div> <p>A full keymap is more efficient than a sparse keymap when it holds lots of bindings; for just a few, the sparse keymap is better. </p>
</dd>
</dl> <dl> <dt id="copy-keymap">Function: <strong>copy-keymap</strong> <em>keymap</em>
</dt> <dd>
<p>This function returns a copy of <var>keymap</var>. This is almost never needed. If you want a keymap that’s like another yet with a few changes, you should use map inheritance rather than copying. I.e., something like: </p> <div class="example"> <pre class="example">(let ((map (make-sparse-keymap)))
(set-keymap-parent map <theirmap>)
(define-key map ...)
...)
</pre>
</div> <p>When performing <code>copy-keymap</code>, any keymaps that appear directly as bindings in <var>keymap</var> are also copied recursively, and so on to any number of levels. However, recursive copying does not take place when the definition of a character is a symbol whose function definition is a keymap; the same symbol appears in the new copy. </p> <div class="example"> <pre class="example">(setq map (copy-keymap (current-local-map)))
⇒ (keymap
</pre>
<pre class="example"> ;; <span class="roman">(This implements meta characters.)</span>
(27 keymap
(83 . center-paragraph)
(115 . center-line))
(9 . tab-to-tab-stop))
</pre>
<pre class="example">(eq map (current-local-map))
⇒ nil
</pre>
<pre class="example">(equal map (current-local-map))
⇒ t
</pre>
</div> </dd>
</dl><div class="_attribution">
<p class="_attribution-p">
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc. <br>Licensed under the GNU GPL license.<br>
<a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Keymaps.html" class="_attribution-link">https://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Keymaps.html</a>
</p>
</div>
|