summaryrefslogtreecommitdiff
path: root/devdocs/elisp/creating-keymaps.html
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
committerCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
commit754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 (patch)
treef1190704f78f04a2b0b4c977d20fe96a828377f1 /devdocs/elisp/creating-keymaps.html
new repository
Diffstat (limited to 'devdocs/elisp/creating-keymaps.html')
-rw-r--r--devdocs/elisp/creating-keymaps.html44
1 files changed, 44 insertions, 0 deletions
diff --git a/devdocs/elisp/creating-keymaps.html b/devdocs/elisp/creating-keymaps.html
new file mode 100644
index 00000000..4840a168
--- /dev/null
+++ b/devdocs/elisp/creating-keymaps.html
@@ -0,0 +1,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>&amp;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>&amp;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 &lt;theirmap&gt;)
+ (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 &copy; 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>