annotate src/keymap.c @ 45098:06120f91eb06

(eshell-modify-global-environment): Added this customization variable, which will cause any "export" commands within any eshell buffer to modify the global Emacs environment. It defaults to nil, which means that such commands will only modify that Eshell buffer's environment. (eshell-var-initialize): Initialize `eshell-modify-global-environment'.
author John Wiegley <johnw@newartisans.com>
date Fri, 03 May 2002 20:43:53 +0000
parents 20832766c3e1
children c525c7445e1b 88a2dd2ddb6e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Manipulation of keymaps
37747
e5c590c9fe66 (Fsingle_key_description): Replace a build_string with
Gerd Moellmann <gerd@gnu.org>
parents: 36406
diff changeset
2 Copyright (C) 1985, 86,87,88,93,94,95,98,99, 2000, 2001
32818
f915f46d067c Update copyright.
Gerd Moellmann <gerd@gnu.org>
parents: 32739
diff changeset
3 Free Software Foundation, Inc.
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 517
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14129
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14129
diff changeset
20 Boston, MA 02111-1307, USA. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4575
diff changeset
23 #include <config.h>
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include <stdio.h>
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include "lisp.h"
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 #include "commands.h"
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #include "buffer.h"
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
28 #include "charset.h"
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
29 #include "keyboard.h"
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
30 #include "termhooks.h"
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2358
diff changeset
31 #include "blockinput.h"
13771
28790743a5a3 (Fkey_binding): Handle text-property keymaps.
Karl Heuer <kwzh@gnu.org>
parents: 13343
diff changeset
32 #include "puresize.h"
29282
59f2b30d577b Include intervals.h.
Dave Love <fx@gnu.org>
parents: 29013
diff changeset
33 #include "intervals.h"
39697
0b986bb45526 Include keymap.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39689
diff changeset
34 #include "keymap.h"
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
36 /* The number of elements in keymap vectors. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 #define DENSE_TABLE_SIZE (0200)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 /* Actually allocate storage for these variables */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 Lisp_Object current_global_map; /* Current global keymap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 Lisp_Object global_map; /* default global key bindings */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 Lisp_Object meta_map; /* The keymap used for globally bound
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 ESC-prefixed default commands */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 Lisp_Object control_x_map; /* The keymap used for globally bound
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 C-x-prefixed default commands */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 /* was MinibufLocalMap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 Lisp_Object Vminibuffer_local_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 /* The keymap used by the minibuf for local
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 bindings when spaces are allowed in the
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 minibuf */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 /* was MinibufLocalNSMap */
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
58 Lisp_Object Vminibuffer_local_ns_map;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 /* The keymap used by the minibuf for local
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 bindings when spaces are not encouraged
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 in the minibuf */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 /* keymap used for minibuffers when doing completion */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 /* was MinibufLocalCompletionMap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 Lisp_Object Vminibuffer_local_completion_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 /* keymap used for minibuffers when doing completion and require a match */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 /* was MinibufLocalMustMatchMap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 Lisp_Object Vminibuffer_local_must_match_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
71 /* Alist of minor mode variables and keymaps. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
72 Lisp_Object Vminor_mode_map_alist;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
73
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
74 /* Alist of major-mode-specific overrides for
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
75 minor mode variables and keymaps. */
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
76 Lisp_Object Vminor_mode_overriding_map_alist;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
77
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
78 /* Keymap mapping ASCII function key sequences onto their preferred forms.
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
79 Initialized by the terminal-specific lisp files. See DEFVAR for more
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
80 documentation. */
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
81 Lisp_Object Vfunction_key_map;
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
82
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
83 /* Keymap mapping ASCII function key sequences onto their preferred forms. */
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
84 Lisp_Object Vkey_translation_map;
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
85
12297
fe458a8ecfa2 (Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12262
diff changeset
86 /* A list of all commands given new bindings since a certain time
fe458a8ecfa2 (Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12262
diff changeset
87 when nil was stored here.
fe458a8ecfa2 (Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12262
diff changeset
88 This is used to speed up recomputation of menu key equivalents
fe458a8ecfa2 (Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12262
diff changeset
89 when Emacs starts up. t means don't record anything here. */
fe458a8ecfa2 (Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12262
diff changeset
90 Lisp_Object Vdefine_key_rebound_commands;
fe458a8ecfa2 (Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12262
diff changeset
91
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
92 Lisp_Object Qkeymapp, Qkeymap, Qnon_ascii, Qmenu_item, Qremap;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93
42381
810b3bfc52cf Fix previous change; also correct its change log:
Richard M. Stallman <rms@gnu.org>
parents: 42378
diff changeset
94 /* Alist of elements like (DEL . "\d"). */
810b3bfc52cf Fix previous change; also correct its change log:
Richard M. Stallman <rms@gnu.org>
parents: 42378
diff changeset
95 static Lisp_Object exclude_keys;
810b3bfc52cf Fix previous change; also correct its change log:
Richard M. Stallman <rms@gnu.org>
parents: 42378
diff changeset
96
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
97 /* Pre-allocated 2-element vector for Fremap_command to use. */
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
98 static Lisp_Object remap_command_vector;
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
99
2886
ad36d1481295 Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2790
diff changeset
100 /* A char with the CHAR_META bit set in a vector or the 0200 bit set
ad36d1481295 Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2790
diff changeset
101 in a string key sequence is equivalent to prefixing with this
ad36d1481295 Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2790
diff changeset
102 character. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 extern Lisp_Object meta_prefix_char;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104
5613
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
105 extern Lisp_Object Voverriding_local_map;
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
106
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
107 /* Hash table used to cache a reverse-map to speed up calls to where-is. */
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
108 static Lisp_Object where_is_cache;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
109 /* Which keymaps are reverse-stored in the cache. */
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
110 static Lisp_Object where_is_cache_keymaps;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
111
31208
442d40fce0db (store_in_keymap, fix_submap_inheritance): New prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30780
diff changeset
112 static Lisp_Object store_in_keymap P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
442d40fce0db (store_in_keymap, fix_submap_inheritance): New prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30780
diff changeset
113 static void fix_submap_inheritance P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
442d40fce0db (store_in_keymap, fix_submap_inheritance): New prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30780
diff changeset
114
442d40fce0db (store_in_keymap, fix_submap_inheritance): New prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30780
diff changeset
115 static Lisp_Object define_as_prefix P_ ((Lisp_Object, Lisp_Object));
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
116 static void describe_command P_ ((Lisp_Object, Lisp_Object));
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
117 static void describe_translation P_ ((Lisp_Object, Lisp_Object));
31208
442d40fce0db (store_in_keymap, fix_submap_inheritance): New prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30780
diff changeset
118 static void describe_map P_ ((Lisp_Object, Lisp_Object,
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
119 void (*) P_ ((Lisp_Object, Lisp_Object)),
31208
442d40fce0db (store_in_keymap, fix_submap_inheritance): New prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30780
diff changeset
120 int, Lisp_Object, Lisp_Object*, int));
42404
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
121 static void silly_event_symbol_error P_ ((Lisp_Object));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
123 /* Keymap object support - constructors and predicates. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
124
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
125 DEFUN ("make-keymap", Fmake_keymap, Smake_keymap, 0, 1, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
126 doc: /* Construct and return a new keymap, of the form (keymap CHARTABLE . ALIST).
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
127 CHARTABLE is a char-table that holds the bindings for the ASCII
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
128 characters. ALIST is an assoc-list which holds bindings for function keys,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
129 mouse events, and any other things that appear in the input stream.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
130 All entries in it are initially nil, meaning "command undefined".
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
131
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
132 The optional arg STRING supplies a menu name for the keymap
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
133 in case you use it as a menu with `x-popup-menu'. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
134 (string)
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
135 Lisp_Object string;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 {
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
137 Lisp_Object tail;
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
138 if (!NILP (string))
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
139 tail = Fcons (string, Qnil);
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
140 else
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
141 tail = Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 return Fcons (Qkeymap,
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
143 Fcons (Fmake_char_table (Qkeymap, Qnil), tail));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
146 DEFUN ("make-sparse-keymap", Fmake_sparse_keymap, Smake_sparse_keymap, 0, 1, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
147 doc: /* Construct and return a new sparse keymap.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
148 Its car is `keymap' and its cdr is an alist of (CHAR . DEFINITION),
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
149 which binds the character CHAR to DEFINITION, or (SYMBOL . DEFINITION),
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
150 which binds the function key or mouse event SYMBOL to DEFINITION.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
151 Initially the alist is nil.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
152
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
153 The optional arg STRING supplies a menu name for the keymap
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
154 in case you use it as a menu with `x-popup-menu'. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
155 (string)
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
156 Lisp_Object string;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 {
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
158 if (!NILP (string))
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
159 return Fcons (Qkeymap, Fcons (string, Qnil));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 return Fcons (Qkeymap, Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 /* This function is used for installing the standard key bindings
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 at initialization time.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 For example:
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
168 initial_define_key (control_x_map, Ctl('X'), "exchange-point-and-mark"); */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 initial_define_key (keymap, key, defname)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 int key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 char *defname;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 store_in_keymap (keymap, make_number (key), intern (defname));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
179 void
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
180 initial_define_lispy_key (keymap, keyname, defname)
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
181 Lisp_Object keymap;
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
182 char *keyname;
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
183 char *defname;
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
184 {
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
185 store_in_keymap (keymap, intern (keyname), intern (defname));
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
186 }
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
187
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 DEFUN ("keymapp", Fkeymapp, Skeymapp, 1, 1, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
189 doc: /* Return t if OBJECT is a keymap.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
190
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
191 A keymap is a list (keymap . ALIST),
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
192 or a symbol whose function definition is itself a keymap.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
193 ALIST elements look like (CHAR . DEFN) or (SYMBOL . DEFN);
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
194 a vector of densely packed bindings for small character codes
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
195 is also allowed as an element. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
196 (object)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 Lisp_Object object;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 {
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
199 return (KEYMAPP (object) ? Qt : Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
202 DEFUN ("keymap-prompt", Fkeymap_prompt, Skeymap_prompt, 1, 1, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
203 doc: /* Return the prompt-string of a keymap MAP.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
204 If non-nil, the prompt is shown in the echo-area
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
205 when reading a key-sequence to be looked-up in this keymap. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
206 (map)
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
207 Lisp_Object map;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
208 {
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
209 while (CONSP (map))
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
210 {
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
211 register Lisp_Object tem;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
212 tem = Fcar (map);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
213 if (STRINGP (tem))
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
214 return tem;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
215 map = Fcdr (map);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
216 }
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
217 return Qnil;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
218 }
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
219
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 /* Check that OBJECT is a keymap (after dereferencing through any
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
221 symbols). If it is, return it.
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
222
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
223 If AUTOLOAD is non-zero and OBJECT is a symbol whose function value
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
224 is an autoload form, do the autoload and try again.
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
225 If AUTOLOAD is nonzero, callers must assume GC is possible.
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
226
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
227 If the map needs to be autoloaded, but AUTOLOAD is zero (and ERROR
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
228 is zero as well), return Qt.
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
229
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
230 ERROR controls how we respond if OBJECT isn't a keymap.
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
231 If ERROR is non-zero, signal an error; otherwise, just return Qnil.
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
232
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
233 Note that most of the time, we don't want to pursue autoloads.
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
234 Functions like Faccessible_keymaps which scan entire keymap trees
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
235 shouldn't load every autoloaded keymap. I'm not sure about this,
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
236 but it seems to me that only read_key_sequence, Flookup_key, and
30134
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
237 Fdefine_key should cause keymaps to be autoloaded.
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
238
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
239 This function can GC when AUTOLOAD is non-zero, because it calls
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
240 do_autoload which can GC. */
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
241
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 Lisp_Object
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
243 get_keymap (object, error, autoload)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 Lisp_Object object;
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
245 int error, autoload;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 {
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
247 Lisp_Object tem;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
249 autoload_retry:
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
250 if (NILP (object))
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
251 goto end;
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
252 if (CONSP (object) && EQ (XCAR (object), Qkeymap))
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
253 return object;
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
254
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
255 tem = indirect_function (object);
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
256 if (CONSP (tem))
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
257 {
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
258 if (EQ (XCAR (tem), Qkeymap))
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
259 return tem;
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
260
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
261 /* Should we do an autoload? Autoload forms for keymaps have
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
262 Qkeymap as their fifth element. */
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
263 if ((autoload || !error) && EQ (XCAR (tem), Qautoload))
1566
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
264 {
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
265 Lisp_Object tail;
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
266
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
267 tail = Fnth (make_number (4), tem);
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
268 if (EQ (tail, Qkeymap))
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
269 {
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
270 if (autoload)
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
271 {
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
272 struct gcpro gcpro1, gcpro2;
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
273
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
274 GCPRO2 (tem, object);
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
275 do_autoload (tem, object);
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
276 UNGCPRO;
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
277
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
278 goto autoload_retry;
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
279 }
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
280 else
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
281 return Qt;
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
282 }
1566
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
283 }
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
284 }
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
285
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
286 end:
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 if (error)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 wrong_type_argument (Qkeymapp, object);
31829
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31496
diff changeset
289 return Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 }
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
291
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
292 /* Return the parent map of the keymap MAP, or nil if it has none.
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
293 We assume that MAP is a valid keymap. */
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
294
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
295 DEFUN ("keymap-parent", Fkeymap_parent, Skeymap_parent, 1, 1, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
296 doc: /* Return the parent keymap of KEYMAP. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
297 (keymap)
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
298 Lisp_Object keymap;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
299 {
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
300 Lisp_Object list;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
301
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
302 keymap = get_keymap (keymap, 1, 1);
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
303
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
304 /* Skip past the initial element `keymap'. */
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
305 list = XCDR (keymap);
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
306 for (; CONSP (list); list = XCDR (list))
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
307 {
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
308 /* See if there is another `keymap'. */
31208
442d40fce0db (store_in_keymap, fix_submap_inheritance): New prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30780
diff changeset
309 if (KEYMAPP (list))
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
310 return list;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
311 }
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
312
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
313 return get_keymap (list, 0, 1);
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
314 }
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
315
31496
946e1ba42cc9 (Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents: 31232
diff changeset
316
32038
0cb9cab990cb (keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31989
diff changeset
317 /* Check whether MAP is one of MAPS parents. */
0cb9cab990cb (keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31989
diff changeset
318 int
0cb9cab990cb (keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31989
diff changeset
319 keymap_memberp (map, maps)
0cb9cab990cb (keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31989
diff changeset
320 Lisp_Object map, maps;
0cb9cab990cb (keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31989
diff changeset
321 {
32559
bc60bd171784 (keymap_memberp): Ensure that nil is not a member.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32478
diff changeset
322 if (NILP (map)) return 0;
32038
0cb9cab990cb (keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31989
diff changeset
323 while (KEYMAPP (maps) && !EQ (map, maps))
0cb9cab990cb (keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31989
diff changeset
324 maps = Fkeymap_parent (maps);
0cb9cab990cb (keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31989
diff changeset
325 return (EQ (map, maps));
0cb9cab990cb (keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31989
diff changeset
326 }
0cb9cab990cb (keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31989
diff changeset
327
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
328 /* Set the parent keymap of MAP to PARENT. */
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
329
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
330 DEFUN ("set-keymap-parent", Fset_keymap_parent, Sset_keymap_parent, 2, 2, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
331 doc: /* Modify KEYMAP to set its parent map to PARENT.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
332 PARENT should be nil or another keymap. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
333 (keymap, parent)
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
334 Lisp_Object keymap, parent;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
335 {
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
336 Lisp_Object list, prev;
30134
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
337 struct gcpro gcpro1;
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
338 int i;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
339
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
340 /* Force a keymap flush for the next call to where-is.
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
341 Since this can be called from within where-is, we don't set where_is_cache
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
342 directly but only where_is_cache_keymaps, since where_is_cache shouldn't
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
343 be changed during where-is, while where_is_cache_keymaps is only used at
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
344 the very beginning of where-is and can thus be changed here without any
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
345 adverse effect.
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
346 This is a very minor correctness (rather than safety) issue. */
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
347 where_is_cache_keymaps = Qt;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
348
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
349 keymap = get_keymap (keymap, 1, 1);
30134
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
350 GCPRO1 (keymap);
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
351
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
352 if (!NILP (parent))
31496
946e1ba42cc9 (Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents: 31232
diff changeset
353 {
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
354 parent = get_keymap (parent, 1, 1);
31496
946e1ba42cc9 (Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents: 31232
diff changeset
355
946e1ba42cc9 (Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents: 31232
diff changeset
356 /* Check for cycles. */
32038
0cb9cab990cb (keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31989
diff changeset
357 if (keymap_memberp (keymap, parent))
31496
946e1ba42cc9 (Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents: 31232
diff changeset
358 error ("Cyclic keymap inheritance");
946e1ba42cc9 (Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents: 31232
diff changeset
359 }
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
360
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
361 /* Skip past the initial element `keymap'. */
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
362 prev = keymap;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
363 while (1)
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
364 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
365 list = XCDR (prev);
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
366 /* If there is a parent keymap here, replace it.
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
367 If we came to the end, add the parent in PREV. */
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
368 if (!CONSP (list) || KEYMAPP (list))
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
369 {
15422
dd639432a55a (Fset_keymap_parent): Return early if KEYMAP already has the proper parent.
Richard M. Stallman <rms@gnu.org>
parents: 15378
diff changeset
370 /* If we already have the right parent, return now
dd639432a55a (Fset_keymap_parent): Return early if KEYMAP already has the proper parent.
Richard M. Stallman <rms@gnu.org>
parents: 15378
diff changeset
371 so that we avoid the loops below. */
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
372 if (EQ (XCDR (prev), parent))
30134
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
373 RETURN_UNGCPRO (parent);
15422
dd639432a55a (Fset_keymap_parent): Return early if KEYMAP already has the proper parent.
Richard M. Stallman <rms@gnu.org>
parents: 15378
diff changeset
374
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
375 XSETCDR (prev, parent);
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
376 break;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
377 }
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
378 prev = list;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
379 }
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
380
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
381 /* Scan through for submaps, and set their parents too. */
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
382
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
383 for (list = XCDR (keymap); CONSP (list); list = XCDR (list))
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
384 {
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
385 /* Stop the scan when we come to the parent. */
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
386 if (EQ (XCAR (list), Qkeymap))
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
387 break;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
388
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
389 /* If this element holds a prefix map, deal with it. */
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
390 if (CONSP (XCAR (list))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
391 && CONSP (XCDR (XCAR (list))))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
392 fix_submap_inheritance (keymap, XCAR (XCAR (list)),
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
393 XCDR (XCAR (list)));
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
394
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
395 if (VECTORP (XCAR (list)))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
396 for (i = 0; i < XVECTOR (XCAR (list))->size; i++)
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
397 if (CONSP (XVECTOR (XCAR (list))->contents[i]))
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
398 fix_submap_inheritance (keymap, make_number (i),
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
399 XVECTOR (XCAR (list))->contents[i]);
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
400
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
401 if (CHAR_TABLE_P (XCAR (list)))
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
402 {
20076
374e09781f08 (Faccessible_keymaps): Avoid alloca for fixed-size array.
Karl Heuer <kwzh@gnu.org>
parents: 20070
diff changeset
403 Lisp_Object indices[3];
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
404
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
405 map_char_table (fix_submap_inheritance, Qnil, XCAR (list),
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
406 keymap, 0, indices);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
407 }
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
408 }
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
409
30134
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
410 RETURN_UNGCPRO (parent);
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
411 }
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
412
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
413 /* EVENT is defined in MAP as a prefix, and SUBMAP is its definition.
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
414 if EVENT is also a prefix in MAP's parent,
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
415 make sure that SUBMAP inherits that definition as its own parent. */
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
416
31208
442d40fce0db (store_in_keymap, fix_submap_inheritance): New prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30780
diff changeset
417 static void
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
418 fix_submap_inheritance (map, event, submap)
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
419 Lisp_Object map, event, submap;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
420 {
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
421 Lisp_Object map_parent, parent_entry;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
422
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
423 /* SUBMAP is a cons that we found as a key binding.
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
424 Discard the other things found in a menu key binding. */
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
425
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
426 submap = get_keymap (get_keyelt (submap, 0), 0, 0);
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
427
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
428 /* If it isn't a keymap now, there's no work to do. */
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
429 if (!CONSP (submap))
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
430 return;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
431
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
432 map_parent = Fkeymap_parent (map);
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
433 if (!NILP (map_parent))
32844
5aa0846c2995 (fix_submap_inheritance): Use get_keymap_1 on parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32818
diff changeset
434 parent_entry =
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
435 get_keymap (access_keymap (map_parent, event, 0, 0, 0), 0, 0);
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
436 else
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
437 parent_entry = Qnil;
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
438
15378
ecfc288350ab (fix_submap_inheritance): If parent_entry is not a keymap, use nil instead.
Richard M. Stallman <rms@gnu.org>
parents: 15344
diff changeset
439 /* If MAP's parent has something other than a keymap,
32739
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
440 our own submap shadows it completely. */
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
441 if (!CONSP (parent_entry))
32739
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
442 return;
15378
ecfc288350ab (fix_submap_inheritance): If parent_entry is not a keymap, use nil instead.
Richard M. Stallman <rms@gnu.org>
parents: 15344
diff changeset
443
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
444 if (! EQ (parent_entry, submap))
25600
6cea4c28fc1c (fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents: 25128
diff changeset
445 {
6cea4c28fc1c (fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents: 25128
diff changeset
446 Lisp_Object submap_parent;
6cea4c28fc1c (fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents: 25128
diff changeset
447 submap_parent = submap;
6cea4c28fc1c (fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents: 25128
diff changeset
448 while (1)
6cea4c28fc1c (fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents: 25128
diff changeset
449 {
6cea4c28fc1c (fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents: 25128
diff changeset
450 Lisp_Object tem;
32739
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
451
25600
6cea4c28fc1c (fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents: 25128
diff changeset
452 tem = Fkeymap_parent (submap_parent);
32739
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
453
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
454 if (KEYMAPP (tem))
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
455 {
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
456 if (keymap_memberp (tem, parent_entry))
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
457 /* Fset_keymap_parent could create a cycle. */
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
458 return;
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
459 submap_parent = tem;
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
460 }
25600
6cea4c28fc1c (fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents: 25128
diff changeset
461 else
6cea4c28fc1c (fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents: 25128
diff changeset
462 break;
6cea4c28fc1c (fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents: 25128
diff changeset
463 }
6cea4c28fc1c (fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents: 25128
diff changeset
464 Fset_keymap_parent (submap_parent, parent_entry);
6cea4c28fc1c (fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents: 25128
diff changeset
465 }
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
466 }
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
467
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
468 /* Look up IDX in MAP. IDX may be any sort of event.
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
469 Note that this does only one level of lookup; IDX must be a single
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
470 event, not a sequence.
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
471
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
472 If T_OK is non-zero, bindings for Qt are treated as default
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
473 bindings; any key left unmentioned by other tables and bindings is
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
474 given the binding of Qt.
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
475
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
476 If T_OK is zero, bindings for Qt are not treated specially.
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
477
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
478 If NOINHERIT, don't accept a subkeymap found in an inherited keymap. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 Lisp_Object
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
481 access_keymap (map, idx, t_ok, noinherit, autoload)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 Lisp_Object map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 Lisp_Object idx;
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
484 int t_ok;
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
485 int noinherit;
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
486 int autoload;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 {
40791
97673fa0eaa7 (access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
488 Lisp_Object val;
97673fa0eaa7 (access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
489
97673fa0eaa7 (access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
490 /* Qunbound in VAL means we have found no binding yet. */
97673fa0eaa7 (access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
491 val = Qunbound;
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
492
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 /* If idx is a list (some sort of mouse click, perhaps?),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 the index we want to use is the car of the list, which
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 ought to be a symbol. */
1315
884c3d7e7172 * keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents: 1264
diff changeset
496 idx = EVENT_HEAD (idx);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
498 /* If idx is a symbol, it might have modifiers, which need to
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
499 be put in the canonical order. */
8866
48a0ea73a9d7 (Fkey_description): Give error if KEYS not an array.
Richard M. Stallman <rms@gnu.org>
parents: 8731
diff changeset
500 if (SYMBOLP (idx))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
501 idx = reorder_modifiers (idx);
3515
9d0af0f2dc0d (access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents: 3425
diff changeset
502 else if (INTEGERP (idx))
9d0af0f2dc0d (access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents: 3425
diff changeset
503 /* Clobber the high bits that can be present on a machine
9d0af0f2dc0d (access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents: 3425
diff changeset
504 with more than 24 bits of integer. */
9312
dfaf1d41e53d (synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents: 9273
diff changeset
505 XSETFASTINT (idx, XINT (idx) & (CHAR_META | (CHAR_META - 1)));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
507 /* Handle the special meta -> esc mapping. */
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
508 if (INTEGERP (idx) && XUINT (idx) & meta_modifier)
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
509 {
32615
5f6178a60e6b (access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents: 32559
diff changeset
510 /* See if there is a meta-map. If there's none, there is
5f6178a60e6b (access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents: 32559
diff changeset
511 no binding for IDX, unless a default binding exists in MAP. */
32739
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
512 Lisp_Object meta_map =
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
513 get_keymap (access_keymap (map, meta_prefix_char,
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
514 t_ok, noinherit, autoload),
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
515 0, autoload);
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
516 if (CONSP (meta_map))
32615
5f6178a60e6b (access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents: 32559
diff changeset
517 {
32739
5ce157b2eaa9 (fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32615
diff changeset
518 map = meta_map;
32615
5f6178a60e6b (access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents: 32559
diff changeset
519 idx = make_number (XUINT (idx) & ~meta_modifier);
5f6178a60e6b (access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents: 32559
diff changeset
520 }
5f6178a60e6b (access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents: 32559
diff changeset
521 else if (t_ok)
5f6178a60e6b (access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents: 32559
diff changeset
522 /* Set IDX to t, so that we only find a default binding. */
5f6178a60e6b (access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents: 32559
diff changeset
523 idx = Qt;
5f6178a60e6b (access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents: 32559
diff changeset
524 else
5f6178a60e6b (access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents: 32559
diff changeset
525 /* We know there is no binding. */
5f6178a60e6b (access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents: 32559
diff changeset
526 return Qnil;
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
527 }
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
528
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
530 Lisp_Object tail;
40791
97673fa0eaa7 (access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
531
97673fa0eaa7 (access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
532 /* t_binding is where we put a default binding that applies,
97673fa0eaa7 (access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
533 to use in case we do not find a binding specifically
40804
02b84f3b47c0 (access_keymap): Fix compilation error.
Pavel Janík <Pavel@Janik.cz>
parents: 40791
diff changeset
534 for this key sequence. */
40791
97673fa0eaa7 (access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
535
97673fa0eaa7 (access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
536 Lisp_Object t_binding;
97673fa0eaa7 (access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
537 t_binding = Qnil;
39940
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
538
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
539 /* If `t_ok' is 2, both `t' and generic-char bindings are accepted.
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
540 If it is 1, only generic-char bindings are accepted.
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
541 Otherwise, neither are. */
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
542 t_ok = t_ok ? 2 : 0;
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
543
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
544 for (tail = XCDR (map);
32615
5f6178a60e6b (access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents: 32559
diff changeset
545 (CONSP (tail)
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
546 || (tail = get_keymap (tail, 0, autoload), CONSP (tail)));
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
547 tail = XCDR (tail))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
548 {
6502
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
549 Lisp_Object binding;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
551 binding = XCAR (tail);
9973
1d5a908f201e (access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9957
diff changeset
552 if (SYMBOLP (binding))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
553 {
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
554 /* If NOINHERIT, stop finding prefix definitions
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
555 after we pass a second occurrence of the `keymap' symbol. */
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
556 if (noinherit && EQ (binding, Qkeymap))
39940
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
557 return Qnil;
9973
1d5a908f201e (access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9957
diff changeset
558 }
1d5a908f201e (access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9957
diff changeset
559 else if (CONSP (binding))
1d5a908f201e (access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9957
diff changeset
560 {
38888
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
561 Lisp_Object key = XCAR (binding);
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
562
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
563 if (EQ (key, idx))
39940
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
564 val = XCDR (binding);
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
565 else if (t_ok
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
566 && INTEGERP (idx)
38901
f90da7c4551c (access_keymap): Fix last change to not consider
Gerd Moellmann <gerd@gnu.org>
parents: 38888
diff changeset
567 && (XINT (idx) & CHAR_MODIFIER_MASK) == 0
38888
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
568 && INTEGERP (key)
38901
f90da7c4551c (access_keymap): Fix last change to not consider
Gerd Moellmann <gerd@gnu.org>
parents: 38888
diff changeset
569 && (XINT (key) & CHAR_MODIFIER_MASK) == 0
38888
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
570 && !SINGLE_BYTE_CHAR_P (XINT (idx))
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
571 && !SINGLE_BYTE_CHAR_P (XINT (key))
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
572 && CHAR_VALID_P (XINT (key), 1)
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
573 && !CHAR_VALID_P (XINT (key), 0)
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
574 && (CHAR_CHARSET (XINT (key))
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
575 == CHAR_CHARSET (XINT (idx))))
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
576 {
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
577 /* KEY is the generic character of the charset of IDX.
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
578 Use KEY's binding if there isn't a binding for IDX
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
579 itself. */
39940
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
580 t_binding = XCDR (binding);
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
581 t_ok = 0;
38888
bf8f70dc79f4 (access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents: 37938
diff changeset
582 }
39940
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
583 else if (t_ok > 1 && EQ (key, Qt))
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
584 {
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
585 t_binding = XCDR (binding);
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
586 t_ok = 1;
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
587 }
9973
1d5a908f201e (access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9957
diff changeset
588 }
1d5a908f201e (access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9957
diff changeset
589 else if (VECTORP (binding))
1d5a908f201e (access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9957
diff changeset
590 {
39940
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
591 if (NATNUMP (idx) && XFASTINT (idx) < ASIZE (binding))
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
592 val = AREF (binding, XFASTINT (idx));
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
593 }
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
594 else if (CHAR_TABLE_P (binding))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
595 {
17932
78a128b99e05 (access_keymap, store_in_keymap): Don't look in a char-table
Richard M. Stallman <rms@gnu.org>
parents: 17861
diff changeset
596 /* Character codes with modifiers
78a128b99e05 (access_keymap, store_in_keymap): Don't look in a char-table
Richard M. Stallman <rms@gnu.org>
parents: 17861
diff changeset
597 are not included in a char-table.
78a128b99e05 (access_keymap, store_in_keymap): Don't look in a char-table
Richard M. Stallman <rms@gnu.org>
parents: 17861
diff changeset
598 All character codes without modifiers are included. */
41593
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
599 if (NATNUMP (idx) && (XFASTINT (idx) & CHAR_MODIFIER_MASK) == 0)
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
600 {
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
601 val = Faref (binding, idx);
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
602 /* `nil' has a special meaning for char-tables, so
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
603 we use something else to record an explicitly
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
604 unbound entry. */
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
605 if (NILP (val))
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
606 val = Qunbound;
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
607 }
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
608 }
1264
6ba9d5aaace6 * keymap.c (access_keymap): Don't forget to QUIT while scanning
Jim Blandy <jimb@redhat.com>
parents: 1236
diff changeset
609
39940
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
610 /* If we found a binding, clean it up and return it. */
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
611 if (!EQ (val, Qunbound))
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
612 {
41593
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
613 if (EQ (val, Qt))
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
614 /* A Qt binding is just like an explicit nil binding
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
615 (i.e. it shadows any parent binding but not bindings in
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
616 keymaps of lower precedence). */
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
617 val = Qnil;
39940
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
618 val = get_keyelt (val, autoload);
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
619 if (KEYMAPP (val))
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
620 fix_submap_inheritance (map, idx, val);
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
621 return val;
a6ced7cb88d9 (access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39837
diff changeset
622 }
1264
6ba9d5aaace6 * keymap.c (access_keymap): Don't forget to QUIT while scanning
Jim Blandy <jimb@redhat.com>
parents: 1236
diff changeset
623 QUIT;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 }
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
625
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
626 return get_keyelt (t_binding, autoload);
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
627 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 /* Given OBJECT which was found in a slot in a keymap,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 trace indirect definitions to get the actual definition of that slot.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 An indirect definition is a list of the form
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633 (KEYMAP . INDEX), where KEYMAP is a keymap or a symbol defined as one
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 and INDEX is the object to look up in KEYMAP to yield the definition.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 Also if OBJECT has a menu string as the first element,
6774
a29237d1fdca (get_keymap): Pass 1 as ERROR to get_keymap_1.
Richard M. Stallman <rms@gnu.org>
parents: 6695
diff changeset
637 remove that. Also remove a menu help string as second element.
a29237d1fdca (get_keymap): Pass 1 as ERROR to get_keymap_1.
Richard M. Stallman <rms@gnu.org>
parents: 6695
diff changeset
638
a29237d1fdca (get_keymap): Pass 1 as ERROR to get_keymap_1.
Richard M. Stallman <rms@gnu.org>
parents: 6695
diff changeset
639 If AUTOLOAD is nonzero, load autoloadable keymaps
a29237d1fdca (get_keymap): Pass 1 as ERROR to get_keymap_1.
Richard M. Stallman <rms@gnu.org>
parents: 6695
diff changeset
640 that are referred to with indirection. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 Lisp_Object
6774
a29237d1fdca (get_keymap): Pass 1 as ERROR to get_keymap_1.
Richard M. Stallman <rms@gnu.org>
parents: 6695
diff changeset
643 get_keyelt (object, autoload)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 register Lisp_Object object;
6774
a29237d1fdca (get_keymap): Pass 1 as ERROR to get_keymap_1.
Richard M. Stallman <rms@gnu.org>
parents: 6695
diff changeset
645 int autoload;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 while (1)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648 {
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
649 if (!(CONSP (object)))
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
650 /* This is really the value. */
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
651 return object;
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
652
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
653 /* If the keymap contents looks like (keymap ...) or (lambda ...)
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
654 then use itself. */
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
655 else if (EQ (XCAR (object), Qkeymap) || EQ (XCAR (object), Qlambda))
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
656 return object;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
658 /* If the keymap contents looks like (menu-item name . DEFN)
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
659 or (menu-item name DEFN ...) then use DEFN.
29941
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
660 This is a new format menu item. */
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
661 else if (EQ (XCAR (object), Qmenu_item))
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
662 {
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
663 if (CONSP (XCDR (object)))
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
664 {
29941
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
665 Lisp_Object tem;
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
666
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
667 object = XCDR (XCDR (object));
29941
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
668 tem = object;
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
669 if (CONSP (object))
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
670 object = XCAR (object);
29941
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
671
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
672 /* If there's a `:filter FILTER', apply FILTER to the
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
673 menu-item's definition to get the real definition to
34515
35d7808fe9f6 (get_keyelt): Only eval the filter if `autoload' is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34442
diff changeset
674 use. */
29941
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
675 for (; CONSP (tem) && CONSP (XCDR (tem)); tem = XCDR (tem))
34515
35d7808fe9f6 (get_keyelt): Only eval the filter if `autoload' is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34442
diff changeset
676 if (EQ (XCAR (tem), QCfilter) && autoload)
29941
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
677 {
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
678 Lisp_Object filter;
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
679 filter = XCAR (XCDR (tem));
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
680 filter = list2 (filter, list2 (Qquote, object));
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
681 object = menu_item_eval_property (filter);
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
682 break;
0c77254c90b8 (get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents: 29726
diff changeset
683 }
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
684 }
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
685 else
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
686 /* Invalid keymap */
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
687 return object;
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
688 }
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
689
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
690 /* If the keymap contents looks like (STRING . DEFN), use DEFN.
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
691 Keymap alist elements like (CHAR MENUSTRING . DEFN)
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
692 will be used by HierarKey menus. */
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
693 else if (STRINGP (XCAR (object)))
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
694 {
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
695 object = XCDR (object);
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
696 /* Also remove a menu help string, if any,
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
697 following the menu item name. */
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
698 if (CONSP (object) && STRINGP (XCAR (object)))
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
699 object = XCDR (object);
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
700 /* Also remove the sublist that caches key equivalences, if any. */
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
701 if (CONSP (object) && CONSP (XCAR (object)))
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
702 {
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
703 Lisp_Object carcar;
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
704 carcar = XCAR (XCAR (object));
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
705 if (NILP (carcar) || VECTORP (carcar))
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
706 object = XCDR (object);
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
707 }
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
708 }
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
709
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
710 /* If the contents are (KEYMAP . ELEMENT), go indirect. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 else
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
712 {
30134
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
713 Lisp_Object map;
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
714 map = get_keymap (Fcar_safe (object), 0, autoload);
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
715 return (!CONSP (map) ? object /* Invalid keymap */
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
716 : access_keymap (map, Fcdr (object), 0, 0, autoload));
25128
2563b35e613f (get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents: 24572
diff changeset
717 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720
31232
5213900983ed (store_in_keymap): Add `static' to declaration.
Dave Love <fx@gnu.org>
parents: 31208
diff changeset
721 static Lisp_Object
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722 store_in_keymap (keymap, idx, def)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 register Lisp_Object idx;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 register Lisp_Object def;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 {
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
727 /* Flush any reverse-map cache. */
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
728 where_is_cache = Qnil;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
729 where_is_cache_keymaps = Qt;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
730
10367
e1c7a3f0c15f (store_in_keymap): Copy a cons only if car is a string.
Richard M. Stallman <rms@gnu.org>
parents: 10305
diff changeset
731 /* If we are preparing to dump, and DEF is a menu element
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
732 with a menu item indicator, copy it to ensure it is not pure. */
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
733 if (CONSP (def) && PURE_P (def)
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
734 && (EQ (XCAR (def), Qmenu_item) || STRINGP (XCAR (def))))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
735 def = Fcons (XCAR (def), XCDR (def));
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
736
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
737 if (!CONSP (keymap) || !EQ (XCAR (keymap), Qkeymap))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
738 error ("attempt to define a key in a non-keymap");
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
739
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 /* If idx is a list (some sort of mouse click, perhaps?),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 the index we want to use is the car of the list, which
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 ought to be a symbol. */
1315
884c3d7e7172 * keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents: 1264
diff changeset
743 idx = EVENT_HEAD (idx);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
745 /* If idx is a symbol, it might have modifiers, which need to
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
746 be put in the canonical order. */
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
747 if (SYMBOLP (idx))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
748 idx = reorder_modifiers (idx);
3515
9d0af0f2dc0d (access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents: 3425
diff changeset
749 else if (INTEGERP (idx))
9d0af0f2dc0d (access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents: 3425
diff changeset
750 /* Clobber the high bits that can be present on a machine
9d0af0f2dc0d (access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents: 3425
diff changeset
751 with more than 24 bits of integer. */
9312
dfaf1d41e53d (synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents: 9273
diff changeset
752 XSETFASTINT (idx, XINT (idx) & (CHAR_META | (CHAR_META - 1)));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
754 /* Scan the keymap for a binding of idx. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
755 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
756 Lisp_Object tail;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
758 /* The cons after which we should insert new bindings. If the
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
759 keymap has a table element, we record its position here, so new
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
760 bindings will go after it; this way, the table will stay
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
761 towards the front of the alist and character lookups in dense
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
762 keymaps will remain fast. Otherwise, this just points at the
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
763 front of the keymap. */
6502
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
764 Lisp_Object insertion_point;
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
765
6502
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
766 insertion_point = keymap;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
767 for (tail = XCDR (keymap); CONSP (tail); tail = XCDR (tail))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
768 {
6502
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
769 Lisp_Object elt;
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
770
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
771 elt = XCAR (tail);
9973
1d5a908f201e (access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9957
diff changeset
772 if (VECTORP (elt))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
773 {
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
774 if (NATNUMP (idx) && XFASTINT (idx) < ASIZE (elt))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
775 {
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
776 ASET (elt, XFASTINT (idx), def);
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
777 return def;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
778 }
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
779 insertion_point = tail;
9973
1d5a908f201e (access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9957
diff changeset
780 }
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
781 else if (CHAR_TABLE_P (elt))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
782 {
17932
78a128b99e05 (access_keymap, store_in_keymap): Don't look in a char-table
Richard M. Stallman <rms@gnu.org>
parents: 17861
diff changeset
783 /* Character codes with modifiers
78a128b99e05 (access_keymap, store_in_keymap): Don't look in a char-table
Richard M. Stallman <rms@gnu.org>
parents: 17861
diff changeset
784 are not included in a char-table.
78a128b99e05 (access_keymap, store_in_keymap): Don't look in a char-table
Richard M. Stallman <rms@gnu.org>
parents: 17861
diff changeset
785 All character codes without modifiers are included. */
41593
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
786 if (NATNUMP (idx) && !(XFASTINT (idx) & CHAR_MODIFIER_MASK))
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
787 {
41593
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
788 Faset (elt, idx,
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
789 /* `nil' has a special meaning for char-tables, so
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
790 we use something else to record an explicitly
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
791 unbound entry. */
bc65be224d92 (access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41387
diff changeset
792 NILP (def) ? Qt : def);
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
793 return def;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
794 }
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
795 insertion_point = tail;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
796 }
9973
1d5a908f201e (access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9957
diff changeset
797 else if (CONSP (elt))
1d5a908f201e (access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9957
diff changeset
798 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
799 if (EQ (idx, XCAR (elt)))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
800 {
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
801 XSETCDR (elt, def);
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
802 return def;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
803 }
9973
1d5a908f201e (access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9957
diff changeset
804 }
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
805 else if (EQ (elt, Qkeymap))
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
806 /* If we find a 'keymap' symbol in the spine of KEYMAP,
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
807 then we must have found the start of a second keymap
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
808 being used as the tail of KEYMAP, and a binding for IDX
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
809 should be inserted before it. */
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
810 goto keymap_end;
1441
929409595312 * keymap.c (store_in_keymap): Don't forget to QUIT in the
Jim Blandy <jimb@redhat.com>
parents: 1388
diff changeset
811
929409595312 * keymap.c (store_in_keymap): Don't forget to QUIT in the
Jim Blandy <jimb@redhat.com>
parents: 1388
diff changeset
812 QUIT;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
813 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
814
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
815 keymap_end:
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
816 /* We have scanned the entire keymap, and not found a binding for
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
817 IDX. Let's add one. */
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
818 XSETCDR (insertion_point,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
819 Fcons (Fcons (idx, def), XCDR (insertion_point)));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 }
32038
0cb9cab990cb (keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31989
diff changeset
821
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822 return def;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824
39837
ccaa40660e40 (Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39702
diff changeset
825 EXFUN (Fcopy_keymap, 1);
ccaa40660e40 (Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39702
diff changeset
826
20319
81424cf4d446 (copy_keymap_1): Fix return type.
Andreas Schwab <schwab@suse.de>
parents: 20076
diff changeset
827 void
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
828 copy_keymap_1 (chartable, idx, elt)
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
829 Lisp_Object chartable, idx, elt;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
830 {
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
831 if (CONSP (elt) && EQ (XCAR (elt), Qkeymap))
17861
f84a12392eab (copy_keymap_1): Do nothing if ELT isn't a keymap.
Richard M. Stallman <rms@gnu.org>
parents: 17832
diff changeset
832 Faset (chartable, idx, Fcopy_keymap (elt));
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
833 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
834
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 DEFUN ("copy-keymap", Fcopy_keymap, Scopy_keymap, 1, 1, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
836 doc: /* Return a copy of the keymap KEYMAP.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
837 The copy starts out with the same definitions of KEYMAP,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
838 but changing either the copy or KEYMAP does not affect the other.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
839 Any key definitions that are subkeymaps are recursively copied.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
840 However, a key definition which is a symbol whose definition is a keymap
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
841 is not copied. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
842 (keymap)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 {
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
845 /* FIXME: This doesn't properly copy menu-items in vectors. */
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
846 /* FIXME: This also copies the parent keymap. */
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
847
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 register Lisp_Object copy, tail;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
849
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
850 copy = Fcopy_alist (get_keymap (keymap, 1, 0));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
852 for (tail = copy; CONSP (tail); tail = XCDR (tail))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 {
6502
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
854 Lisp_Object elt;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
856 elt = XCAR (tail);
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
857 if (CHAR_TABLE_P (elt))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
858 {
20076
374e09781f08 (Faccessible_keymaps): Avoid alloca for fixed-size array.
Karl Heuer <kwzh@gnu.org>
parents: 20070
diff changeset
859 Lisp_Object indices[3];
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
860
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
861 elt = Fcopy_sequence (elt);
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
862 XSETCAR (tail, elt);
18142
c9bd973ca168 (Fcopy_keymap): After copying a sub-char-table, do store the copy.
Richard M. Stallman <rms@gnu.org>
parents: 17932
diff changeset
863
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
864 map_char_table (copy_keymap_1, Qnil, elt, elt, 0, indices);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
865 }
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
866 else if (VECTORP (elt))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
868 int i;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
870 elt = Fcopy_sequence (elt);
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
871 XSETCAR (tail, elt);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
873 for (i = 0; i < ASIZE (elt); i++)
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
874 if (CONSP (AREF (elt, i)) && EQ (XCAR (AREF (elt, i)), Qkeymap))
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
875 ASET (elt, i, Fcopy_keymap (AREF (elt, i)));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 }
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
877 else if (CONSP (elt) && CONSP (XCDR (elt)))
6456
9854df0e91e1 (Fcopy_keymap): Account for menus and equiv-key cache.
Karl Heuer <kwzh@gnu.org>
parents: 6021
diff changeset
878 {
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
879 Lisp_Object tem;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
880 tem = XCDR (elt);
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
881
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
882 /* Is this a new format menu item. */
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
883 if (EQ (XCAR (tem),Qmenu_item))
6456
9854df0e91e1 (Fcopy_keymap): Account for menus and equiv-key cache.
Karl Heuer <kwzh@gnu.org>
parents: 6021
diff changeset
884 {
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
885 /* Copy cell with menu-item marker. */
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
886 XSETCDR (elt,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
887 Fcons (XCAR (tem), XCDR (tem)));
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
888 elt = XCDR (elt);
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
889 tem = XCDR (elt);
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
890 if (CONSP (tem))
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
891 {
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
892 /* Copy cell with menu-item name. */
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
893 XSETCDR (elt,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
894 Fcons (XCAR (tem), XCDR (tem)));
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
895 elt = XCDR (elt);
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
896 tem = XCDR (elt);
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
897 };
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
898 if (CONSP (tem))
6456
9854df0e91e1 (Fcopy_keymap): Account for menus and equiv-key cache.
Karl Heuer <kwzh@gnu.org>
parents: 6021
diff changeset
899 {
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
900 /* Copy cell with binding and if the binding is a keymap,
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
901 copy that. */
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
902 XSETCDR (elt,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
903 Fcons (XCAR (tem), XCDR (tem)));
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
904 elt = XCDR (elt);
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
905 tem = XCAR (elt);
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
906 if (CONSP (tem) && EQ (XCAR (tem), Qkeymap))
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
907 XSETCAR (elt, Fcopy_keymap (tem));
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
908 tem = XCDR (elt);
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
909 if (CONSP (tem) && CONSP (XCAR (tem)))
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
910 /* Delete cache for key equivalences. */
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
911 XSETCDR (elt, XCDR (tem));
6456
9854df0e91e1 (Fcopy_keymap): Account for menus and equiv-key cache.
Karl Heuer <kwzh@gnu.org>
parents: 6021
diff changeset
912 }
9854df0e91e1 (Fcopy_keymap): Account for menus and equiv-key cache.
Karl Heuer <kwzh@gnu.org>
parents: 6021
diff changeset
913 }
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
914 else
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
915 {
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
916 /* It may be an old fomat menu item.
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
917 Skip the optional menu string.
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
918 */
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
919 if (STRINGP (XCAR (tem)))
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
920 {
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
921 /* Copy the cell, since copy-alist didn't go this deep. */
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
922 XSETCDR (elt,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
923 Fcons (XCAR (tem), XCDR (tem)));
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
924 elt = XCDR (elt);
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
925 tem = XCDR (elt);
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
926 /* Also skip the optional menu help string. */
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
927 if (CONSP (tem) && STRINGP (XCAR (tem)))
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
928 {
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
929 XSETCDR (elt,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
930 Fcons (XCAR (tem), XCDR (tem)));
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
931 elt = XCDR (elt);
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
932 tem = XCDR (elt);
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
933 }
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
934 /* There may also be a list that caches key equivalences.
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
935 Just delete it for the new keymap. */
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
936 if (CONSP (tem)
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
937 && CONSP (XCAR (tem))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
938 && (NILP (XCAR (XCAR (tem)))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
939 || VECTORP (XCAR (XCAR (tem)))))
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
940 XSETCDR (elt, XCDR (tem));
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
941 }
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
942 if (CONSP (elt)
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
943 && CONSP (XCDR (elt))
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
944 && EQ (XCAR (XCDR (elt)), Qkeymap))
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
945 XSETCDR (elt, Fcopy_keymap (XCDR (elt)));
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
946 }
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
947
6456
9854df0e91e1 (Fcopy_keymap): Account for menus and equiv-key cache.
Karl Heuer <kwzh@gnu.org>
parents: 6021
diff changeset
948 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
949 }
39837
ccaa40660e40 (Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39702
diff changeset
950
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 return copy;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
953
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
954 /* Simple Keymap mutators and accessors. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
955
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
956 /* GC is possible in this function if it autoloads a keymap. */
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
957
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 DEFUN ("define-key", Fdefine_key, Sdefine_key, 3, 3, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
959 doc: /* Args KEYMAP, KEY, DEF. Define key sequence KEY, in KEYMAP, as DEF.
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
960 KEYMAP is a keymap.
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
961
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
962 KEY is a string or a vector of symbols and characters meaning a
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
963 sequence of keystrokes and events. Non-ASCII characters with codes
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
964 above 127 (such as ISO Latin-1) can be included if you use a vector.
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
965
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
966 DEF is anything that can be a key's definition:
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
967 nil (means key is undefined in this keymap),
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
968 a command (a Lisp function suitable for interactive calling)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
969 a string (treated as a keyboard macro),
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
970 a keymap (to define a prefix key),
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
971 a symbol. When the key is looked up, the symbol will stand for its
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
972 function definition, which should at that time be one of the above,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
973 or another symbol whose function definition is used, etc.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
974 a cons (STRING . DEFN), meaning that DEFN is the definition
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
975 (DEFN should be a valid definition in its own right),
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
976 or a cons (KEYMAP . CHAR), meaning use definition of CHAR in map KEYMAP.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
977
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
978 If KEYMAP is a sparse keymap, the pair binding KEY to DEF is added at
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
979 the front of KEYMAP. */)
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
980 (keymap, key, def)
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
981 Lisp_Object keymap;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 Lisp_Object key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983 Lisp_Object def;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985 register int idx;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986 register Lisp_Object c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 register Lisp_Object cmd;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 int metized = 0;
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
989 int meta_bit;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 int length;
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
991 struct gcpro gcpro1, gcpro2, gcpro3;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
993 keymap = get_keymap (keymap, 1, 1);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
995 if (!VECTORP (key) && !STRINGP (key))
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
996 key = wrong_type_argument (Qarrayp, key);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
998 length = XFASTINT (Flength (key));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999 if (length == 0)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1002 /* Check for valid [remap COMMAND] bindings. */
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1003 if (VECTORP (key) && EQ (AREF (key, 0), Qremap)
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1004 && (length != 2 || !SYMBOLP (AREF (key, 1))))
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1005 wrong_type_argument (Qvectorp, key);
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1006
12297
fe458a8ecfa2 (Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12262
diff changeset
1007 if (SYMBOLP (def) && !EQ (Vdefine_key_rebound_commands, Qt))
fe458a8ecfa2 (Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12262
diff changeset
1008 Vdefine_key_rebound_commands = Fcons (def, Vdefine_key_rebound_commands);
fe458a8ecfa2 (Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12262
diff changeset
1009
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
1010 GCPRO3 (keymap, key, def);
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
1011
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
1012 if (VECTORP (key))
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1013 meta_bit = meta_modifier;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1014 else
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1015 meta_bit = 0x80;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1016
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 idx = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 while (1)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 c = Faref (key, make_number (idx));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021
10840
3a7336f191b9 (Fdefine_key): Handle Lucid-style (crtl backspace) etc.
Richard M. Stallman <rms@gnu.org>
parents: 10810
diff changeset
1022 if (CONSP (c) && lucid_event_type_list_p (c))
12151
43b030e896eb (Flookup_key, Fdefine_key): Use Fevent_convert_list.
Karl Heuer <kwzh@gnu.org>
parents: 11973
diff changeset
1023 c = Fevent_convert_list (c);
10840
3a7336f191b9 (Fdefine_key): Handle Lucid-style (crtl backspace) etc.
Richard M. Stallman <rms@gnu.org>
parents: 10810
diff changeset
1024
42404
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1025 if (SYMBOLP (c))
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1026 silly_event_symbol_error (c);
42378
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
1027
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
1028 if (INTEGERP (c)
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1029 && (XINT (c) & meta_bit)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 && !metized)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 c = meta_prefix_char;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 metized = 1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 {
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
1037 if (INTEGERP (c))
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1038 XSETINT (c, XINT (c) & ~meta_bit);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 metized = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 idx++;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1044 if (!INTEGERP (c) && !SYMBOLP (c) && !CONSP (c))
42378
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
1045 error ("Key sequence contains invalid event");
6473
76bb655df959 (Fdefine_key): Check for non-events in keyvector.
Karl Heuer <kwzh@gnu.org>
parents: 6457
diff changeset
1046
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1047 if (idx == length)
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
1048 RETURN_UNGCPRO (store_in_keymap (keymap, c, def));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1049
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
1050 cmd = access_keymap (keymap, c, 0, 1, 1);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1052 /* If this key is undefined, make it a prefix. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1053 if (NILP (cmd))
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1054 cmd = define_as_prefix (keymap, c);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1055
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1056 keymap = get_keymap (cmd, 0, 1);
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1057 if (!CONSP (keymap))
6502
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1058 /* We must use Fkey_description rather than just passing key to
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1059 error; key might be a vector, not a string. */
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1060 error ("Key sequence %s uses invalid prefix characters",
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1061 XSTRING (Fkey_description (key))->data);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1065 /* This function may GC (it calls Fkey_binding). */
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1066
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1067 DEFUN ("remap-command", Fremap_command, Sremap_command, 1, 1, 0,
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1068 doc: /* Return the remapping for command COMMAND in current keymaps.
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1069 Returns nil if COMMAND is not remapped. */)
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1070 (command)
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1071 Lisp_Object command;
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1072 {
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1073 /* This will GCPRO the command argument. */
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1074 ASET (remap_command_vector, 1, command);
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1075 return Fkey_binding (remap_command_vector, Qnil, Qt);
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1076 }
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1077
42206
0f4506820432 Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41593
diff changeset
1078 /* Value is number if KEY is too long; nil if valid but has no definition. */
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1079 /* GC is possible in this function if it autoloads a keymap. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1081 DEFUN ("lookup-key", Flookup_key, Slookup_key, 2, 3, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1082 doc: /* In keymap KEYMAP, look up key sequence KEY. Return the definition.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1083 nil means undefined. See doc of `define-key' for kinds of definitions.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1084
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1085 A number as value means KEY is "too long";
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1086 that is, characters or symbols in it except for the last one
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1087 fail to be a valid sequence of prefix characters in KEYMAP.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1088 The number is how many characters at the front of KEY
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1089 it takes to reach a non-prefix command.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1090
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1091 Normally, `lookup-key' ignores bindings for t, which act as default
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1092 bindings, used when nothing else in the keymap applies; this makes it
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1093 usable as a general function for probing keymaps. However, if the
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1094 third optional argument ACCEPT-DEFAULT is non-nil, `lookup-key' will
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1095 recognize the default bindings, just as `read-key-sequence' does. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1096 (keymap, key, accept_default)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097 register Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 Lisp_Object key;
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1099 Lisp_Object accept_default;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 register int idx;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 register Lisp_Object cmd;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 register Lisp_Object c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104 int length;
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1105 int t_ok = !NILP (accept_default);
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1106 struct gcpro gcpro1;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1108 keymap = get_keymap (keymap, 1, 1);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1110 /* Perform command remapping initiated by Fremap_command directly.
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1111 This is strictly not necessary, but it is faster and it returns
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1112 nil instead of 1 if KEYMAP doesn't contain command remappings. */
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1113 if (EQ (key, remap_command_vector))
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1114 {
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1115 /* KEY has format [remap COMMAND].
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1116 Lookup `remap' in KEYMAP; result is nil or a keymap containing
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1117 command remappings. Then lookup COMMAND in that keymap. */
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1118 if ((keymap = access_keymap (keymap, Qremap, t_ok, 0, 1), !NILP (keymap))
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1119 && (keymap = get_keymap (keymap, 0, 1), CONSP (keymap)))
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1120 return access_keymap (keymap, AREF (key, 1), t_ok, 0, 1);
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1121 return Qnil;
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1122 }
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1123
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
1124 if (!VECTORP (key) && !STRINGP (key))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 key = wrong_type_argument (Qarrayp, key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
1127 length = XFASTINT (Flength (key));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128 if (length == 0)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 return keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1131 GCPRO1 (key);
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1132
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 idx = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134 while (1)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135 {
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
1136 c = Faref (key, make_number (idx++));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137
10840
3a7336f191b9 (Fdefine_key): Handle Lucid-style (crtl backspace) etc.
Richard M. Stallman <rms@gnu.org>
parents: 10810
diff changeset
1138 if (CONSP (c) && lucid_event_type_list_p (c))
12151
43b030e896eb (Flookup_key, Fdefine_key): Use Fevent_convert_list.
Karl Heuer <kwzh@gnu.org>
parents: 11973
diff changeset
1139 c = Fevent_convert_list (c);
10840
3a7336f191b9 (Fdefine_key): Handle Lucid-style (crtl backspace) etc.
Richard M. Stallman <rms@gnu.org>
parents: 10810
diff changeset
1140
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
1141 /* Turn the 8th bit of string chars into a meta modifier. */
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
1142 if (XINT (c) & 0x80 && STRINGP (key))
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
1143 XSETINT (c, (XINT (c) | meta_modifier) & ~0x80);
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
1144
43504
20832766c3e1 (Flookup_key): Fixed problem in 2001-12-28 patch:
Kim F. Storm <storm@cua.dk>
parents: 43494
diff changeset
1145 /* Allow string since binding for `menu-bar-select-buffer'
20832766c3e1 (Flookup_key): Fixed problem in 2001-12-28 patch:
Kim F. Storm <storm@cua.dk>
parents: 43494
diff changeset
1146 includes the buffer name in the key sequence. */
20832766c3e1 (Flookup_key): Fixed problem in 2001-12-28 patch:
Kim F. Storm <storm@cua.dk>
parents: 43494
diff changeset
1147 if (!INTEGERP (c) && !SYMBOLP (c) && !CONSP (c) && !STRINGP (c))
42378
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
1148 error ("Key sequence contains invalid event");
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
1149
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
1150 cmd = access_keymap (keymap, c, t_ok, 0, 1);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 if (idx == length)
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1152 RETURN_UNGCPRO (cmd);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1154 keymap = get_keymap (cmd, 0, 1);
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1155 if (!CONSP (keymap))
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1156 RETURN_UNGCPRO (make_number (idx));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1157
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1158 QUIT;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1161
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1162 /* Make KEYMAP define event C as a keymap (i.e., as a prefix).
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1163 Assume that currently it does not define C at all.
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1164 Return the keymap. */
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1165
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1166 static Lisp_Object
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1167 define_as_prefix (keymap, c)
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1168 Lisp_Object keymap, c;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1169 {
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
1170 Lisp_Object cmd;
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1171
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1172 cmd = Fmake_sparse_keymap (Qnil);
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1173 /* If this key is defined as a prefix in an inherited keymap,
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1174 make it a prefix in this map, and make its definition
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1175 inherit the other prefix definition. */
32476
9b2a0dc393a4 * keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32145
diff changeset
1176 cmd = nconc2 (cmd, access_keymap (keymap, c, 0, 0, 0));
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1177 store_in_keymap (keymap, c, cmd);
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1178
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1179 return cmd;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1180 }
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
1181
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1182 /* Append a key to the end of a key sequence. We always make a vector. */
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1183
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 Lisp_Object
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 append_key (key_sequence, key)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 Lisp_Object key_sequence, key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 Lisp_Object args[2];
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 args[0] = key_sequence;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1192 args[1] = Fcons (key, Qnil);
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1193 return Fvconcat (2, args);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1195
42404
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1196 /* Given a event type C which is a symbol,
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1197 signal an error if is a mistake such as RET or M-RET or C-DEL, etc. */
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1198
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1199 static void
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1200 silly_event_symbol_error (c)
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1201 Lisp_Object c;
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1202 {
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1203 Lisp_Object parsed, base, name, assoc;
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1204 int modifiers;
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1205
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1206 parsed = parse_modifiers (c);
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1207 modifiers = (int) XUINT (XCAR (XCDR (parsed)));
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1208 base = XCAR (parsed);
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1209 name = Fsymbol_name (base);
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1210 /* This alist includes elements such as ("RET" . "\\r"). */
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1211 assoc = Fassoc (name, exclude_keys);
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1212
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1213 if (! NILP (assoc))
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1214 {
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1215 char new_mods[sizeof ("\\A-\\C-\\H-\\M-\\S-\\s-")];
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1216 char *p = new_mods;
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1217 Lisp_Object keystring;
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1218 if (modifiers & alt_modifier)
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1219 { *p++ = '\\'; *p++ = 'A'; *p++ = '-'; }
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1220 if (modifiers & ctrl_modifier)
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1221 { *p++ = '\\'; *p++ = 'C'; *p++ = '-'; }
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1222 if (modifiers & hyper_modifier)
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1223 { *p++ = '\\'; *p++ = 'H'; *p++ = '-'; }
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1224 if (modifiers & meta_modifier)
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1225 { *p++ = '\\'; *p++ = 'M'; *p++ = '-'; }
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1226 if (modifiers & shift_modifier)
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1227 { *p++ = '\\'; *p++ = 'S'; *p++ = '-'; }
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1228 if (modifiers & super_modifier)
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1229 { *p++ = '\\'; *p++ = 's'; *p++ = '-'; }
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1230 *p = 0;
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1231
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1232 c = reorder_modifiers (c);
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1233 keystring = concat2 (build_string (new_mods), XCDR (assoc));
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1234
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1235 error ((modifiers & ~meta_modifier
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1236 ? "To bind the key %s, use [?%s], not [%s]"
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1237 : "To bind the key %s, use \"%s\", not [%s]"),
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1238 XSYMBOL (c)->name->data, XSTRING (keystring)->data,
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1239 XSYMBOL (c)->name->data);
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1240 }
ca040d0f5c67 (silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents: 42381
diff changeset
1241 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1243 /* Global, local, and minor mode keymap stuff. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1244
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1245 /* We can't put these variables inside current_minor_maps, since under
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1246 some systems, static gets macro-defined to be the empty string.
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1247 Ickypoo. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1248 static Lisp_Object *cmm_modes, *cmm_maps;
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1249 static int cmm_size;
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1250
12542
f86a10208f7e (current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents: 12297
diff changeset
1251 /* Error handler used in current_minor_maps. */
f86a10208f7e (current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents: 12297
diff changeset
1252 static Lisp_Object
f86a10208f7e (current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents: 12297
diff changeset
1253 current_minor_maps_error ()
f86a10208f7e (current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents: 12297
diff changeset
1254 {
f86a10208f7e (current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents: 12297
diff changeset
1255 return Qnil;
f86a10208f7e (current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents: 12297
diff changeset
1256 }
f86a10208f7e (current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents: 12297
diff changeset
1257
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1258 /* Store a pointer to an array of the keymaps of the currently active
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1259 minor modes in *buf, and return the number of maps it contains.
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1260
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1261 This function always returns a pointer to the same buffer, and may
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1262 free or reallocate it, so if you want to keep it for a long time or
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1263 hand it out to lisp code, copy it. This procedure will be called
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1264 for every key sequence read, so the nice lispy approach (return a
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1265 new assoclist, list, what have you) for each invocation would
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1266 result in a lot of consing over time.
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1267
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1268 If we used xrealloc/xmalloc and ran out of memory, they would throw
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1269 back to the command loop, which would try to read a key sequence,
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1270 which would call this function again, resulting in an infinite
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1271 loop. Instead, we'll use realloc/malloc and silently truncate the
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1272 list, let the key sequence be read, and hope some other piece of
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1273 code signals the error. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1274 int
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1275 current_minor_maps (modeptr, mapptr)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1276 Lisp_Object **modeptr, **mapptr;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1277 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1278 int i = 0;
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1279 int list_number = 0;
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1280 Lisp_Object alist, assoc, var, val;
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1281 Lisp_Object lists[2];
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1282
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1283 lists[0] = Vminor_mode_overriding_map_alist;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1284 lists[1] = Vminor_mode_map_alist;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1285
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1286 for (list_number = 0; list_number < 2; list_number++)
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1287 for (alist = lists[list_number];
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1288 CONSP (alist);
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
1289 alist = XCDR (alist))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
1290 if ((assoc = XCAR (alist), CONSP (assoc))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
1291 && (var = XCAR (assoc), SYMBOLP (var))
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1292 && (val = find_symbol_value (var), !EQ (val, Qunbound))
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1293 && !NILP (val))
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1294 {
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1295 Lisp_Object temp;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1296
20576
b916d29222a3 (current_minor_maps):
Richard M. Stallman <rms@gnu.org>
parents: 20517
diff changeset
1297 /* If a variable has an entry in Vminor_mode_overriding_map_alist,
b916d29222a3 (current_minor_maps):
Richard M. Stallman <rms@gnu.org>
parents: 20517
diff changeset
1298 and also an entry in Vminor_mode_map_alist,
b916d29222a3 (current_minor_maps):
Richard M. Stallman <rms@gnu.org>
parents: 20517
diff changeset
1299 ignore the latter. */
b916d29222a3 (current_minor_maps):
Richard M. Stallman <rms@gnu.org>
parents: 20517
diff changeset
1300 if (list_number == 1)
b916d29222a3 (current_minor_maps):
Richard M. Stallman <rms@gnu.org>
parents: 20517
diff changeset
1301 {
b916d29222a3 (current_minor_maps):
Richard M. Stallman <rms@gnu.org>
parents: 20517
diff changeset
1302 val = assq_no_quit (var, lists[0]);
b916d29222a3 (current_minor_maps):
Richard M. Stallman <rms@gnu.org>
parents: 20517
diff changeset
1303 if (!NILP (val))
40037
80858508ebfd (current_minor_maps): `override' only shadows its
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39973
diff changeset
1304 continue;
20576
b916d29222a3 (current_minor_maps):
Richard M. Stallman <rms@gnu.org>
parents: 20517
diff changeset
1305 }
b916d29222a3 (current_minor_maps):
Richard M. Stallman <rms@gnu.org>
parents: 20517
diff changeset
1306
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1307 if (i >= cmm_size)
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1308 {
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1309 Lisp_Object *newmodes, *newmaps;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1310
34359
09d0a988515c (current_minor_maps): Use malloc. Prevent a leak.
Gerd Moellmann <gerd@gnu.org>
parents: 32992
diff changeset
1311 /* Use malloc/realloc here. See the comment above
09d0a988515c (current_minor_maps): Use malloc. Prevent a leak.
Gerd Moellmann <gerd@gnu.org>
parents: 32992
diff changeset
1312 this function. */
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1313 if (cmm_maps)
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1314 {
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1315 BLOCK_INPUT;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1316 cmm_size *= 2;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1317 newmodes
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1318 = (Lisp_Object *) realloc (cmm_modes,
34359
09d0a988515c (current_minor_maps): Use malloc. Prevent a leak.
Gerd Moellmann <gerd@gnu.org>
parents: 32992
diff changeset
1319 cmm_size * sizeof *newmodes);
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1320 newmaps
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1321 = (Lisp_Object *) realloc (cmm_maps,
34359
09d0a988515c (current_minor_maps): Use malloc. Prevent a leak.
Gerd Moellmann <gerd@gnu.org>
parents: 32992
diff changeset
1322 cmm_size * sizeof *newmaps);
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1323 UNBLOCK_INPUT;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1324 }
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1325 else
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1326 {
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1327 BLOCK_INPUT;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1328 cmm_size = 30;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1329 newmodes
34359
09d0a988515c (current_minor_maps): Use malloc. Prevent a leak.
Gerd Moellmann <gerd@gnu.org>
parents: 32992
diff changeset
1330 = (Lisp_Object *) malloc (cmm_size * sizeof *newmodes);
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1331 newmaps
34359
09d0a988515c (current_minor_maps): Use malloc. Prevent a leak.
Gerd Moellmann <gerd@gnu.org>
parents: 32992
diff changeset
1332 = (Lisp_Object *) malloc (cmm_size * sizeof *newmaps);
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1333 UNBLOCK_INPUT;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1334 }
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1335
34359
09d0a988515c (current_minor_maps): Use malloc. Prevent a leak.
Gerd Moellmann <gerd@gnu.org>
parents: 32992
diff changeset
1336 if (newmodes)
09d0a988515c (current_minor_maps): Use malloc. Prevent a leak.
Gerd Moellmann <gerd@gnu.org>
parents: 32992
diff changeset
1337 cmm_modes = newmodes;
09d0a988515c (current_minor_maps): Use malloc. Prevent a leak.
Gerd Moellmann <gerd@gnu.org>
parents: 32992
diff changeset
1338 if (newmaps)
09d0a988515c (current_minor_maps): Use malloc. Prevent a leak.
Gerd Moellmann <gerd@gnu.org>
parents: 32992
diff changeset
1339 cmm_maps = newmaps;
09d0a988515c (current_minor_maps): Use malloc. Prevent a leak.
Gerd Moellmann <gerd@gnu.org>
parents: 32992
diff changeset
1340
09d0a988515c (current_minor_maps): Use malloc. Prevent a leak.
Gerd Moellmann <gerd@gnu.org>
parents: 32992
diff changeset
1341 if (newmodes == NULL || newmaps == NULL)
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1342 break;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1343 }
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1344
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1345 /* Get the keymap definition--or nil if it is not defined. */
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1346 temp = internal_condition_case_1 (Findirect_function,
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
1347 XCDR (assoc),
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1348 Qerror, current_minor_maps_error);
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1349 if (!NILP (temp))
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1350 {
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1351 cmm_modes[i] = var;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1352 cmm_maps [i] = temp;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1353 i++;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1354 }
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
1355 }
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1356
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1357 if (modeptr) *modeptr = cmm_modes;
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1358 if (mapptr) *mapptr = cmm_maps;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1359 return i;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1360 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1361
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1362 DEFUN ("current-active-maps", Fcurrent_active_maps, Scurrent_active_maps,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1363 0, 1, 0,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1364 doc: /* Return a list of the currently active keymaps.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1365 OLP if non-nil indicates that we should obey `overriding-local-map' and
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1366 `overriding-terminal-local-map'. */)
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1367 (olp)
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1368 Lisp_Object olp;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1369 {
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1370 Lisp_Object keymaps = Fcons (current_global_map, Qnil);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1371
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1372 if (!NILP (olp))
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1373 {
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1374 if (!NILP (Voverriding_local_map))
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1375 keymaps = Fcons (Voverriding_local_map, keymaps);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1376 if (!NILP (current_kboard->Voverriding_terminal_local_map))
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1377 keymaps = Fcons (current_kboard->Voverriding_terminal_local_map, keymaps);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1378 }
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1379 if (NILP (XCDR (keymaps)))
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1380 {
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1381 Lisp_Object local;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1382 Lisp_Object *maps;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1383 int nmaps, i;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1384
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1385 local = get_local_map (PT, current_buffer, Qlocal_map);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1386 if (!NILP (local))
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1387 keymaps = Fcons (local, keymaps);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1388
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1389 nmaps = current_minor_maps (0, &maps);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1390
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1391 for (i = --nmaps; i >= 0; i--)
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1392 if (!NILP (maps[i]))
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1393 keymaps = Fcons (maps[i], keymaps);
42510
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
1394
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
1395 local = get_local_map (PT, current_buffer, Qkeymap);
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
1396 if (!NILP (local))
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
1397 keymaps = Fcons (local, keymaps);
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1398 }
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1399
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1400 return keymaps;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1401 }
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1402
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1403 /* GC is possible in this function if it autoloads a keymap. */
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1404
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1405 DEFUN ("key-binding", Fkey_binding, Skey_binding, 1, 3, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1406 doc: /* Return the binding for command KEY in current keymaps.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1407 KEY is a string or vector, a sequence of keystrokes.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1408 The binding is probably a symbol with a function definition.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1409
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1410 Normally, `key-binding' ignores bindings for t, which act as default
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1411 bindings, used when nothing else in the keymap applies; this makes it
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1412 usable as a general function for probing keymaps. However, if the
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1413 optional second argument ACCEPT-DEFAULT is non-nil, `key-binding' does
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1414 recognize the default bindings, just as `read-key-sequence' does.
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1415
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1416 Like the normal command loop, `key-binding' will remap the command
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1417 resulting from looking up KEY by looking up the command in the
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1418 currrent keymaps. However, if the optional third argument NO-REMAP
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1419 is non-nil, `key-binding' returns the unmapped command. */)
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1420 (key, accept_default, no_remap)
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1421 Lisp_Object key, accept_default, no_remap;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1422 {
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1423 Lisp_Object *maps, value;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1424 int nmaps, i;
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1425 struct gcpro gcpro1;
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1426
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1427 GCPRO1 (key);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1428
12262
a7d5578ebb25 (Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents: 12151
diff changeset
1429 if (!NILP (current_kboard->Voverriding_terminal_local_map))
a7d5578ebb25 (Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents: 12151
diff changeset
1430 {
a7d5578ebb25 (Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents: 12151
diff changeset
1431 value = Flookup_key (current_kboard->Voverriding_terminal_local_map,
a7d5578ebb25 (Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents: 12151
diff changeset
1432 key, accept_default);
a7d5578ebb25 (Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents: 12151
diff changeset
1433 if (! NILP (value) && !INTEGERP (value))
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1434 goto done;
12262
a7d5578ebb25 (Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents: 12151
diff changeset
1435 }
a7d5578ebb25 (Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents: 12151
diff changeset
1436 else if (!NILP (Voverriding_local_map))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437 {
5613
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1438 value = Flookup_key (Voverriding_local_map, key, accept_default);
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
1439 if (! NILP (value) && !INTEGERP (value))
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1440 goto done;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441 }
5613
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1442 else
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1443 {
13771
28790743a5a3 (Fkey_binding): Handle text-property keymaps.
Karl Heuer <kwzh@gnu.org>
parents: 13343
diff changeset
1444 Lisp_Object local;
28790743a5a3 (Fkey_binding): Handle text-property keymaps.
Karl Heuer <kwzh@gnu.org>
parents: 13343
diff changeset
1445
42510
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
1446 local = get_local_map (PT, current_buffer, Qkeymap);
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
1447 if (! NILP (local))
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
1448 {
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
1449 value = Flookup_key (local, key, accept_default);
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
1450 if (! NILP (value) && !INTEGERP (value))
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1451 goto done;
42510
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
1452 }
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
1453
5613
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1454 nmaps = current_minor_maps (0, &maps);
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1455 /* Note that all these maps are GCPRO'd
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1456 in the places where we found them. */
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1457
5613
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1458 for (i = 0; i < nmaps; i++)
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1459 if (! NILP (maps[i]))
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1460 {
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1461 value = Flookup_key (maps[i], key, accept_default);
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
1462 if (! NILP (value) && !INTEGERP (value))
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1463 goto done;
5613
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1464 }
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1465
35258
f585b46c055a Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents: 34906
diff changeset
1466 local = get_local_map (PT, current_buffer, Qlocal_map);
13771
28790743a5a3 (Fkey_binding): Handle text-property keymaps.
Karl Heuer <kwzh@gnu.org>
parents: 13343
diff changeset
1467 if (! NILP (local))
5613
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1468 {
13771
28790743a5a3 (Fkey_binding): Handle text-property keymaps.
Karl Heuer <kwzh@gnu.org>
parents: 13343
diff changeset
1469 value = Flookup_key (local, key, accept_default);
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
1470 if (! NILP (value) && !INTEGERP (value))
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1471 goto done;
5613
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1472 }
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
1473 }
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1474
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1475 value = Flookup_key (current_global_map, key, accept_default);
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1476
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1477 done:
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1478 UNGCPRO;
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1479 if (NILP (value) || INTEGERP (value))
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1480 return Qnil;
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1481
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1482 /* If the result of the ordinary keymap lookup is an interactive
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1483 command, look for a key binding (ie. remapping) for that command. */
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1484
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1485 if (NILP (no_remap) && SYMBOLP (value))
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1486 {
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1487 Lisp_Object value1;
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
1488 if (value1 = Fremap_command (value), !NILP (value1))
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1489 value = value1;
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1490 }
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1491
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
1492 return value;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1493 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1494
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1495 /* GC is possible in this function if it autoloads a keymap. */
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1496
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1497 DEFUN ("local-key-binding", Flocal_key_binding, Slocal_key_binding, 1, 2, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1498 doc: /* Return the binding for command KEYS in current local keymap only.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1499 KEYS is a string, a sequence of keystrokes.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1500 The binding is probably a symbol with a function definition.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1501
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1502 If optional argument ACCEPT-DEFAULT is non-nil, recognize default
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1503 bindings; see the description of `lookup-key' for more details about this. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1504 (keys, accept_default)
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1505 Lisp_Object keys, accept_default;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1506 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1507 register Lisp_Object map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1508 map = current_buffer->keymap;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1509 if (NILP (map))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1510 return Qnil;
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1511 return Flookup_key (map, keys, accept_default);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1512 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1513
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1514 /* GC is possible in this function if it autoloads a keymap. */
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1515
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1516 DEFUN ("global-key-binding", Fglobal_key_binding, Sglobal_key_binding, 1, 2, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1517 doc: /* Return the binding for command KEYS in current global keymap only.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1518 KEYS is a string, a sequence of keystrokes.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1519 The binding is probably a symbol with a function definition.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1520 This function's return values are the same as those of lookup-key
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1521 \(which see).
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1522
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1523 If optional argument ACCEPT-DEFAULT is non-nil, recognize default
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1524 bindings; see the description of `lookup-key' for more details about this. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1525 (keys, accept_default)
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1526 Lisp_Object keys, accept_default;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1527 {
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1528 return Flookup_key (current_global_map, keys, accept_default);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1529 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1530
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1531 /* GC is possible in this function if it autoloads a keymap. */
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1532
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1533 DEFUN ("minor-mode-key-binding", Fminor_mode_key_binding, Sminor_mode_key_binding, 1, 2, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1534 doc: /* Find the visible minor mode bindings of KEY.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1535 Return an alist of pairs (MODENAME . BINDING), where MODENAME is the
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1536 the symbol which names the minor mode binding KEY, and BINDING is
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1537 KEY's definition in that mode. In particular, if KEY has no
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1538 minor-mode bindings, return nil. If the first binding is a
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1539 non-prefix, all subsequent bindings will be omitted, since they would
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1540 be ignored. Similarly, the list doesn't include non-prefix bindings
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1541 that come after prefix bindings.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1542
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1543 If optional argument ACCEPT-DEFAULT is non-nil, recognize default
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1544 bindings; see the description of `lookup-key' for more details about this. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1545 (key, accept_default)
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1546 Lisp_Object key, accept_default;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1547 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1548 Lisp_Object *modes, *maps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1549 int nmaps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1550 Lisp_Object binding;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1551 int i, j;
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1552 struct gcpro gcpro1, gcpro2;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1553
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1554 nmaps = current_minor_maps (&modes, &maps);
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1555 /* Note that all these maps are GCPRO'd
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1556 in the places where we found them. */
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1557
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1558 binding = Qnil;
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1559 GCPRO2 (key, binding);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1560
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1561 for (i = j = 0; i < nmaps; i++)
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1562 if (!NILP (maps[i])
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1563 && !NILP (binding = Flookup_key (maps[i], key, accept_default))
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
1564 && !INTEGERP (binding))
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1565 {
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1566 if (KEYMAPP (binding))
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1567 maps[j++] = Fcons (modes[i], binding);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1568 else if (j == 0)
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1569 RETURN_UNGCPRO (Fcons (Fcons (modes[i], binding), Qnil));
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1570 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1571
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1572 UNGCPRO;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1573 return Flist (j, maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1574 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1575
23968
4c423f69142b (Fdefine_prefix_command): Accept a third argument NAME
Eli Zaretskii <eliz@gnu.org>
parents: 23953
diff changeset
1576 DEFUN ("define-prefix-command", Fdefine_prefix_command, Sdefine_prefix_command, 1, 3, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1577 doc: /* Define COMMAND as a prefix command. COMMAND should be a symbol.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1578 A new sparse keymap is stored as COMMAND's function definition and its value.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1579 If a second optional argument MAPVAR is given, the map is stored as
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1580 its value instead of as COMMAND's value; but COMMAND is still defined
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1581 as a function.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1582 The third optional argument NAME, if given, supplies a menu name
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1583 string for the map. This is required to use the keymap as a menu. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1584 (command, mapvar, name)
23968
4c423f69142b (Fdefine_prefix_command): Accept a third argument NAME
Eli Zaretskii <eliz@gnu.org>
parents: 23953
diff changeset
1585 Lisp_Object command, mapvar, name;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587 Lisp_Object map;
23968
4c423f69142b (Fdefine_prefix_command): Accept a third argument NAME
Eli Zaretskii <eliz@gnu.org>
parents: 23953
diff changeset
1588 map = Fmake_sparse_keymap (name);
14080
439185f0ef37 (Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents: 13947
diff changeset
1589 Ffset (command, map);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1590 if (!NILP (mapvar))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591 Fset (mapvar, map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592 else
14080
439185f0ef37 (Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents: 13947
diff changeset
1593 Fset (command, map);
439185f0ef37 (Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents: 13947
diff changeset
1594 return command;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1595 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1596
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597 DEFUN ("use-global-map", Fuse_global_map, Suse_global_map, 1, 1, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1598 doc: /* Select KEYMAP as the global keymap. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1599 (keymap)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1601 {
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1602 keymap = get_keymap (keymap, 1, 1);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1603 current_global_map = keymap;
8464
edbb014c600a (Fuse_global_map, Fuse_local_map): Call record_asynch_buffer_change.
Richard M. Stallman <rms@gnu.org>
parents: 8431
diff changeset
1604
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1607
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608 DEFUN ("use-local-map", Fuse_local_map, Suse_local_map, 1, 1, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1609 doc: /* Select KEYMAP as the local keymap.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1610 If KEYMAP is nil, that means no local keymap. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1611 (keymap)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1614 if (!NILP (keymap))
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1615 keymap = get_keymap (keymap, 1, 1);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617 current_buffer->keymap = keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1618
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1619 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1621
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1622 DEFUN ("current-local-map", Fcurrent_local_map, Scurrent_local_map, 0, 0, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1623 doc: /* Return current buffer's local keymap, or nil if it has none. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1624 ()
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1625 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 return current_buffer->keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1627 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1629 DEFUN ("current-global-map", Fcurrent_global_map, Scurrent_global_map, 0, 0, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1630 doc: /* Return the current global keymap. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1631 ()
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1632 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633 return current_global_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1634 }
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1635
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1636 DEFUN ("current-minor-mode-maps", Fcurrent_minor_mode_maps, Scurrent_minor_mode_maps, 0, 0, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1637 doc: /* Return a list of keymaps for the minor modes of the current buffer. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1638 ()
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1639 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1640 Lisp_Object *maps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1641 int nmaps = current_minor_maps (0, &maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1642
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1643 return Flist (nmaps, maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1644 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1646 /* Help functions for describing and documenting keymaps. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1647
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1648
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1649 static void
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1650 accessible_keymaps_1 (key, cmd, maps, tail, thisseq, is_metized)
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1651 Lisp_Object maps, tail, thisseq, key, cmd;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1652 int is_metized; /* If 1, `key' is assumed to be INTEGERP. */
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1653 {
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1654 Lisp_Object tem;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1655
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1656 cmd = get_keyelt (cmd, 0);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1657 if (NILP (cmd))
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1658 return;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1659
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1660 tem = get_keymap (cmd, 0, 0);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1661 if (CONSP (tem))
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1662 {
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1663 cmd = tem;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1664 /* Ignore keymaps that are already added to maps. */
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1665 tem = Frassq (cmd, maps);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1666 if (NILP (tem))
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1667 {
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1668 /* If the last key in thisseq is meta-prefix-char,
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1669 turn it into a meta-ized keystroke. We know
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1670 that the event we're about to append is an
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1671 ascii keystroke since we're processing a
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1672 keymap table. */
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1673 if (is_metized)
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1674 {
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1675 int meta_bit = meta_modifier;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1676 Lisp_Object last = make_number (XINT (Flength (thisseq)) - 1);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1677 tem = Fcopy_sequence (thisseq);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1678
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1679 Faset (tem, last, make_number (XINT (key) | meta_bit));
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1680
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1681 /* This new sequence is the same length as
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1682 thisseq, so stick it in the list right
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1683 after this one. */
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
1684 XSETCDR (tail,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
1685 Fcons (Fcons (tem, cmd), XCDR (tail)));
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1686 }
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1687 else
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1688 {
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1689 tem = append_key (thisseq, key);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1690 nconc2 (tail, Fcons (Fcons (tem, cmd), Qnil));
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1691 }
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1692 }
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1693 }
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1694 }
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1695
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1696 static void
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1697 accessible_keymaps_char_table (args, index, cmd)
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1698 Lisp_Object args, index, cmd;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1699 {
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1700 accessible_keymaps_1 (index, cmd,
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1701 XCAR (XCAR (args)),
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1702 XCAR (XCDR (args)),
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1703 XCDR (XCDR (args)),
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1704 XINT (XCDR (XCAR (args))));
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1705 }
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
1706
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1707 /* This function cannot GC. */
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1708
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1709 DEFUN ("accessible-keymaps", Faccessible_keymaps, Saccessible_keymaps,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1710 1, 2, 0,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1711 doc: /* Find all keymaps accessible via prefix characters from KEYMAP.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1712 Returns a list of elements of the form (KEYS . MAP), where the sequence
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1713 KEYS starting from KEYMAP gets you to MAP. These elements are ordered
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1714 so that the KEYS increase in length. The first element is ([] . KEYMAP).
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1715 An optional argument PREFIX, if non-nil, should be a key sequence;
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1716 then the value includes only maps for prefixes that start with PREFIX. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1717 (keymap, prefix)
14080
439185f0ef37 (Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents: 13947
diff changeset
1718 Lisp_Object keymap, prefix;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1719 {
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1720 Lisp_Object maps, good_maps, tail;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1721 int prefixlen = 0;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1722
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1723 /* no need for gcpro because we don't autoload any keymaps. */
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1724
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1725 if (!NILP (prefix))
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1726 prefixlen = XINT (Flength (prefix));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727
8431
b4138573c00f (Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents: 7998
diff changeset
1728 if (!NILP (prefix))
b4138573c00f (Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents: 7998
diff changeset
1729 {
b4138573c00f (Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents: 7998
diff changeset
1730 /* If a prefix was specified, start with the keymap (if any) for
b4138573c00f (Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents: 7998
diff changeset
1731 that prefix, so we don't waste time considering other prefixes. */
b4138573c00f (Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents: 7998
diff changeset
1732 Lisp_Object tem;
14080
439185f0ef37 (Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents: 13947
diff changeset
1733 tem = Flookup_key (keymap, prefix, Qt);
8473
c285c3b0ea54 (Faccessible_keymaps): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 8464
diff changeset
1734 /* Flookup_key may give us nil, or a number,
c285c3b0ea54 (Faccessible_keymaps): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 8464
diff changeset
1735 if the prefix is not defined in this particular map.
c285c3b0ea54 (Faccessible_keymaps): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 8464
diff changeset
1736 It might even give us a list that isn't a keymap. */
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1737 tem = get_keymap (tem, 0, 0);
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1738 if (CONSP (tem))
17510
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1739 {
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1740 /* Convert PREFIX to a vector now, so that later on
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1741 we don't have to deal with the possibility of a string. */
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1742 if (STRINGP (prefix))
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1743 {
20624
9ac0b485cf60 (describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents: 20576
diff changeset
1744 int i, i_byte, c;
17510
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1745 Lisp_Object copy;
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1746
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1747 copy = Fmake_vector (make_number (XSTRING (prefix)->size), Qnil);
24572
9fb4096c5f77 (Faccessible_keymaps): Really initialize i_byte.
Richard M. Stallman <rms@gnu.org>
parents: 24396
diff changeset
1748 for (i = 0, i_byte = 0; i < XSTRING (prefix)->size;)
17510
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1749 {
20624
9ac0b485cf60 (describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents: 20576
diff changeset
1750 int i_before = i;
29013
b9565b4bcdf8 (Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 26864
diff changeset
1751
b9565b4bcdf8 (Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 26864
diff changeset
1752 FETCH_STRING_CHAR_ADVANCE (c, prefix, i, i_byte);
b9565b4bcdf8 (Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 26864
diff changeset
1753 if (SINGLE_BYTE_CHAR_P (c) && (c & 0200))
b9565b4bcdf8 (Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 26864
diff changeset
1754 c ^= 0200 | meta_modifier;
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
1755 ASET (copy, i_before, make_number (c));
17510
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1756 }
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1757 prefix = copy;
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1758 }
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1759 maps = Fcons (Fcons (prefix, tem), Qnil);
2da99276d613 (Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents: 17327
diff changeset
1760 }
8431
b4138573c00f (Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents: 7998
diff changeset
1761 else
b4138573c00f (Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents: 7998
diff changeset
1762 return Qnil;
b4138573c00f (Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents: 7998
diff changeset
1763 }
b4138573c00f (Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents: 7998
diff changeset
1764 else
b4138573c00f (Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents: 7998
diff changeset
1765 maps = Fcons (Fcons (Fmake_vector (make_number (0), Qnil),
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
1766 get_keymap (keymap, 1, 0)),
8431
b4138573c00f (Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents: 7998
diff changeset
1767 Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1768
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1769 /* For each map in the list maps,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1770 look at any other maps it points to,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1771 and stick them at the end if they are not already in the list.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1772
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1773 This is a breadth-first traversal, where tail is the queue of
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1774 nodes, and maps accumulates a list of all nodes visited. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1775
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
1776 for (tail = maps; CONSP (tail); tail = XCDR (tail))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1777 {
6502
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1778 register Lisp_Object thisseq, thismap;
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1779 Lisp_Object last;
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1780 /* Does the current sequence end in the meta-prefix-char? */
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1781 int is_metized;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1782
6502
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1783 thisseq = Fcar (Fcar (tail));
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1784 thismap = Fcdr (Fcar (tail));
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1785 last = make_number (XINT (Flength (thisseq)) - 1);
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1786 is_metized = (XINT (last) >= 0
17264
fad065a280dc (Faccessible_keymaps): When metizing, convert a
Richard M. Stallman <rms@gnu.org>
parents: 17189
diff changeset
1787 /* Don't metize the last char of PREFIX. */
fad065a280dc (Faccessible_keymaps): When metizing, convert a
Richard M. Stallman <rms@gnu.org>
parents: 17189
diff changeset
1788 && XINT (last) >= prefixlen
6502
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1789 && EQ (Faref (thisseq, last), meta_prefix_char));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
1791 for (; CONSP (thismap); thismap = XCDR (thismap))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1792 {
6502
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1793 Lisp_Object elt;
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
1794
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
1795 elt = XCAR (thismap);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1796
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1797 QUIT;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1798
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
1799 if (CHAR_TABLE_P (elt))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
1800 {
20076
374e09781f08 (Faccessible_keymaps): Avoid alloca for fixed-size array.
Karl Heuer <kwzh@gnu.org>
parents: 20070
diff changeset
1801 Lisp_Object indices[3];
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
1802
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
1803 map_char_table (accessible_keymaps_char_table, Qnil,
36406
f5bdd1200e0e (Faccessible_keymaps): Pass `is_metized' to accessible_keymaps_char_table.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36405
diff changeset
1804 elt, Fcons (Fcons (maps, make_number (is_metized)),
36405
7fe1b8d8fc44 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36373
diff changeset
1805 Fcons (tail, thisseq)),
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
1806 0, indices);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
1807 }
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
1808 else if (VECTORP (elt))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1809 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1810 register int i;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1811
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1812 /* Vector keymap. Scan all the elements. */
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
1813 for (i = 0; i < ASIZE (elt); i++)
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1814 accessible_keymaps_1 (make_number (i), AREF (elt, i),
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1815 maps, tail, thisseq, is_metized);
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1816
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
1817 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1818 else if (CONSP (elt))
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1819 accessible_keymaps_1 (XCAR (elt), XCDR (elt),
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1820 maps, tail, thisseq,
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1821 is_metized && INTEGERP (XCAR (elt)));
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
1822
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1823 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1824 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1825
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1826 if (NILP (prefix))
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1827 return maps;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1828
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1829 /* Now find just the maps whose access prefixes start with PREFIX. */
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1830
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1831 good_maps = Qnil;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
1832 for (; CONSP (maps); maps = XCDR (maps))
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1833 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1834 Lisp_Object elt, thisseq;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
1835 elt = XCAR (maps);
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
1836 thisseq = XCAR (elt);
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1837 /* The access prefix must be at least as long as PREFIX,
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1838 and the first elements must match those of PREFIX. */
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1839 if (XINT (Flength (thisseq)) >= prefixlen)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1840 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1841 int i;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1842 for (i = 0; i < prefixlen; i++)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1843 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1844 Lisp_Object i1;
9312
dfaf1d41e53d (synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents: 9273
diff changeset
1845 XSETFASTINT (i1, i);
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1846 if (!EQ (Faref (thisseq, i1), Faref (prefix, i1)))
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1847 break;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1848 }
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1849 if (i == prefixlen)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1850 good_maps = Fcons (elt, good_maps);
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1851 }
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1852 }
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1853
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1854 return Fnreverse (good_maps);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855 }
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
1856
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 Lisp_Object Qsingle_key_description, Qkey_description;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1858
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1859 /* This function cannot GC. */
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
1860
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1861 DEFUN ("key-description", Fkey_description, Skey_description, 1, 1, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1862 doc: /* Return a pretty description of key-sequence KEYS.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1863 Control characters turn into "C-foo" sequences, meta into "M-foo"
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1864 spaces are put between sequence elements, etc. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
1865 (keys)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866 Lisp_Object keys;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1867 {
31829
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31496
diff changeset
1868 int len = 0;
20624
9ac0b485cf60 (describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents: 20576
diff changeset
1869 int i, i_byte;
7809
cf23573fa6fb (Fkey_description): Avoid using Fmapconcat--do it directly.
Richard M. Stallman <rms@gnu.org>
parents: 7669
diff changeset
1870 Lisp_Object sep;
31829
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31496
diff changeset
1871 Lisp_Object *args = NULL;
7809
cf23573fa6fb (Fkey_description): Avoid using Fmapconcat--do it directly.
Richard M. Stallman <rms@gnu.org>
parents: 7669
diff changeset
1872
8866
48a0ea73a9d7 (Fkey_description): Give error if KEYS not an array.
Richard M. Stallman <rms@gnu.org>
parents: 8731
diff changeset
1873 if (STRINGP (keys))
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1874 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1875 Lisp_Object vector;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1876 vector = Fmake_vector (Flength (keys), Qnil);
24572
9fb4096c5f77 (Faccessible_keymaps): Really initialize i_byte.
Richard M. Stallman <rms@gnu.org>
parents: 24396
diff changeset
1877 for (i = 0, i_byte = 0; i < XSTRING (keys)->size; )
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1878 {
20624
9ac0b485cf60 (describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents: 20576
diff changeset
1879 int c;
20641
a48d24f8726c (push_key_description): If C >= 128, always use octal representation.
Kenichi Handa <handa@m17n.org>
parents: 20624
diff changeset
1880 int i_before = i;
20624
9ac0b485cf60 (describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents: 20576
diff changeset
1881
29013
b9565b4bcdf8 (Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 26864
diff changeset
1882 FETCH_STRING_CHAR_ADVANCE (c, keys, i, i_byte);
b9565b4bcdf8 (Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 26864
diff changeset
1883 if (SINGLE_BYTE_CHAR_P (c) && (c & 0200))
b9565b4bcdf8 (Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 26864
diff changeset
1884 c ^= 0200 | meta_modifier;
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
1885 XSETFASTINT (AREF (vector, i_before), c);
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1886 }
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1887 keys = vector;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1888 }
23953
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1889
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1890 if (VECTORP (keys))
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1891 {
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1892 /* In effect, this computes
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1893 (mapconcat 'single-key-description keys " ")
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1894 but we shouldn't use mapconcat because it can do GC. */
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1895
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1896 len = XVECTOR (keys)->size;
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1897 sep = build_string (" ");
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1898 /* This has one extra element at the end that we don't pass to Fconcat. */
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1899 args = (Lisp_Object *) alloca (len * 2 * sizeof (Lisp_Object));
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1900
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1901 for (i = 0; i < len; i++)
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1902 {
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
1903 args[i * 2] = Fsingle_key_description (AREF (keys, i), Qnil);
23953
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1904 args[i * 2 + 1] = sep;
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1905 }
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1906 }
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1907 else if (CONSP (keys))
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1908 {
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1909 /* In effect, this computes
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1910 (mapconcat 'single-key-description keys " ")
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1911 but we shouldn't use mapconcat because it can do GC. */
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1912
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1913 len = XFASTINT (Flength (keys));
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1914 sep = build_string (" ");
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1915 /* This has one extra element at the end that we don't pass to Fconcat. */
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1916 args = (Lisp_Object *) alloca (len * 2 * sizeof (Lisp_Object));
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1917
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1918 for (i = 0; i < len; i++)
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1919 {
30559
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
1920 args[i * 2] = Fsingle_key_description (XCAR (keys), Qnil);
23953
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1921 args[i * 2 + 1] = sep;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
1922 keys = XCDR (keys);
23953
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1923 }
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1924 }
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
1925 else
8866
48a0ea73a9d7 (Fkey_description): Give error if KEYS not an array.
Richard M. Stallman <rms@gnu.org>
parents: 8731
diff changeset
1926 keys = wrong_type_argument (Qarrayp, keys);
7809
cf23573fa6fb (Fkey_description): Avoid using Fmapconcat--do it directly.
Richard M. Stallman <rms@gnu.org>
parents: 7669
diff changeset
1927
34442
57d320641b64 (Fkey_description): If KEYS is an empty key sequence,
Gerd Moellmann <gerd@gnu.org>
parents: 34359
diff changeset
1928 if (len == 0)
39837
ccaa40660e40 (Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39702
diff changeset
1929 return empty_string;
7809
cf23573fa6fb (Fkey_description): Avoid using Fmapconcat--do it directly.
Richard M. Stallman <rms@gnu.org>
parents: 7669
diff changeset
1930 return Fconcat (len * 2 - 1, args);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1931 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1932
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1933 char *
34906
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
1934 push_key_description (c, p, force_multibyte)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1935 register unsigned int c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1936 register char *p;
34906
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
1937 int force_multibyte;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1938 {
30780
b4fcea50ee82 (push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents: 30609
diff changeset
1939 unsigned c2;
b4fcea50ee82 (push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents: 30609
diff changeset
1940
2343
ddb30eaf2f56 (push_key_description): Ignore bits above meta_modifier.
Richard M. Stallman <rms@gnu.org>
parents: 2093
diff changeset
1941 /* Clear all the meaningless bits above the meta bit. */
ddb30eaf2f56 (push_key_description): Ignore bits above meta_modifier.
Richard M. Stallman <rms@gnu.org>
parents: 2093
diff changeset
1942 c &= meta_modifier | ~ - meta_modifier;
30780
b4fcea50ee82 (push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents: 30609
diff changeset
1943 c2 = c & ~(alt_modifier | ctrl_modifier | hyper_modifier
b4fcea50ee82 (push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents: 30609
diff changeset
1944 | meta_modifier | shift_modifier | super_modifier);
2343
ddb30eaf2f56 (push_key_description): Ignore bits above meta_modifier.
Richard M. Stallman <rms@gnu.org>
parents: 2093
diff changeset
1945
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1946 if (c & alt_modifier)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1947 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1948 *p++ = 'A';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1949 *p++ = '-';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1950 c -= alt_modifier;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1951 }
30780
b4fcea50ee82 (push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents: 30609
diff changeset
1952 if ((c & ctrl_modifier) != 0
b4fcea50ee82 (push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents: 30609
diff changeset
1953 || (c2 < ' ' && c2 != 27 && c2 != '\t' && c2 != Ctl ('M')))
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1954 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1955 *p++ = 'C';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1956 *p++ = '-';
30780
b4fcea50ee82 (push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents: 30609
diff changeset
1957 c &= ~ctrl_modifier;
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1958 }
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1959 if (c & hyper_modifier)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1960 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1961 *p++ = 'H';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1962 *p++ = '-';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1963 c -= hyper_modifier;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1964 }
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1965 if (c & meta_modifier)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1966 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1967 *p++ = 'M';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1968 *p++ = '-';
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1969 c -= meta_modifier;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1970 }
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1971 if (c & shift_modifier)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1972 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1973 *p++ = 'S';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1974 *p++ = '-';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1975 c -= shift_modifier;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1976 }
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1977 if (c & super_modifier)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1978 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1979 *p++ = 's';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1980 *p++ = '-';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1981 c -= super_modifier;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1982 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1983 if (c < 040)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1984 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1985 if (c == 033)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1986 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1987 *p++ = 'E';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1988 *p++ = 'S';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1989 *p++ = 'C';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1990 }
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1991 else if (c == '\t')
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1992 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1993 *p++ = 'T';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1994 *p++ = 'A';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1995 *p++ = 'B';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1996 }
16875
d9956cf6699b (push_key_description): Print C-j, not TAB.
Richard M. Stallman <rms@gnu.org>
parents: 16465
diff changeset
1997 else if (c == Ctl ('M'))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1998 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1999 *p++ = 'R';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2000 *p++ = 'E';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2001 *p++ = 'T';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2002 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2003 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2004 {
30780
b4fcea50ee82 (push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents: 30609
diff changeset
2005 /* `C-' already added above. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2006 if (c > 0 && c <= Ctl ('Z'))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2007 *p++ = c + 0140;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2008 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2009 *p++ = c + 0100;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2010 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2011 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2012 else if (c == 0177)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2013 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2014 *p++ = 'D';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2015 *p++ = 'E';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2016 *p++ = 'L';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2017 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2018 else if (c == ' ')
24394
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2019 {
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2020 *p++ = 'S';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2021 *p++ = 'P';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2022 *p++ = 'C';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2023 }
24396
340189fd508f (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 24394
diff changeset
2024 else if (c < 128
340189fd508f (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 24394
diff changeset
2025 || (NILP (current_buffer->enable_multibyte_characters)
34906
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2026 && SINGLE_BYTE_CHAR_P (c)
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2027 && !force_multibyte))
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2028 {
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2029 *p++ = c;
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2030 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2031 else
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
2032 {
34906
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2033 int valid_p = SINGLE_BYTE_CHAR_P (c) || char_valid_p (c, 0);
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2034
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2035 if (force_multibyte && valid_p)
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2036 {
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2037 if (SINGLE_BYTE_CHAR_P (c))
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2038 c = unibyte_char_to_multibyte (c);
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2039 p += CHAR_STRING (c, p);
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2040 }
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2041 else if (NILP (current_buffer->enable_multibyte_characters)
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2042 || valid_p)
24394
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2043 {
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2044 int bit_offset;
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2045 *p++ = '\\';
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2046 /* The biggest character code uses 19 bits. */
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2047 for (bit_offset = 18; bit_offset >= 0; bit_offset -= 3)
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2048 {
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2049 if (c >= (1 << bit_offset))
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2050 *p++ = ((c & (7 << bit_offset)) >> bit_offset) + '0';
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2051 }
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2052 }
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2053 else
34906
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2054 p += CHAR_STRING (c, p);
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
2055 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2056
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
2057 return p;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2058 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2059
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
2060 /* This function cannot GC. */
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
2061
30559
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
2062 DEFUN ("single-key-description", Fsingle_key_description,
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
2063 Ssingle_key_description, 1, 2, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2064 doc: /* Return a pretty description of command character KEY.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2065 Control characters turn into C-whatever, etc.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2066 Optional argument NO-ANGLES non-nil means don't put angle brackets
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2067 around function keys and event symbols. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2068 (key, no_angles)
30559
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
2069 Lisp_Object key, no_angles;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2070 {
23953
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
2071 if (CONSP (key) && lucid_event_type_list_p (key))
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
2072 key = Fevent_convert_list (key);
c8cdb4e487cb (Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents: 23776
diff changeset
2073
1315
884c3d7e7172 * keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents: 1264
diff changeset
2074 key = EVENT_HEAD (key);
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2075
10008
b83150a8020d (Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9973
diff changeset
2076 if (INTEGERP (key)) /* Normal character */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2077 {
23734
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2078 unsigned int charset, c1, c2;
23776
529965d3c653 (Fsingle_key_description): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 23758
diff changeset
2079 int without_bits = XINT (key) & ~((-1) << CHARACTERBITS);
529965d3c653 (Fsingle_key_description): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 23758
diff changeset
2080
529965d3c653 (Fsingle_key_description): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 23758
diff changeset
2081 if (SINGLE_BYTE_CHAR_P (without_bits))
23734
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2082 charset = 0;
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2083 else
29013
b9565b4bcdf8 (Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 26864
diff changeset
2084 SPLIT_CHAR (without_bits, charset, c1, c2);
23734
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2085
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2086 if (charset
24394
8159c8cb33cc (push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents: 23968
diff changeset
2087 && CHARSET_DEFINED_P (charset)
23734
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2088 && ((c1 >= 0 && c1 < 32)
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2089 || (c2 >= 0 && c2 < 32)))
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2090 {
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2091 /* Handle a generic character. */
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2092 Lisp_Object name;
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2093 name = CHARSET_TABLE_INFO (charset, CHARSET_LONG_NAME_IDX);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40625
diff changeset
2094 CHECK_STRING (name);
23734
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2095 return concat2 (build_string ("Character set "), name);
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2096 }
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2097 else
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2098 {
37930
ee47b5c14208 (Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents: 37747
diff changeset
2099 char tem[KEY_DESCRIPTION_SIZE], *end;
ee47b5c14208 (Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents: 37747
diff changeset
2100 int nbytes, nchars;
ee47b5c14208 (Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents: 37747
diff changeset
2101 Lisp_Object string;
ee47b5c14208 (Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents: 37747
diff changeset
2102
ee47b5c14208 (Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents: 37747
diff changeset
2103 end = push_key_description (XUINT (key), tem, 1);
ee47b5c14208 (Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents: 37747
diff changeset
2104 nbytes = end - tem;
ee47b5c14208 (Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents: 37747
diff changeset
2105 nchars = multibyte_chars_in_text (tem, nbytes);
ee47b5c14208 (Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents: 37747
diff changeset
2106 if (nchars == nbytes)
37938
fdd419d4776a (Fsingle_key_description): NUL-terminate the string
Gerd Moellmann <gerd@gnu.org>
parents: 37930
diff changeset
2107 {
fdd419d4776a (Fsingle_key_description): NUL-terminate the string
Gerd Moellmann <gerd@gnu.org>
parents: 37930
diff changeset
2108 *end = '\0';
fdd419d4776a (Fsingle_key_description): NUL-terminate the string
Gerd Moellmann <gerd@gnu.org>
parents: 37930
diff changeset
2109 string = build_string (tem);
fdd419d4776a (Fsingle_key_description): NUL-terminate the string
Gerd Moellmann <gerd@gnu.org>
parents: 37930
diff changeset
2110 }
37930
ee47b5c14208 (Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents: 37747
diff changeset
2111 else
ee47b5c14208 (Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents: 37747
diff changeset
2112 string = make_multibyte_string (tem, nchars, nbytes);
ee47b5c14208 (Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents: 37747
diff changeset
2113 return string;
23734
44546fc7faad (Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents: 22841
diff changeset
2114 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2115 }
10008
b83150a8020d (Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9973
diff changeset
2116 else if (SYMBOLP (key)) /* Function key or event-symbol */
29651
31099bb76b6e (Fsingle_key_description): Enclose function key and
Gerd Moellmann <gerd@gnu.org>
parents: 29282
diff changeset
2117 {
30559
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
2118 if (NILP (no_angles))
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
2119 {
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
2120 char *buffer
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
2121 = (char *) alloca (STRING_BYTES (XSYMBOL (key)->name) + 5);
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
2122 sprintf (buffer, "<%s>", XSYMBOL (key)->name->data);
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
2123 return build_string (buffer);
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
2124 }
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
2125 else
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
2126 return Fsymbol_name (key);
29651
31099bb76b6e (Fsingle_key_description): Enclose function key and
Gerd Moellmann <gerd@gnu.org>
parents: 29282
diff changeset
2127 }
10008
b83150a8020d (Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9973
diff changeset
2128 else if (STRINGP (key)) /* Buffer names in the menubar. */
b83150a8020d (Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9973
diff changeset
2129 return Fcopy_sequence (key);
b83150a8020d (Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9973
diff changeset
2130 else
b83150a8020d (Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9973
diff changeset
2131 error ("KEY must be an integer, cons, symbol, or string");
31829
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31496
diff changeset
2132 return Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2133 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2134
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2135 char *
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2136 push_text_char_description (c, p)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2137 register unsigned int c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2138 register char *p;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2139 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2140 if (c >= 0200)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2141 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2142 *p++ = 'M';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2143 *p++ = '-';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2144 c -= 0200;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2145 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2146 if (c < 040)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2147 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2148 *p++ = '^';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2149 *p++ = c + 64; /* 'A' - 1 */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2150 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2151 else if (c == 0177)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2152 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2153 *p++ = '^';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2154 *p++ = '?';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2155 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2156 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2157 *p++ = c;
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
2158 return p;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2159 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2160
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
2161 /* This function cannot GC. */
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
2162
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2163 DEFUN ("text-char-description", Ftext_char_description, Stext_char_description, 1, 1, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2164 doc: /* Return a pretty description of file-character CHARACTER.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2165 Control characters turn into "^char", etc. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2166 (character)
14080
439185f0ef37 (Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents: 13947
diff changeset
2167 Lisp_Object character;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2168 {
26864
b89eb8bbaff1 (push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26481
diff changeset
2169 /* Currently MAX_MULTIBYTE_LENGTH is 4 (< 6). */
b89eb8bbaff1 (push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26481
diff changeset
2170 unsigned char str[6];
b89eb8bbaff1 (push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26481
diff changeset
2171 int c;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2172
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40625
diff changeset
2173 CHECK_NUMBER (character);
14080
439185f0ef37 (Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents: 13947
diff changeset
2174
26864
b89eb8bbaff1 (push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26481
diff changeset
2175 c = XINT (character);
b89eb8bbaff1 (push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26481
diff changeset
2176 if (!SINGLE_BYTE_CHAR_P (c))
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
2177 {
26864
b89eb8bbaff1 (push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26481
diff changeset
2178 int len = CHAR_STRING (c, str);
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
2179
20624
9ac0b485cf60 (describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents: 20576
diff changeset
2180 return make_multibyte_string (str, 1, len);
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
2181 }
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
2182
26864
b89eb8bbaff1 (push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26481
diff changeset
2183 *push_text_char_description (c & 0377, str) = 0;
b89eb8bbaff1 (push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26481
diff changeset
2184
b89eb8bbaff1 (push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26481
diff changeset
2185 return build_string (str);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2186 }
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2187
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2188 /* Return non-zero if SEQ contains only ASCII characters, perhaps with
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2189 a meta bit. */
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2190 static int
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2191 ascii_sequence_p (seq)
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2192 Lisp_Object seq;
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2193 {
9312
dfaf1d41e53d (synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents: 9273
diff changeset
2194 int i;
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2195 int len = XINT (Flength (seq));
6008
d3ccce72be00 (get_keyelt): Discard keyboard equivalents
Richard M. Stallman <rms@gnu.org>
parents: 5785
diff changeset
2196
9312
dfaf1d41e53d (synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents: 9273
diff changeset
2197 for (i = 0; i < len; i++)
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2198 {
9312
dfaf1d41e53d (synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents: 9273
diff changeset
2199 Lisp_Object ii, elt;
6008
d3ccce72be00 (get_keyelt): Discard keyboard equivalents
Richard M. Stallman <rms@gnu.org>
parents: 5785
diff changeset
2200
9312
dfaf1d41e53d (synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents: 9273
diff changeset
2201 XSETFASTINT (ii, i);
dfaf1d41e53d (synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents: 9273
diff changeset
2202 elt = Faref (seq, ii);
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2203
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
2204 if (!INTEGERP (elt)
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2205 || (XUINT (elt) & ~CHAR_META) >= 0x80)
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2206 return 0;
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2207 }
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2208
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2209 return 1;
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2210 }
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2211
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2212
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2213 /* where-is - finding a command in a set of keymaps. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2214
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2215 static Lisp_Object where_is_internal ();
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2216 static Lisp_Object where_is_internal_1 ();
20319
81424cf4d446 (copy_keymap_1): Fix return type.
Andreas Schwab <schwab@suse.de>
parents: 20076
diff changeset
2217 static void where_is_internal_2 ();
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2218
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2219 /* Like Flookup_key, but uses a list of keymaps SHADOW instead of a single map.
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2220 Returns the first non-nil binding found in any of those maps. */
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2221
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2222 static Lisp_Object
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2223 shadow_lookup (shadow, key, flag)
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2224 Lisp_Object shadow, key, flag;
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2225 {
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2226 Lisp_Object tail, value;
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2227
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2228 for (tail = shadow; CONSP (tail); tail = XCDR (tail))
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2229 {
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2230 value = Flookup_key (XCAR (tail), key, flag);
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2231 if (!NILP (value) && !NATNUMP (value))
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2232 return value;
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2233 }
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2234 return Qnil;
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2235 }
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2236
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2237 /* This function can GC if Flookup_key autoloads any keymaps. */
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2238
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2239 static Lisp_Object
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2240 where_is_internal (definition, keymaps, firstonly, noindirect, no_remap)
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2241 Lisp_Object definition, keymaps;
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2242 Lisp_Object firstonly, noindirect, no_remap;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2243 {
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2244 Lisp_Object maps = Qnil;
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2245 Lisp_Object found, sequences;
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
2246 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
10810
9b418bde9fcf (Fwhere_is_internal): If FIRSTONLY is not nil or non-ascii,
Richard M. Stallman <rms@gnu.org>
parents: 10541
diff changeset
2247 /* 1 means ignore all menu bindings entirely. */
9b418bde9fcf (Fwhere_is_internal): If FIRSTONLY is not nil or non-ascii,
Richard M. Stallman <rms@gnu.org>
parents: 10541
diff changeset
2248 int nomenus = !NILP (firstonly) && !EQ (firstonly, Qnon_ascii);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2249
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2250 /* If this command is remapped, then it has no key bindings
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2251 of its own. */
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2252 if (NILP (no_remap) && SYMBOLP (definition))
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2253 {
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2254 Lisp_Object tem;
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2255 if (tem = Fremap_command (definition), !NILP (tem))
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2256 return Qnil;
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2257 }
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2258
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2259 found = keymaps;
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2260 while (CONSP (found))
29282
59f2b30d577b Include intervals.h.
Dave Love <fx@gnu.org>
parents: 29013
diff changeset
2261 {
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2262 maps =
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
2263 nconc2 (maps,
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
2264 Faccessible_keymaps (get_keymap (XCAR (found), 1, 0), Qnil));
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2265 found = XCDR (found);
29282
59f2b30d577b Include intervals.h.
Dave Love <fx@gnu.org>
parents: 29013
diff changeset
2266 }
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2267
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2268 GCPRO5 (definition, keymaps, maps, found, sequences);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2269 found = Qnil;
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2270 sequences = Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2271
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
2272 for (; !NILP (maps); maps = Fcdr (maps))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2273 {
6502
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
2274 /* Key sequence to reach map, and the map that it reaches */
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
2275 register Lisp_Object this, map;
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2276
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2277 /* In order to fold [META-PREFIX-CHAR CHAR] sequences into
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2278 [M-CHAR] sequences, check if last character of the sequence
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2279 is the meta-prefix char. */
6502
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
2280 Lisp_Object last;
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
2281 int last_is_meta;
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
2282
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
2283 this = Fcar (Fcar (maps));
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
2284 map = Fcdr (Fcar (maps));
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
2285 last = make_number (XINT (Flength (this)) - 1);
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
2286 last_is_meta = (XINT (last) >= 0
18dfda644bc0 (access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents: 6475
diff changeset
2287 && EQ (Faref (this, last), meta_prefix_char));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2288
36373
274190d289d7 (where_is_internal): Accept non-ascii integer prefixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35781
diff changeset
2289 /* if (nomenus && !ascii_sequence_p (this)) */
36405
7fe1b8d8fc44 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36373
diff changeset
2290 if (nomenus && XINT (last) >= 0
7fe1b8d8fc44 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36373
diff changeset
2291 && !INTEGERP (Faref (this, make_number (0))))
34755
1e3d0f2d1145 (where_is_internal): Check ascii_sequence_p rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34515
diff changeset
2292 /* If no menu entries should be returned, skip over the
1e3d0f2d1145 (where_is_internal): Check ascii_sequence_p rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34515
diff changeset
2293 keymaps bound to `menu-bar' and `tool-bar' and other
36373
274190d289d7 (where_is_internal): Accept non-ascii integer prefixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35781
diff changeset
2294 non-ascii prefixes like `C-down-mouse-2'. */
34755
1e3d0f2d1145 (where_is_internal): Check ascii_sequence_p rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34515
diff changeset
2295 continue;
1e3d0f2d1145 (where_is_internal): Check ascii_sequence_p rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34515
diff changeset
2296
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
2297 QUIT;
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
2298
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2299 while (CONSP (map))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2300 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2301 /* Because the code we want to run on each binding is rather
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2302 large, we don't want to have two separate loop bodies for
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2303 sparse keymap bindings and tables; we want to iterate one
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2304 loop body over both keymap and vector bindings.
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2305
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2306 For this reason, if Fcar (map) is a vector, we don't
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2307 advance map to the next element until i indicates that we
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2308 have finished off the vector. */
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
2309 Lisp_Object elt, key, binding;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2310 elt = XCAR (map);
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2311 map = XCDR (map);
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2312
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2313 sequences = Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2314
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
2315 QUIT;
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
2316
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2317 /* Set key and binding to the current key and binding, and
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2318 advance map and i to the next binding. */
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
2319 if (VECTORP (elt))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2320 {
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2321 Lisp_Object sequence;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2322 int i;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2323 /* In a vector, look at each element. */
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2324 for (i = 0; i < XVECTOR (elt)->size; i++)
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2325 {
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2326 binding = AREF (elt, i);
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2327 XSETFASTINT (key, i);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2328 sequence = where_is_internal_1 (binding, key, definition,
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2329 noindirect, this,
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2330 last, nomenus, last_is_meta);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2331 if (!NILP (sequence))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2332 sequences = Fcons (sequence, sequences);
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2333 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2334 }
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2335 else if (CHAR_TABLE_P (elt))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2336 {
20076
374e09781f08 (Faccessible_keymaps): Avoid alloca for fixed-size array.
Karl Heuer <kwzh@gnu.org>
parents: 20070
diff changeset
2337 Lisp_Object indices[3];
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2338 Lisp_Object args;
20076
374e09781f08 (Faccessible_keymaps): Avoid alloca for fixed-size array.
Karl Heuer <kwzh@gnu.org>
parents: 20070
diff changeset
2339
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2340 args = Fcons (Fcons (Fcons (definition, noindirect),
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2341 Qnil), /* Result accumulator. */
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2342 Fcons (Fcons (this, last),
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2343 Fcons (make_number (nomenus),
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2344 make_number (last_is_meta))));
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2345 map_char_table (where_is_internal_2, Qnil, elt, args,
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2346 0, indices);
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2347 sequences = XCDR (XCAR (args));
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2348 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2349 else if (CONSP (elt))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2350 {
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2351 Lisp_Object sequence;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2352
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2353 key = XCAR (elt);
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2354 binding = XCDR (elt);
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2355
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2356 sequence = where_is_internal_1 (binding, key, definition,
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2357 noindirect, this,
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2358 last, nomenus, last_is_meta);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2359 if (!NILP (sequence))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2360 sequences = Fcons (sequence, sequences);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2361 }
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2362
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2363
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2364 while (!NILP (sequences))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2365 {
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2366 Lisp_Object sequence, remapped, function;
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2367
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2368 sequence = XCAR (sequences);
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2369 sequences = XCDR (sequences);
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2370
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2371 /* If the current sequence is a command remapping with
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2372 format [remap COMMAND], find the key sequences
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2373 which run COMMAND, and use those sequences instead. */
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2374 remapped = Qnil;
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2375 if (NILP (no_remap)
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2376 && VECTORP (sequence) && XVECTOR (sequence)->size == 2
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2377 && EQ (AREF (sequence, 0), Qremap)
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2378 && (function = AREF (sequence, 1), SYMBOLP (function)))
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2379 {
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2380 Lisp_Object remapped1;
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2381
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2382 remapped1 = where_is_internal (function, keymaps, firstonly, noindirect, Qt);
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2383 if (CONSP (remapped1))
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2384 {
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2385 /* Verify that this key binding actually maps to the
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2386 remapped command (see below). */
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2387 if (!EQ (shadow_lookup (keymaps, XCAR (remapped1), Qnil), function))
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2388 continue;
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2389 sequence = XCAR (remapped1);
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2390 remapped = XCDR (remapped1);
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
2391 goto record_sequence;
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2392 }
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2393 }
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2394
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2395 /* Verify that this key binding is not shadowed by another
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2396 binding for the same key, before we say it exists.
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2397
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2398 Mechanism: look for local definition of this key and if
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2399 it is defined and does not match what we found then
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2400 ignore this key.
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2401
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2402 Either nil or number as value from Flookup_key
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2403 means undefined. */
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2404 if (!EQ (shadow_lookup (keymaps, sequence, Qnil), definition))
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2405 continue;
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2406
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2407 record_sequence:
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2408 /* It is a true unshadowed match. Record it, unless it's already
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2409 been seen (as could happen when inheriting keymaps). */
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2410 if (NILP (Fmember (sequence, found)))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2411 found = Fcons (sequence, found);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2412
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2413 /* If firstonly is Qnon_ascii, then we can return the first
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2414 binding we find. If firstonly is not Qnon_ascii but not
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2415 nil, then we should return the first ascii-only binding
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2416 we find. */
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2417 if (EQ (firstonly, Qnon_ascii))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2418 RETURN_UNGCPRO (sequence);
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
2419 else if (!NILP (firstonly) && ascii_sequence_p (sequence))
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2420 RETURN_UNGCPRO (sequence);
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2421
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2422 if (CONSP (remapped))
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2423 {
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2424 sequence = XCAR (remapped);
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2425 remapped = XCDR (remapped);
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2426 goto record_sequence;
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2427 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2428 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2429 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2430 }
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2431
7998
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
2432 UNGCPRO;
d4b5f4dd9c51 (Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents: 7894
diff changeset
2433
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2434 found = Fnreverse (found);
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2435
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2436 /* firstonly may have been t, but we may have gone all the way through
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2437 the keymaps without finding an all-ASCII key sequence. So just
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2438 return the best we could find. */
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
2439 if (!NILP (firstonly))
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2440 return Fcar (found);
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2441
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2442 return found;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2443 }
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2444
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2445 DEFUN ("where-is-internal", Fwhere_is_internal, Swhere_is_internal, 1, 5, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2446 doc: /* Return list of keys that invoke DEFINITION.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2447 If KEYMAP is non-nil, search only KEYMAP and the global keymap.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2448 If KEYMAP is nil, search all the currently active keymaps.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2449 If KEYMAP is a list of keymaps, search only those keymaps.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2450
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2451 If optional 3rd arg FIRSTONLY is non-nil, return the first key sequence found,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2452 rather than a list of all possible key sequences.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2453 If FIRSTONLY is the symbol `non-ascii', return the first binding found,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2454 no matter what it is.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2455 If FIRSTONLY has another non-nil value, prefer sequences of ASCII characters,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2456 and entirely reject menu bindings.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2457
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2458 If optional 4th arg NOINDIRECT is non-nil, don't follow indirections
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2459 to other keymaps or slots. This makes it possible to search for an
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2460 indirect definition itself.
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2461
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2462 If optional 5th arg NO-REMAP is non-nil, don't search for key sequences
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2463 that invoke a command which is remapped to DEFINITION, but include the
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2464 remapped command in the returned list. */)
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2465 (definition, keymap, firstonly, noindirect, no_remap)
35258
f585b46c055a Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents: 34906
diff changeset
2466 Lisp_Object definition, keymap;
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2467 Lisp_Object firstonly, noindirect, no_remap;
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2468 {
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2469 Lisp_Object sequences, keymaps;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2470 /* 1 means ignore all menu bindings entirely. */
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2471 int nomenus = !NILP (firstonly) && !EQ (firstonly, Qnon_ascii);
35520
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2472 Lisp_Object result;
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2473
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2474 /* Find the relevant keymaps. */
35258
f585b46c055a Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents: 34906
diff changeset
2475 if (CONSP (keymap) && KEYMAPP (XCAR (keymap)))
f585b46c055a Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents: 34906
diff changeset
2476 keymaps = keymap;
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
2477 else if (!NILP (keymap))
35258
f585b46c055a Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents: 34906
diff changeset
2478 keymaps = Fcons (keymap, Fcons (current_global_map, Qnil));
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2479 else
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
2480 keymaps = Fcurrent_active_maps (Qnil);
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2481
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2482 /* Only use caching for the menubar (i.e. called with (def nil t nil).
35258
f585b46c055a Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents: 34906
diff changeset
2483 We don't really need to check `keymap'. */
f585b46c055a Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents: 34906
diff changeset
2484 if (nomenus && NILP (noindirect) && NILP (keymap))
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2485 {
35520
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2486 Lisp_Object *defns;
35781
ffdcf20f53f2 (Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35706
diff changeset
2487 int i, j, n;
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2488 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
35520
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2489
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2490 /* Check heuristic-consistency of the cache. */
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2491 if (NILP (Fequal (keymaps, where_is_cache_keymaps)))
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2492 where_is_cache = Qnil;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2493
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2494 if (NILP (where_is_cache))
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2495 {
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2496 /* We need to create the cache. */
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2497 Lisp_Object args[2];
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2498 where_is_cache = Fmake_hash_table (0, args);
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2499 where_is_cache_keymaps = Qt;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2500
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2501 /* Fill in the cache. */
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2502 GCPRO5 (definition, keymaps, firstonly, noindirect, no_remap);
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2503 where_is_internal (definition, keymaps, firstonly, noindirect, no_remap);
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2504 UNGCPRO;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2505
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2506 where_is_cache_keymaps = keymaps;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2507 }
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2508
35520
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2509 /* We want to process definitions from the last to the first.
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2510 Instead of consing, copy definitions to a vector and step
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2511 over that vector. */
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2512 sequences = Fgethash (definition, where_is_cache, Qnil);
36405
7fe1b8d8fc44 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36373
diff changeset
2513 n = XINT (Flength (sequences));
35520
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2514 defns = (Lisp_Object *) alloca (n * sizeof *defns);
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2515 for (i = 0; CONSP (sequences); sequences = XCDR (sequences))
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2516 defns[i++] = XCAR (sequences);
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2517
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2518 /* Verify that the key bindings are not shadowed. Note that
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2519 the following can GC. */
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2520 GCPRO2 (definition, keymaps);
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2521 result = Qnil;
35781
ffdcf20f53f2 (Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35706
diff changeset
2522 j = -1;
35520
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2523 for (i = n - 1; i >= 0; --i)
35781
ffdcf20f53f2 (Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35706
diff changeset
2524 if (EQ (shadow_lookup (keymaps, defns[i], Qnil), definition))
ffdcf20f53f2 (Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35706
diff changeset
2525 {
ffdcf20f53f2 (Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35706
diff changeset
2526 if (ascii_sequence_p (defns[i]))
ffdcf20f53f2 (Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35706
diff changeset
2527 break;
ffdcf20f53f2 (Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35706
diff changeset
2528 else if (j < 0)
ffdcf20f53f2 (Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35706
diff changeset
2529 j = i;
ffdcf20f53f2 (Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35706
diff changeset
2530 }
ffdcf20f53f2 (Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35706
diff changeset
2531
ffdcf20f53f2 (Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35706
diff changeset
2532 result = i >= 0 ? defns[i] : (j >= 0 ? defns[j] : Qnil);
35520
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2533 UNGCPRO;
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2534 }
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2535 else
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2536 {
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2537 /* Kill the cache so that where_is_internal_1 doesn't think
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2538 we're filling it up. */
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2539 where_is_cache = Qnil;
43152
0029b0259426 (Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents: 42510
diff changeset
2540 result = where_is_internal (definition, keymaps, firstonly, noindirect, no_remap);
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2541 }
35520
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2542
beec07f3fec0 (Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents: 35258
diff changeset
2543 return result;
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2544 }
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2545
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2546 /* This is the function that Fwhere_is_internal calls using map_char_table.
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2547 ARGS has the form
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2548 (((DEFINITION . NOINDIRECT) . (KEYMAP . RESULT))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2549 .
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2550 ((THIS . LAST) . (NOMENUS . LAST_IS_META)))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2551 Since map_char_table doesn't really use the return value from this function,
30134
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
2552 we the result append to RESULT, the slot in ARGS.
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
2553
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
2554 This function can GC because it calls where_is_internal_1 which can
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
2555 GC. */
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2556
20319
81424cf4d446 (copy_keymap_1): Fix return type.
Andreas Schwab <schwab@suse.de>
parents: 20076
diff changeset
2557 static void
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2558 where_is_internal_2 (args, key, binding)
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2559 Lisp_Object args, key, binding;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2560 {
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2561 Lisp_Object definition, noindirect, this, last;
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2562 Lisp_Object result, sequence;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2563 int nomenus, last_is_meta;
30134
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
2564 struct gcpro gcpro1, gcpro2, gcpro3;
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
2565
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
2566 GCPRO3 (args, key, binding);
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2567 result = XCDR (XCAR (args));
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2568 definition = XCAR (XCAR (XCAR (args)));
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2569 noindirect = XCDR (XCAR (XCAR (args)));
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2570 this = XCAR (XCAR (XCDR (args)));
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2571 last = XCDR (XCAR (XCDR (args)));
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2572 nomenus = XFASTINT (XCAR (XCDR (XCDR (args))));
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2573 last_is_meta = XFASTINT (XCDR (XCDR (XCDR (args))));
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2574
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2575 sequence = where_is_internal_1 (binding, key, definition, noindirect,
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2576 this, last, nomenus, last_is_meta);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2577
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2578 if (!NILP (sequence))
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39940
diff changeset
2579 XSETCDR (XCAR (args), Fcons (sequence, result));
30134
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
2580
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
2581 UNGCPRO;
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2582 }
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2583
30134
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
2584
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2585 /* This function cannot GC. */
30134
784ef95b020b (get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents: 30030
diff changeset
2586
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2587 static Lisp_Object
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2588 where_is_internal_1 (binding, key, definition, noindirect, this, last,
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2589 nomenus, last_is_meta)
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
2590 Lisp_Object binding, key, definition, noindirect, this, last;
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2591 int nomenus, last_is_meta;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2592 {
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2593 Lisp_Object sequence;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2594
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2595 /* Search through indirections unless that's not wanted. */
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2596 if (NILP (noindirect))
32145
a48fcf036df1 (Fwhere_is_internal): Ignore `menu-bar' and `tool-bar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32038
diff changeset
2597 binding = get_keyelt (binding, 0);
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2598
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2599 /* End this iteration if this element does not match
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2600 the target. */
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2601
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2602 if (!(!NILP (where_is_cache) /* everything "matches" during cache-fill. */
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2603 || EQ (binding, definition)
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2604 || (CONSP (definition) && !NILP (Fequal (binding, definition)))))
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2605 /* Doesn't match. */
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2606 return Qnil;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2607
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2608 /* We have found a match. Construct the key sequence where we found it. */
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2609 if (INTEGERP (key) && last_is_meta)
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2610 {
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2611 sequence = Fcopy_sequence (this);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2612 Faset (sequence, last, make_number (XINT (key) | meta_modifier));
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2613 }
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2614 else
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2615 sequence = append_key (this, key);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2616
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2617 if (!NILP (where_is_cache))
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2618 {
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2619 Lisp_Object sequences = Fgethash (binding, where_is_cache, Qnil);
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2620 Fputhash (binding, Fcons (sequence, sequences), where_is_cache);
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2621 return Qnil;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2622 }
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2623 else
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
2624 return sequence;
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
2625 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2626
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2627 /* describe-bindings - summarizing all the bindings in a set of keymaps. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2628
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
2629 DEFUN ("describe-buffer-bindings", Fdescribe_buffer_bindings, Sdescribe_buffer_bindings, 1, 3, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2630 doc: /* Insert the list of all defined keys and their definitions.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2631 The list is inserted in the current buffer, while the bindings are
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2632 looked up in BUFFER.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2633 The optional argument PREFIX, if non-nil, should be a key sequence;
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2634 then we display only bindings that start with that prefix.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2635 The optional argument MENUS, if non-nil, says to mention menu bindings.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2636 \(Ordinarily these are omitted from the output.) */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
2637 (buffer, prefix, menus)
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
2638 Lisp_Object buffer, prefix, menus;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2639 {
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
2640 Lisp_Object outbuf, shadow;
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
2641 int nomenu = NILP (menus);
7186
092688f7ebbb (describe_buffer_bindings): gcpro stuff. Delete some unused code.
Karl Heuer <kwzh@gnu.org>
parents: 7184
diff changeset
2642 register Lisp_Object start1;
092688f7ebbb (describe_buffer_bindings): gcpro stuff. Delete some unused code.
Karl Heuer <kwzh@gnu.org>
parents: 7184
diff changeset
2643 struct gcpro gcpro1;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2644
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2645 char *alternate_heading
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2646 = "\
20850
ffbaaba0bf76 (Fdescribe_bindings_internal):
Richard M. Stallman <rms@gnu.org>
parents: 20708
diff changeset
2647 Keyboard translations:\n\n\
ffbaaba0bf76 (Fdescribe_bindings_internal):
Richard M. Stallman <rms@gnu.org>
parents: 20708
diff changeset
2648 You type Translation\n\
ffbaaba0bf76 (Fdescribe_bindings_internal):
Richard M. Stallman <rms@gnu.org>
parents: 20708
diff changeset
2649 -------- -----------\n";
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2650
4575
bf0f07186369 (describe_buffer_bindings): Declare shadow just once.
Richard M. Stallman <rms@gnu.org>
parents: 4138
diff changeset
2651 shadow = Qnil;
7186
092688f7ebbb (describe_buffer_bindings): gcpro stuff. Delete some unused code.
Karl Heuer <kwzh@gnu.org>
parents: 7184
diff changeset
2652 GCPRO1 (shadow);
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2653
40625
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2654 outbuf = Fcurrent_buffer ();
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2655
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2656 /* Report on alternates for keys. */
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2657 if (STRINGP (Vkeyboard_translate_table) && !NILP (prefix))
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2658 {
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2659 int c;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2660 unsigned char *translate = XSTRING (Vkeyboard_translate_table)->data;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2661 int translate_len = XSTRING (Vkeyboard_translate_table)->size;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2662
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2663 for (c = 0; c < translate_len; c++)
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2664 if (translate[c] != c)
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2665 {
26481
70d85ae6dfee (Fsingle_key_description): Use KEY_DESCRIPTION_SIZE to
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
2666 char buf[KEY_DESCRIPTION_SIZE];
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2667 char *bufend;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2668
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2669 if (alternate_heading)
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2670 {
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2671 insert_string (alternate_heading);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2672 alternate_heading = 0;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2673 }
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2674
34906
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2675 bufend = push_key_description (translate[c], buf, 1);
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2676 insert (buf, bufend - buf);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2677 Findent_to (make_number (16), make_number (1));
34906
333a490b6ebc (push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents: 34765
diff changeset
2678 bufend = push_key_description (c, buf, 1);
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2679 insert (buf, bufend - buf);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2680
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2681 insert ("\n", 1);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2682 }
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2683
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2684 insert ("\n", 1);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2685 }
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
2686
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2687 if (!NILP (Vkey_translation_map))
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2688 describe_map_tree (Vkey_translation_map, 0, Qnil, prefix,
20850
ffbaaba0bf76 (Fdescribe_bindings_internal):
Richard M. Stallman <rms@gnu.org>
parents: 20708
diff changeset
2689 "Key translations", nomenu, 1, 0);
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2690
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2691
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2692 /* Print the (major mode) local map. */
40625
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2693 start1 = Qnil;
12262
a7d5578ebb25 (Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents: 12151
diff changeset
2694 if (!NILP (current_kboard->Voverriding_terminal_local_map))
a7d5578ebb25 (Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents: 12151
diff changeset
2695 start1 = current_kboard->Voverriding_terminal_local_map;
a7d5578ebb25 (Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents: 12151
diff changeset
2696 else if (!NILP (Voverriding_local_map))
5613
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
2697 start1 = Voverriding_local_map;
cad51b2de6cd (Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 5551
diff changeset
2698
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
2699 if (!NILP (start1))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2700 {
16465
398e3995162d (describe_buffer_bindings): Pass 1 for PARTIAL
Richard M. Stallman <rms@gnu.org>
parents: 16227
diff changeset
2701 describe_map_tree (start1, 1, shadow, prefix,
40625
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2702 "\f\nOverriding Bindings", nomenu, 0, 0);
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2703 shadow = Fcons (start1, shadow);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2704 }
40625
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2705 else
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2706 {
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2707 /* Print the minor mode and major mode keymaps. */
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2708 int i, nmaps;
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2709 Lisp_Object *modes, *maps;
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2710
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2711 /* Temporarily switch to `buffer', so that we can get that buffer's
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2712 minor modes correctly. */
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2713 Fset_buffer (buffer);
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2714
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2715 nmaps = current_minor_maps (&modes, &maps);
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2716 Fset_buffer (outbuf);
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2717
42510
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
2718 start1 = get_local_map (BUF_PT (XBUFFER (buffer)),
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
2719 XBUFFER (buffer), Qkeymap);
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
2720 if (!NILP (start1))
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
2721 {
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
2722 describe_map_tree (start1, 1, shadow, prefix,
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
2723 "\f\n`keymap' Property Bindings", nomenu, 0, 0);
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
2724 shadow = Fcons (start1, shadow);
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
2725 }
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
2726
40625
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2727 /* Print the minor mode maps. */
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2728 for (i = 0; i < nmaps; i++)
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2729 {
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2730 /* The title for a minor mode keymap
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2731 is constructed at run time.
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2732 We let describe_map_tree do the actual insertion
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2733 because it takes care of other features when doing so. */
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2734 char *title, *p;
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2735
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2736 if (!SYMBOLP (modes[i]))
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2737 abort();
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2738
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2739 p = title = (char *) alloca (42 + XSYMBOL (modes[i])->name->size);
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2740 *p++ = '\f';
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2741 *p++ = '\n';
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2742 *p++ = '`';
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2743 bcopy (XSYMBOL (modes[i])->name->data, p,
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2744 XSYMBOL (modes[i])->name->size);
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2745 p += XSYMBOL (modes[i])->name->size;
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2746 *p++ = '\'';
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2747 bcopy (" Minor Mode Bindings", p, sizeof (" Minor Mode Bindings") - 1);
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2748 p += sizeof (" Minor Mode Bindings") - 1;
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2749 *p = 0;
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2750
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2751 describe_map_tree (maps[i], 1, shadow, prefix, title, nomenu, 0, 0);
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2752 shadow = Fcons (maps[i], shadow);
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2753 }
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2754
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2755 start1 = get_local_map (BUF_PT (XBUFFER (buffer)),
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2756 XBUFFER (buffer), Qlocal_map);
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2757 if (!NILP (start1))
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2758 {
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2759 if (EQ (start1, XBUFFER (buffer)->keymap))
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2760 describe_map_tree (start1, 1, shadow, prefix,
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2761 "\f\nMajor Mode Bindings", nomenu, 0, 0);
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2762 else
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2763 describe_map_tree (start1, 1, shadow, prefix,
42510
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
2764 "\f\n`local-map' Property Bindings",
dde71e46eeeb (Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents: 42404
diff changeset
2765 nomenu, 0, 0);
40625
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2766
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2767 shadow = Fcons (start1, shadow);
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2768 }
1248b61b7baf (Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents: 40401
diff changeset
2769 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2770
16465
398e3995162d (describe_buffer_bindings): Pass 1 for PARTIAL
Richard M. Stallman <rms@gnu.org>
parents: 16227
diff changeset
2771 describe_map_tree (current_global_map, 1, shadow, prefix,
29695
5201e6953968 (describe_buffer_bindings): Add `\f\n' in front of titles.
Gerd Moellmann <gerd@gnu.org>
parents: 29651
diff changeset
2772 "\f\nGlobal Bindings", nomenu, 0, 1);
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2773
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2774 /* Print the function-key-map translations under this prefix. */
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2775 if (!NILP (Vfunction_key_map))
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2776 describe_map_tree (Vfunction_key_map, 0, Qnil, prefix,
29695
5201e6953968 (describe_buffer_bindings): Add `\f\n' in front of titles.
Gerd Moellmann <gerd@gnu.org>
parents: 29651
diff changeset
2777 "\f\nFunction key map translations", nomenu, 1, 0);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2778
7186
092688f7ebbb (describe_buffer_bindings): gcpro stuff. Delete some unused code.
Karl Heuer <kwzh@gnu.org>
parents: 7184
diff changeset
2779 UNGCPRO;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2780 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2781 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2782
13947
65488aa49b87 (Flookup_key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13771
diff changeset
2783 /* Insert a description of the key bindings in STARTMAP,
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2784 followed by those of all maps reachable through STARTMAP.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2785 If PARTIAL is nonzero, omit certain "uninteresting" commands
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2786 (such as `undefined').
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2787 If SHADOW is non-nil, it is a list of maps;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2788 don't mention keys which would be shadowed by any of them.
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2789 PREFIX, if non-nil, says mention only keys that start with PREFIX.
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2790 TITLE, if not 0, is a string to insert at the beginning.
5551
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2791 TITLE should not end with a colon or a newline; we supply that.
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2792 If NOMENU is not 0, then omit menu-bar commands.
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2793
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2794 If TRANSL is nonzero, the definitions are actually key translations
13245
2e0c4159e94b (describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 13201
diff changeset
2795 so print strings and vectors differently.
2e0c4159e94b (describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 13201
diff changeset
2796
2e0c4159e94b (describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 13201
diff changeset
2797 If ALWAYS_TITLE is nonzero, print the title even if there are no maps
2e0c4159e94b (describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 13201
diff changeset
2798 to look through. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2799
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2800 void
13245
2e0c4159e94b (describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 13201
diff changeset
2801 describe_map_tree (startmap, partial, shadow, prefix, title, nomenu, transl,
2e0c4159e94b (describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 13201
diff changeset
2802 always_title)
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2803 Lisp_Object startmap, shadow, prefix;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2804 int partial;
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2805 char *title;
5551
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2806 int nomenu;
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2807 int transl;
13245
2e0c4159e94b (describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 13201
diff changeset
2808 int always_title;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2809 {
20883
4aeabf3b8f98 (describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents: 20850
diff changeset
2810 Lisp_Object maps, orig_maps, seen, sub_shadows;
7184
caac285c072d (describe_map_tree): gcpro some things.
Karl Heuer <kwzh@gnu.org>
parents: 7183
diff changeset
2811 struct gcpro gcpro1, gcpro2, gcpro3;
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2812 int something = 0;
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2813 char *key_heading
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2814 = "\
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2815 key binding\n\
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2816 --- -------\n";
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2817
20883
4aeabf3b8f98 (describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents: 20850
diff changeset
2818 orig_maps = maps = Faccessible_keymaps (startmap, prefix);
6976
4d540eeb2dd5 (describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents: 6974
diff changeset
2819 seen = Qnil;
7184
caac285c072d (describe_map_tree): gcpro some things.
Karl Heuer <kwzh@gnu.org>
parents: 7183
diff changeset
2820 sub_shadows = Qnil;
caac285c072d (describe_map_tree): gcpro some things.
Karl Heuer <kwzh@gnu.org>
parents: 7183
diff changeset
2821 GCPRO3 (maps, seen, sub_shadows);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2822
5551
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2823 if (nomenu)
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2824 {
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2825 Lisp_Object list;
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2826
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2827 /* Delete from MAPS each element that is for the menu bar. */
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2828 for (list = maps; !NILP (list); list = XCDR (list))
5551
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2829 {
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2830 Lisp_Object elt, prefix, tem;
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2831
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2832 elt = Fcar (list);
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2833 prefix = Fcar (elt);
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2834 if (XVECTOR (prefix)->size >= 1)
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2835 {
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2836 tem = Faref (prefix, make_number (0));
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2837 if (EQ (tem, Qmenu_bar))
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2838 maps = Fdelq (elt, maps);
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2839 }
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2840 }
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2841 }
2b8f405f5103 (describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents: 5367
diff changeset
2842
13245
2e0c4159e94b (describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 13201
diff changeset
2843 if (!NILP (maps) || always_title)
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2844 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2845 if (title)
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2846 {
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2847 insert_string (title);
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2848 if (!NILP (prefix))
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2849 {
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2850 insert_string (" Starting With ");
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2851 insert1 (Fkey_description (prefix));
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2852 }
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2853 insert_string (":\n");
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2854 }
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2855 insert_string (key_heading);
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2856 something = 1;
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2857 }
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2858
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
2859 for (; !NILP (maps); maps = Fcdr (maps))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2860 {
7184
caac285c072d (describe_map_tree): gcpro some things.
Karl Heuer <kwzh@gnu.org>
parents: 7183
diff changeset
2861 register Lisp_Object elt, prefix, tail;
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2862
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2863 elt = Fcar (maps);
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2864 prefix = Fcar (elt);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2865
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2866 sub_shadows = Qnil;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2867
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2868 for (tail = shadow; CONSP (tail); tail = XCDR (tail))
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2869 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2870 Lisp_Object shmap;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2871
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
2872 shmap = XCAR (tail);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2873
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2874 /* If the sequence by which we reach this keymap is zero-length,
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2875 then the shadow map for this keymap is just SHADOW. */
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
2876 if ((STRINGP (prefix) && XSTRING (prefix)->size == 0)
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
2877 || (VECTORP (prefix) && XVECTOR (prefix)->size == 0))
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2878 ;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2879 /* If the sequence by which we reach this keymap actually has
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2880 some elements, then the sequence's definition in SHADOW is
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2881 what we should use. */
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2882 else
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2883 {
6859
f34b91fa388c (describe_map_tree): Fix call to Flookup_key.
Richard M. Stallman <rms@gnu.org>
parents: 6834
diff changeset
2884 shmap = Flookup_key (shmap, Fcar (elt), Qt);
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
2885 if (INTEGERP (shmap))
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2886 shmap = Qnil;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2887 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2888
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2889 /* If shmap is not nil and not a keymap,
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2890 it completely shadows this map, so don't
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2891 describe this map at all. */
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
2892 if (!NILP (shmap) && !KEYMAPP (shmap))
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2893 goto skip;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2894
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2895 if (!NILP (shmap))
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2896 sub_shadows = Fcons (shmap, sub_shadows);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2897 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2898
20883
4aeabf3b8f98 (describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents: 20850
diff changeset
2899 /* Maps we have already listed in this loop shadow this map. */
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
2900 for (tail = orig_maps; !EQ (tail, maps); tail = XCDR (tail))
20883
4aeabf3b8f98 (describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents: 20850
diff changeset
2901 {
4aeabf3b8f98 (describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents: 20850
diff changeset
2902 Lisp_Object tem;
4aeabf3b8f98 (describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents: 20850
diff changeset
2903 tem = Fequal (Fcar (XCAR (tail)), prefix);
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
2904 if (!NILP (tem))
20883
4aeabf3b8f98 (describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents: 20850
diff changeset
2905 sub_shadows = Fcons (XCDR (XCAR (tail)), sub_shadows);
4aeabf3b8f98 (describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents: 20850
diff changeset
2906 }
4aeabf3b8f98 (describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents: 20850
diff changeset
2907
4aeabf3b8f98 (describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents: 20850
diff changeset
2908 describe_map (Fcdr (elt), prefix,
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2909 transl ? describe_translation : describe_command,
14129
d0b95da4f1f2 (describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents: 14099
diff changeset
2910 partial, sub_shadows, &seen, nomenu);
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2911
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2912 skip: ;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2913 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2914
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2915 if (something)
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2916 insert_string ("\n");
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
2917
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2918 UNGCPRO;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2919 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2920
14304
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2921 static int previous_description_column;
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2922
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2923 static void
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
2924 describe_command (definition, args)
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
2925 Lisp_Object definition, args;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2926 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2927 register Lisp_Object tem1;
14304
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2928 int column = current_column ();
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2929 int description_column;
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2930
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2931 /* If column 16 is no good, go to col 32;
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2932 but don't push beyond that--go to next line instead. */
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2933 if (column > 30)
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2934 {
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2935 insert_char ('\n');
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2936 description_column = 32;
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2937 }
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2938 else if (column > 14 || (column > 10 && previous_description_column == 32))
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2939 description_column = 32;
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2940 else
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2941 description_column = 16;
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2942
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2943 Findent_to (make_number (description_column), make_number (1));
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2944 previous_description_column = description_column;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2945
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
2946 if (SYMBOLP (definition))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2947 {
9273
129621997564 (synkey, Fdescribe_bindings, describe_command): Use new accessor macros
Karl Heuer <kwzh@gnu.org>
parents: 9123
diff changeset
2948 XSETSTRING (tem1, XSYMBOL (definition)->name);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2949 insert1 (tem1);
21539
b9606d56f91f Revert erroneous 1998-04-08 change.
Dave Love <fx@gnu.org>
parents: 21514
diff changeset
2950 insert_string ("\n");
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2951 }
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2952 else if (STRINGP (definition) || VECTORP (definition))
5367
e4f5f2674f34 (describe_command): If binding is a kbd macro, say so.
Richard M. Stallman <rms@gnu.org>
parents: 5246
diff changeset
2953 insert_string ("Keyboard Macro\n");
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
2954 else if (KEYMAPP (definition))
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
2955 insert_string ("Prefix Command\n");
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2956 else
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
2957 insert_string ("??\n");
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2958 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2959
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2960 static void
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
2961 describe_translation (definition, args)
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
2962 Lisp_Object definition, args;
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2963 {
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2964 register Lisp_Object tem1;
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2965
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2966 Findent_to (make_number (16), make_number (1));
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2967
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2968 if (SYMBOLP (definition))
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2969 {
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2970 XSETSTRING (tem1, XSYMBOL (definition)->name);
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2971 insert1 (tem1);
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2972 insert_string ("\n");
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2973 }
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2974 else if (STRINGP (definition) || VECTORP (definition))
13343
cc0f24bdfab1 (describe_translation): Insert newline after key description.
Richard M. Stallman <rms@gnu.org>
parents: 13245
diff changeset
2975 {
cc0f24bdfab1 (describe_translation): Insert newline after key description.
Richard M. Stallman <rms@gnu.org>
parents: 13245
diff changeset
2976 insert1 (Fkey_description (definition));
cc0f24bdfab1 (describe_translation): Insert newline after key description.
Richard M. Stallman <rms@gnu.org>
parents: 13245
diff changeset
2977 insert_string ("\n");
cc0f24bdfab1 (describe_translation): Insert newline after key description.
Richard M. Stallman <rms@gnu.org>
parents: 13245
diff changeset
2978 }
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
2979 else if (KEYMAPP (definition))
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
2980 insert_string ("Prefix Command\n");
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2981 else
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32889
diff changeset
2982 insert_string ("??\n");
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2983 }
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
2984
6974
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
2985 /* Describe the contents of map MAP, assuming that this map itself is
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
2986 reached by the sequence of prefix keys KEYS (a string or vector).
14129
d0b95da4f1f2 (describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents: 14099
diff changeset
2987 PARTIAL, SHADOW, NOMENU are as in `describe_map_tree' above. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2988
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2989 static void
14129
d0b95da4f1f2 (describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents: 14099
diff changeset
2990 describe_map (map, keys, elt_describer, partial, shadow, seen, nomenu)
6974
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
2991 register Lisp_Object map;
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
2992 Lisp_Object keys;
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
2993 void (*elt_describer) P_ ((Lisp_Object, Lisp_Object));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2994 int partial;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2995 Lisp_Object shadow;
6976
4d540eeb2dd5 (describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents: 6974
diff changeset
2996 Lisp_Object *seen;
14129
d0b95da4f1f2 (describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents: 14099
diff changeset
2997 int nomenu;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2998 {
6974
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
2999 Lisp_Object elt_prefix;
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
3000 Lisp_Object tail, definition, event;
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
3001 Lisp_Object tem;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3002 Lisp_Object suppress;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3003 Lisp_Object kludge;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3004 int first = 1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3005 struct gcpro gcpro1, gcpro2, gcpro3;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3006
31829
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31496
diff changeset
3007 suppress = Qnil;
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31496
diff changeset
3008
6974
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
3009 if (!NILP (keys) && XFASTINT (Flength (keys)) > 0)
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
3010 {
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
3011 /* Call Fkey_description first, to avoid GC bug for the other string. */
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
3012 tem = Fkey_description (keys);
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
3013 elt_prefix = concat2 (tem, build_string (" "));
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
3014 }
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
3015 else
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
3016 elt_prefix = Qnil;
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
3017
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3018 if (partial)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3019 suppress = intern ("suppress-keymap");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3020
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3021 /* This vector gets used to present single keys to Flookup_key. Since
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3022 that is done once per keymap element, we don't want to cons up a
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3023 fresh vector every time. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3024 kludge = Fmake_vector (make_number (1), Qnil);
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
3025 definition = Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3026
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
3027 GCPRO3 (elt_prefix, definition, kludge);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3028
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
3029 for (tail = map; CONSP (tail); tail = XCDR (tail))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3030 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3031 QUIT;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3032
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
3033 if (VECTORP (XCAR (tail))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
3034 || CHAR_TABLE_P (XCAR (tail)))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
3035 describe_vector (XCAR (tail),
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3036 elt_prefix, Qnil, elt_describer, partial, shadow, map,
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3037 (int *)0, 0);
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
3038 else if (CONSP (XCAR (tail)))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3039 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
3040 event = XCAR (XCAR (tail));
7341
516dd16e2017 (describe_map): Ignore bindings for all except symbols and integers.
Richard M. Stallman <rms@gnu.org>
parents: 7191
diff changeset
3041
516dd16e2017 (describe_map): Ignore bindings for all except symbols and integers.
Richard M. Stallman <rms@gnu.org>
parents: 7191
diff changeset
3042 /* Ignore bindings whose "keys" are not really valid events.
516dd16e2017 (describe_map): Ignore bindings for all except symbols and integers.
Richard M. Stallman <rms@gnu.org>
parents: 7191
diff changeset
3043 (We get these in the frames and buffers menu.) */
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
3044 if (!(SYMBOLP (event) || INTEGERP (event)))
7191
bd2f9c5ee54e (Fsingle_key_description): Undo previous change.
Karl Heuer <kwzh@gnu.org>
parents: 7186
diff changeset
3045 continue;
7341
516dd16e2017 (describe_map): Ignore bindings for all except symbols and integers.
Richard M. Stallman <rms@gnu.org>
parents: 7191
diff changeset
3046
14129
d0b95da4f1f2 (describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents: 14099
diff changeset
3047 if (nomenu && EQ (event, Qmenu_bar))
d0b95da4f1f2 (describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents: 14099
diff changeset
3048 continue;
d0b95da4f1f2 (describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents: 14099
diff changeset
3049
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
3050 definition = get_keyelt (XCDR (XCAR (tail)), 0);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3051
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3052 /* Don't show undefined commands or suppressed commands. */
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
3053 if (NILP (definition)) continue;
9123
c225137ddefb (get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents: 8922
diff changeset
3054 if (SYMBOLP (definition) && partial)
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3055 {
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
3056 tem = Fget (definition, suppress);
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
3057 if (!NILP (tem))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3058 continue;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3059 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3060
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3061 /* Don't show a command that isn't really visible
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3062 because a local definition of the same key shadows it. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3063
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
3064 ASET (kludge, 0, event);
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3065 if (!NILP (shadow))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3066 {
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
3067 tem = shadow_lookup (shadow, kludge, Qt);
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3068 if (!NILP (tem)) continue;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3069 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3070
6974
ab22b527d380 (describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents: 6859
diff changeset
3071 tem = Flookup_key (map, kludge, Qt);
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
3072 if (!EQ (tem, definition)) continue;
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
3073
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3074 if (first)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3075 {
14304
57194b6a555d (Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
3076 previous_description_column = 0;
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3077 insert ("\n", 1);
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3078 first = 0;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3079 }
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3080
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3081 if (!NILP (elt_prefix))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3082 insert1 (elt_prefix);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3083
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
3084 /* THIS gets the string to describe the character EVENT. */
30559
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
3085 insert1 (Fsingle_key_description (event, Qnil));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3086
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3087 /* Print a description of the definition of this character.
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3088 elt_describer will take care of spacing out far enough
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3089 for alignment purposes. */
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3090 (*elt_describer) (definition, Qnil);
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
3091 }
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
3092 else if (EQ (XCAR (tail), Qkeymap))
6976
4d540eeb2dd5 (describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents: 6974
diff changeset
3093 {
4d540eeb2dd5 (describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents: 6974
diff changeset
3094 /* The same keymap might be in the structure twice, if we're
4d540eeb2dd5 (describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents: 6974
diff changeset
3095 using an inherited keymap. So skip anything we've already
4d540eeb2dd5 (describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents: 6974
diff changeset
3096 encountered. */
4d540eeb2dd5 (describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents: 6974
diff changeset
3097 tem = Fassq (tail, *seen);
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25600
diff changeset
3098 if (CONSP (tem) && !NILP (Fequal (XCAR (tem), keys)))
6976
4d540eeb2dd5 (describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents: 6974
diff changeset
3099 break;
4d540eeb2dd5 (describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents: 6974
diff changeset
3100 *seen = Fcons (Fcons (tail, keys), *seen);
4d540eeb2dd5 (describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents: 6974
diff changeset
3101 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3102 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3103
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3104 UNGCPRO;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3105 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3106
20319
81424cf4d446 (copy_keymap_1): Fix return type.
Andreas Schwab <schwab@suse.de>
parents: 20076
diff changeset
3107 static void
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3108 describe_vector_princ (elt, fun)
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3109 Lisp_Object elt, fun;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3110 {
3691
49ce2242f5c1 (get_keymap_1): Add missing semicolon.
Richard M. Stallman <rms@gnu.org>
parents: 3674
diff changeset
3111 Findent_to (make_number (16), make_number (1));
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3112 call1 (fun, elt);
3632
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
3113 Fterpri (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3114 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3115
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3116 DEFUN ("describe-vector", Fdescribe_vector, Sdescribe_vector, 1, 2, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3117 doc: /* Insert a description of contents of VECTOR.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3118 This is text showing the elements of vector matched against indices. */)
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3119 (vector, describer)
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3120 Lisp_Object vector, describer;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3121 {
3632
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
3122 int count = specpdl_ptr - specpdl;
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3123 if (NILP (describer))
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3124 describer = intern ("princ");
3632
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
3125 specbind (Qstandard_output, Fcurrent_buffer ());
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40625
diff changeset
3126 CHECK_VECTOR_OR_CHAR_TABLE (vector);
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3127 describe_vector (vector, Qnil, describer, describe_vector_princ, 0,
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3128 Qnil, Qnil, (int *)0, 0);
3632
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
3129
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
3130 return unbind_to (count, Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3131 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3132
13201
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3133 /* Insert in the current buffer a description of the contents of VECTOR.
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3134 We call ELT_DESCRIBER to insert the description of one value found
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3135 in VECTOR.
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3136
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3137 ELT_PREFIX describes what "comes before" the keys or indices defined
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3138 by this vector. This is a human-readable string whose size
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3139 is not necessarily related to the situation.
13201
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3140
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3141 If the vector is in a keymap, ELT_PREFIX is a prefix key which
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3142 leads to this keymap.
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3143
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3144 If the vector is a chartable, ELT_PREFIX is the vector
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3145 of bytes that lead to the character set or portion of a character
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3146 set described by this chartable.
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3147
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3148 If PARTIAL is nonzero, it means do not mention suppressed commands
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3149 (that assumes the vector is in a keymap).
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3150
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3151 SHADOW is a list of keymaps that shadow this map.
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3152 If it is non-nil, then we look up the key in those maps
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3153 and we don't mention it now if it is defined by any of them.
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3154
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3155 ENTIRE_MAP is the keymap in which this vector appears.
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3156 If the definition in effect in the whole map does not match
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3157 the one in this vector, we ignore this one.
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3158
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3159 When describing a sub-char-table, INDICES is a list of
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3160 indices at higher levels in this char-table,
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3161 and CHAR_TABLE_DEPTH says how many levels down we have gone.
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3162
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3163 ARGS is simply passed as the second argument to ELT_DESCRIBER. */
13201
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3164
20374
0b6c4f1041ae (describe_vector): Declaration fixed (delete `.' at the
Kenichi Handa <handa@m17n.org>
parents: 20319
diff changeset
3165 void
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3166 describe_vector (vector, elt_prefix, args, elt_describer,
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3167 partial, shadow, entire_map,
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3168 indices, char_table_depth)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3169 register Lisp_Object vector;
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3170 Lisp_Object elt_prefix, args;
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3171 void (*elt_describer) P_ ((Lisp_Object, Lisp_Object));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3172 int partial;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3173 Lisp_Object shadow;
11973
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3174 Lisp_Object entire_map;
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3175 int *indices;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3176 int char_table_depth;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3177 {
11973
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3178 Lisp_Object definition;
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3179 Lisp_Object tem2;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3180 register int i;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3181 Lisp_Object suppress;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3182 Lisp_Object kludge;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3183 int first = 1;
25785
0d701c4484e3 (Flookup_key, Faccessible_keymaps, describe_vector,
Gerd Moellmann <gerd@gnu.org>
parents: 25662
diff changeset
3184 struct gcpro gcpro1, gcpro2, gcpro3;
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3185 /* Range of elements to be handled. */
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3186 int from, to;
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3187 /* A flag to tell if a leaf in this level of char-table is not a
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3188 generic character (i.e. a complete multibyte character). */
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3189 int complete_char;
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3190 int character;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3191 int starting_i;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3192
31829
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31496
diff changeset
3193 suppress = Qnil;
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31496
diff changeset
3194
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3195 if (indices == 0)
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18142
diff changeset
3196 indices = (int *) alloca (3 * sizeof (int));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3197
11973
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3198 definition = Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3199
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3200 /* This vector gets used to present single keys to Flookup_key. Since
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3201 that is done once per vector element, we don't want to cons up a
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3202 fresh vector every time. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3203 kludge = Fmake_vector (make_number (1), Qnil);
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3204 GCPRO3 (elt_prefix, definition, kludge);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3205
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3206 if (partial)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3207 suppress = intern ("suppress-keymap");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3208
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3209 if (CHAR_TABLE_P (vector))
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3210 {
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3211 if (char_table_depth == 0)
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3212 {
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3213 /* VECTOR is a top level char-table. */
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3214 complete_char = 1;
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3215 from = 0;
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3216 to = CHAR_TABLE_ORDINARY_SLOTS;
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3217 }
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3218 else
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3219 {
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3220 /* VECTOR is a sub char-table. */
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3221 if (char_table_depth >= 3)
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3222 /* A char-table is never that deep. */
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3223 error ("Too deep char table");
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3224
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3225 complete_char
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3226 = (CHARSET_VALID_P (indices[0])
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3227 && ((CHARSET_DIMENSION (indices[0]) == 1
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3228 && char_table_depth == 1)
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3229 || char_table_depth == 2));
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3230
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3231 /* Meaningful elements are from 32th to 127th. */
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3232 from = 32;
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3233 to = SUB_CHAR_TABLE_ORDINARY_SLOTS;
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3234 }
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3235 }
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3236 else
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3237 {
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3238 /* This does the right thing for ordinary vectors. */
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3239
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3240 complete_char = 1;
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3241 from = 0;
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3242 to = XVECTOR (vector)->size;
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3243 }
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3244
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3245 for (i = from; i < to; i++)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3246 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3247 QUIT;
17189
7c008ec99e97 (describe_vector): Adjusted for the change of CHAR_TABLE_ORDINARY_SLOTS.
Kenichi Handa <handa@m17n.org>
parents: 17111
diff changeset
3248
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3249 if (CHAR_TABLE_P (vector))
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3250 {
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3251 if (char_table_depth == 0 && i >= CHAR_TABLE_SINGLE_BYTE_SLOTS)
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3252 complete_char = 0;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3253
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3254 if (i >= CHAR_TABLE_SINGLE_BYTE_SLOTS
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3255 && !CHARSET_DEFINED_P (i - 128))
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3256 continue;
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3257
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3258 definition
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3259 = get_keyelt (XCHAR_TABLE (vector)->contents[i], 0);
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3260 }
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3261 else
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
3262 definition = get_keyelt (AREF (vector, i), 0);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3263
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3264 if (NILP (definition)) continue;
17511
10ead0052174 (describe_vector): Test for suppressed commands in
Richard M. Stallman <rms@gnu.org>
parents: 17510
diff changeset
3265
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3266 /* Don't mention suppressed commands. */
11973
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3267 if (SYMBOLP (definition) && partial)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3268 {
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3269 Lisp_Object tem;
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3270
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3271 tem = Fget (definition, suppress);
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3272
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3273 if (!NILP (tem)) continue;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3274 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3275
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3276 /* Set CHARACTER to the character this entry describes, if any.
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3277 Also update *INDICES. */
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3278 if (CHAR_TABLE_P (vector))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3279 {
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3280 indices[char_table_depth] = i;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3281
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3282 if (char_table_depth == 0)
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3283 {
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3284 character = i;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3285 indices[0] = i - 128;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3286 }
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3287 else if (complete_char)
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3288 {
29013
b9565b4bcdf8 (Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 26864
diff changeset
3289 character = MAKE_CHAR (indices[0], indices[1], indices[2]);
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3290 }
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3291 else
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3292 character = 0;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3293 }
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3294 else
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3295 character = i;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3296
11973
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3297 /* If this binding is shadowed by some other map, ignore it. */
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3298 if (!NILP (shadow) && complete_char)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3299 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3300 Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3301
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
3302 ASET (kludge, 0, make_number (character));
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
3303 tem = shadow_lookup (shadow, kludge, Qt);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3304
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
3305 if (!NILP (tem)) continue;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3306 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3307
11973
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3308 /* Ignore this definition if it is shadowed by an earlier
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3309 one in the same keymap. */
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3310 if (!NILP (entire_map) && complete_char)
11973
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3311 {
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3312 Lisp_Object tem;
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3313
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
3314 ASET (kludge, 0, make_number (character));
11973
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3315 tem = Flookup_key (entire_map, kludge, Qt);
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3316
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
3317 if (!EQ (tem, definition))
11973
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3318 continue;
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3319 }
4e0f3e3b4cc7 (describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents: 11924
diff changeset
3320
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3321 if (first)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3322 {
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3323 if (char_table_depth == 0)
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3324 insert ("\n", 1);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3325 first = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3326 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3327
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3328 /* For a sub char-table, show the depth by indentation.
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3329 CHAR_TABLE_DEPTH can be greater than 0 only for a char-table. */
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3330 if (char_table_depth > 0)
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3331 insert (" ", char_table_depth * 2); /* depth is 1 or 2. */
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3332
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3333 /* Output the prefix that applies to every entry in this map. */
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3334 if (!NILP (elt_prefix))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3335 insert1 (elt_prefix);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3336
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3337 /* Insert or describe the character this slot is for,
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3338 or a description of what it is for. */
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3339 if (SUB_CHAR_TABLE_P (vector))
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3340 {
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3341 if (complete_char)
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3342 insert_char (character);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3343 else
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3344 {
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3345 /* We need an octal representation for this block of
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3346 characters. */
17795
41b7d56b62fb (describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents: 17788
diff changeset
3347 char work[16];
41b7d56b62fb (describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents: 17788
diff changeset
3348 sprintf (work, "(row %d)", i);
41b7d56b62fb (describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents: 17788
diff changeset
3349 insert (work, strlen (work));
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3350 }
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3351 }
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3352 else if (CHAR_TABLE_P (vector))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3353 {
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3354 if (complete_char)
30559
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
3355 insert1 (Fsingle_key_description (make_number (character), Qnil));
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3356 else
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3357 {
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3358 /* Print the information for this character set. */
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3359 insert_string ("<");
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3360 tem2 = CHARSET_TABLE_INFO (i - 128, CHARSET_SHORT_NAME_IDX);
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3361 if (STRINGP (tem2))
20624
9ac0b485cf60 (describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents: 20576
diff changeset
3362 insert_from_string (tem2, 0, 0, XSTRING (tem2)->size,
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21241
diff changeset
3363 STRING_BYTES (XSTRING (tem2)), 0);
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3364 else
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3365 insert ("?", 1);
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3366 insert (">", 1);
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3367 }
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3368 }
13201
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3369 else
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3370 {
30559
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
3371 insert1 (Fsingle_key_description (make_number (character), Qnil));
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3372 }
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3373
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3374 /* If we find a sub char-table within a char-table,
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3375 scan it recursively; it defines the details for
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3376 a character set or a portion of a character set. */
20624
9ac0b485cf60 (describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents: 20576
diff changeset
3377 if (CHAR_TABLE_P (vector) && SUB_CHAR_TABLE_P (definition))
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3378 {
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3379 insert ("\n", 1);
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3380 describe_vector (definition, elt_prefix, args, elt_describer,
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3381 partial, shadow, entire_map,
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3382 indices, char_table_depth + 1);
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3383 continue;
13201
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3384 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3385
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3386 starting_i = i;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3387
17795
41b7d56b62fb (describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents: 17788
diff changeset
3388 /* Find all consecutive characters or rows that have the same
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3389 definition. But, for elements of a top level char table, if
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3390 they are for charsets, we had better describe one by one even
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3391 if they have the same definition. */
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3392 if (CHAR_TABLE_P (vector))
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3393 {
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3394 int limit = to;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3395
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3396 if (char_table_depth == 0)
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3397 limit = CHAR_TABLE_SINGLE_BYTE_SLOTS;
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3398
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3399 while (i + 1 < limit
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3400 && (tem2 = get_keyelt (XCHAR_TABLE (vector)->contents[i + 1], 0),
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3401 !NILP (tem2))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3402 && !NILP (Fequal (tem2, definition)))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3403 i++;
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3404 }
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3405 else
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3406 while (i + 1 < to
32846
c1b3ab2a1ccc Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32844
diff changeset
3407 && (tem2 = get_keyelt (AREF (vector, i + 1), 0),
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3408 !NILP (tem2))
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3409 && !NILP (Fequal (tem2, definition)))
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3410 i++;
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3411
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3412
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3413 /* If we have a range of more than one character,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3414 print where the range reaches to. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3415
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3416 if (i != starting_i)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3417 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3418 insert (" .. ", 4);
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3419
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3420 if (!NILP (elt_prefix))
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3421 insert1 (elt_prefix);
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3422
13201
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3423 if (CHAR_TABLE_P (vector))
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3424 {
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3425 if (char_table_depth == 0)
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3426 {
30559
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
3427 insert1 (Fsingle_key_description (make_number (i), Qnil));
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3428 }
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3429 else if (complete_char)
13201
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3430 {
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3431 indices[char_table_depth] = i;
29013
b9565b4bcdf8 (Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 26864
diff changeset
3432 character = MAKE_CHAR (indices[0], indices[1], indices[2]);
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3433 insert_char (character);
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3434 }
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3435 else
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3436 {
17795
41b7d56b62fb (describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents: 17788
diff changeset
3437 /* We need an octal representation for this block of
41b7d56b62fb (describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents: 17788
diff changeset
3438 characters. */
41b7d56b62fb (describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents: 17788
diff changeset
3439 char work[16];
41b7d56b62fb (describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents: 17788
diff changeset
3440 sprintf (work, "(row %d)", i);
41b7d56b62fb (describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents: 17788
diff changeset
3441 insert (work, strlen (work));
13201
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3442 }
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3443 }
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3444 else
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3445 {
30559
16a291eedbd8 (Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents: 30134
diff changeset
3446 insert1 (Fsingle_key_description (make_number (i), Qnil));
13201
e9007fec678e (describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents: 13145
diff changeset
3447 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3448 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3449
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3450 /* Print a description of the definition of this character.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3451 elt_describer will take care of spacing out far enough
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3452 for alignment purposes. */
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3453 (*elt_describer) (definition, args);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3454 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3455
17327
0cb065f8702e (describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents: 17264
diff changeset
3456 /* For (sub) char-table, print `defalt' slot at last. */
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3457 if (CHAR_TABLE_P (vector) && !NILP (XCHAR_TABLE (vector)->defalt))
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3458 {
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3459 insert (" ", char_table_depth * 2);
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3460 insert_string ("<<default>>");
41293
3db86c7bf56f (Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41001
diff changeset
3461 (*elt_describer) (XCHAR_TABLE (vector)->defalt, args);
17036
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3462 }
7e4c52fd4430 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16875
diff changeset
3463
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3464 UNGCPRO;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3465 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3466
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
3467 /* Apropos - finding all symbols whose names match a regexp. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3468 Lisp_Object apropos_predicate;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3469 Lisp_Object apropos_accumulate;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3470
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3471 static void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3472 apropos_accum (symbol, string)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3473 Lisp_Object symbol, string;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3474 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3475 register Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3476
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3477 tem = Fstring_match (string, Fsymbol_name (symbol), Qnil);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
3478 if (!NILP (tem) && !NILP (apropos_predicate))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3479 tem = call1 (apropos_predicate, symbol);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
3480 if (!NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3481 apropos_accumulate = Fcons (symbol, apropos_accumulate);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3482 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3483
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3484 DEFUN ("apropos-internal", Fapropos_internal, Sapropos_internal, 1, 2, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3485 doc: /* Show all symbols whose names contain match for REGEXP.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3486 If optional 2nd arg PREDICATE is non-nil, (funcall PREDICATE SYMBOL) is done
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3487 for each symbol and a symbol is mentioned only if that returns non-nil.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3488 Return list of symbols found. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3489 (regexp, predicate)
14080
439185f0ef37 (Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents: 13947
diff changeset
3490 Lisp_Object regexp, predicate;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3491 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3492 struct gcpro gcpro1, gcpro2;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40625
diff changeset
3493 CHECK_STRING (regexp);
14080
439185f0ef37 (Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents: 13947
diff changeset
3494 apropos_predicate = predicate;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3495 GCPRO2 (apropos_predicate, apropos_accumulate);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3496 apropos_accumulate = Qnil;
14080
439185f0ef37 (Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents: 13947
diff changeset
3497 map_obarray (Vobarray, apropos_accum, regexp);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3498 apropos_accumulate = Fsort (apropos_accumulate, Qstring_lessp);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3499 UNGCPRO;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3500 return apropos_accumulate;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3501 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3502
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21429
diff changeset
3503 void
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3504 syms_of_keymap ()
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3505 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3506 Qkeymap = intern ("keymap");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3507 staticpro (&Qkeymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3508
17788
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3509 /* Now we are ready to set up this property, so we can
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3510 create char tables. */
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3511 Fput (Qkeymap, Qchar_table_extra_slots, make_number (0));
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3512
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3513 /* Initialize the keymaps standardly used.
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3514 Each one is the value of a Lisp variable, and is also
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3515 pointed to by a C variable */
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3516
208d71ea3a4f (get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents: 17511
diff changeset
3517 global_map = Fmake_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3518 Fset (intern ("global-map"), global_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3519
16125
2e0a45264368 (syms_of_keymap): staticpro current_global_map;
Richard M. Stallman <rms@gnu.org>
parents: 15422
diff changeset
3520 current_global_map = global_map;
16227
6acf08913847 (syms_of_keymap): staticpro global_map.
Erik Naggum <erik@naggum.no>
parents: 16125
diff changeset
3521 staticpro (&global_map);
16125
2e0a45264368 (syms_of_keymap): staticpro current_global_map;
Richard M. Stallman <rms@gnu.org>
parents: 15422
diff changeset
3522 staticpro (&current_global_map);
2e0a45264368 (syms_of_keymap): staticpro current_global_map;
Richard M. Stallman <rms@gnu.org>
parents: 15422
diff changeset
3523
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
3524 meta_map = Fmake_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3525 Fset (intern ("esc-map"), meta_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3526 Ffset (intern ("ESC-prefix"), meta_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3527
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
3528 control_x_map = Fmake_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3529 Fset (intern ("ctl-x-map"), control_x_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3530 Ffset (intern ("Control-X-prefix"), control_x_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3531
42378
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
3532 exclude_keys
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
3533 = Fcons (Fcons (build_string ("DEL"), build_string ("\\d")),
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
3534 Fcons (Fcons (build_string ("TAB"), build_string ("\\t")),
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
3535 Fcons (Fcons (build_string ("RET"), build_string ("\\r")),
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
3536 Fcons (Fcons (build_string ("ESC"), build_string ("\\e")),
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
3537 Fcons (Fcons (build_string ("SPC"), build_string (" ")),
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
3538 Qnil)))));
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
3539 staticpro (&exclude_keys);
9f96219e833e (Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
3540
12297
fe458a8ecfa2 (Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12262
diff changeset
3541 DEFVAR_LISP ("define-key-rebound-commands", &Vdefine_key_rebound_commands,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3542 doc: /* List of commands given new key bindings recently.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3543 This is used for internal purposes during Emacs startup;
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3544 don't alter it yourself. */);
12297
fe458a8ecfa2 (Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12262
diff changeset
3545 Vdefine_key_rebound_commands = Qt;
fe458a8ecfa2 (Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12262
diff changeset
3546
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3547 DEFVAR_LISP ("minibuffer-local-map", &Vminibuffer_local_map,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3548 doc: /* Default keymap to use when reading from the minibuffer. */);
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
3549 Vminibuffer_local_map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3550
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3551 DEFVAR_LISP ("minibuffer-local-ns-map", &Vminibuffer_local_ns_map,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3552 doc: /* Local keymap for the minibuffer when spaces are not allowed. */);
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
3553 Vminibuffer_local_ns_map = Fmake_sparse_keymap (Qnil);
39837
ccaa40660e40 (Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39702
diff changeset
3554 Fset_keymap_parent (Vminibuffer_local_ns_map, Vminibuffer_local_map);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3555
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3556 DEFVAR_LISP ("minibuffer-local-completion-map", &Vminibuffer_local_completion_map,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3557 doc: /* Local keymap for minibuffer input with completion. */);
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
3558 Vminibuffer_local_completion_map = Fmake_sparse_keymap (Qnil);
39837
ccaa40660e40 (Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39702
diff changeset
3559 Fset_keymap_parent (Vminibuffer_local_completion_map, Vminibuffer_local_map);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3560
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3561 DEFVAR_LISP ("minibuffer-local-must-match-map", &Vminibuffer_local_must_match_map,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3562 doc: /* Local keymap for minibuffer input with completion, for exact match. */);
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
3563 Vminibuffer_local_must_match_map = Fmake_sparse_keymap (Qnil);
39837
ccaa40660e40 (Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39702
diff changeset
3564 Fset_keymap_parent (Vminibuffer_local_must_match_map,
ccaa40660e40 (Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39702
diff changeset
3565 Vminibuffer_local_completion_map);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3566
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
3567 DEFVAR_LISP ("minor-mode-map-alist", &Vminor_mode_map_alist,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3568 doc: /* Alist of keymaps to use for minor modes.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3569 Each element looks like (VARIABLE . KEYMAP); KEYMAP is used to read
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3570 key sequences and look up bindings iff VARIABLE's value is non-nil.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3571 If two active keymaps bind the same key, the keymap appearing earlier
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3572 in the list takes precedence. */);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
3573 Vminor_mode_map_alist = Qnil;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
3574
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
3575 DEFVAR_LISP ("minor-mode-overriding-map-alist", &Vminor_mode_overriding_map_alist,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3576 doc: /* Alist of keymaps to use for minor modes, in current major mode.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3577 This variable is a alist just like `minor-mode-map-alist', and it is
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3578 used the same way (and before `minor-mode-map-alist'); however,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3579 it is provided for major modes to bind locally. */);
20517
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
3580 Vminor_mode_overriding_map_alist = Qnil;
40bfe766d355 (Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 20381
diff changeset
3581
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
3582 DEFVAR_LISP ("function-key-map", &Vfunction_key_map,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3583 doc: /* Keymap mapping ASCII function key sequences onto their preferred forms.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3584 This allows Emacs to recognize function keys sent from ASCII
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3585 terminals at any point in a key sequence.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3586
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3587 The `read-key-sequence' function replaces any subsequence bound by
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3588 `function-key-map' with its binding. More precisely, when the active
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3589 keymaps have no binding for the current key sequence but
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3590 `function-key-map' binds a suffix of the sequence to a vector or string,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3591 `read-key-sequence' replaces the matching suffix with its binding, and
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3592 continues with the new sequence.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3593
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3594 The events that come from bindings in `function-key-map' are not
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3595 themselves looked up in `function-key-map'.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3596
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3597 For example, suppose `function-key-map' binds `ESC O P' to [f1].
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3598 Typing `ESC O P' to `read-key-sequence' would return [f1]. Typing
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3599 `C-x ESC O P' would return [?\\C-x f1]. If [f1] were a prefix
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3600 key, typing `ESC O P x' would return [f1 x]. */);
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
3601 Vfunction_key_map = Fmake_sparse_keymap (Qnil);
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
3602
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
3603 DEFVAR_LISP ("key-translation-map", &Vkey_translation_map,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3604 doc: /* Keymap of key translations that can override keymaps.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3605 This keymap works like `function-key-map', but comes after that,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40804
diff changeset
3606 and applies even for keys that have ordinary bindings. */);
12710
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
3607 Vkey_translation_map = Qnil;
26c09987d2f3 (describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents: 12542
diff changeset
3608
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3609 Qsingle_key_description = intern ("single-key-description");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3610 staticpro (&Qsingle_key_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3611
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3612 Qkey_description = intern ("key-description");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3613 staticpro (&Qkey_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3614
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3615 Qkeymapp = intern ("keymapp");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3616 staticpro (&Qkeymapp);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3617
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
3618 Qnon_ascii = intern ("non-ascii");
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
3619 staticpro (&Qnon_ascii);
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
3620
21241
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
3621 Qmenu_item = intern ("menu-item");
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
3622 staticpro (&Qmenu_item);
31bd04a792c2 (fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents: 20883
diff changeset
3623
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
3624 Qremap = intern ("remap");
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
3625 staticpro (&Qremap);
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
3626
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
3627 remap_command_vector = Fmake_vector (make_number (2), Qremap);
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
3628 staticpro (&remap_command_vector);
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
3629
32889
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
3630 where_is_cache_keymaps = Qt;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
3631 where_is_cache = Qnil;
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
3632 staticpro (&where_is_cache);
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
3633 staticpro (&where_is_cache_keymaps);
673e3ef1f7f6 (where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32846
diff changeset
3634
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3635 defsubr (&Skeymapp);
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
3636 defsubr (&Skeymap_parent);
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
3637 defsubr (&Skeymap_prompt);
15344
82615c826910 (Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 14738
diff changeset
3638 defsubr (&Sset_keymap_parent);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3639 defsubr (&Smake_keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3640 defsubr (&Smake_sparse_keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3641 defsubr (&Scopy_keymap);
43494
b5b76b498398 The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents: 43164
diff changeset
3642 defsubr (&Sremap_command);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3643 defsubr (&Skey_binding);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3644 defsubr (&Slocal_key_binding);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3645 defsubr (&Sglobal_key_binding);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
3646 defsubr (&Sminor_mode_key_binding);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3647 defsubr (&Sdefine_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3648 defsubr (&Slookup_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3649 defsubr (&Sdefine_prefix_command);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3650 defsubr (&Suse_global_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3651 defsubr (&Suse_local_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3652 defsubr (&Scurrent_local_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3653 defsubr (&Scurrent_global_map);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
3654 defsubr (&Scurrent_minor_mode_maps);
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
3655 defsubr (&Scurrent_active_maps);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3656 defsubr (&Saccessible_keymaps);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3657 defsubr (&Skey_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3658 defsubr (&Sdescribe_vector);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3659 defsubr (&Ssingle_key_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3660 defsubr (&Stext_char_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3661 defsubr (&Swhere_is_internal);
39689
0572449a62be (Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
3662 defsubr (&Sdescribe_buffer_bindings);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3663 defsubr (&Sapropos_internal);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3664 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3665
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21429
diff changeset
3666 void
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3667 keys_of_keymap ()
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3668 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3669 initial_define_key (global_map, 033, "ESC-prefix");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3670 initial_define_key (global_map, Ctl('X'), "Control-X-prefix");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3671 }