Mercurial > emacs
annotate src/keymap.c @ 67696:e9b77d66e78e
*** empty log message ***
author | Nick Roberts <nickrob@snap.net.nz> |
---|---|
date | Tue, 20 Dec 2005 09:00:56 +0000 |
parents | e7b90ba8a38a |
children | d2dff317d618 |
rev | line source |
---|---|
250 | 1 /* Manipulation of keymaps |
64770
a0d1312ede66
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64470
diff
changeset
|
2 Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, |
a0d1312ede66
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64470
diff
changeset
|
3 1998, 1999, 2000, 2001, 2002, 2003, 2004, |
a0d1312ede66
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64470
diff
changeset
|
4 2005 Free Software Foundation, Inc. |
250 | 5 |
6 This file is part of GNU Emacs. | |
7 | |
8 GNU Emacs is free software; you can redistribute it and/or modify | |
9 it under the terms of the GNU General Public License as published by | |
647 | 10 the Free Software Foundation; either version 2, or (at your option) |
250 | 11 any later version. |
12 | |
13 GNU Emacs is distributed in the hope that it will be useful, | |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with GNU Emacs; see the file COPYING. If not, write to | |
64084 | 20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
21 Boston, MA 02110-1301, USA. */ | |
250 | 22 |
23 | |
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
4575
diff
changeset
|
24 #include <config.h> |
250 | 25 #include <stdio.h> |
26 #include "lisp.h" | |
27 #include "commands.h" | |
28 #include "buffer.h" | |
17036 | 29 #include "charset.h" |
517 | 30 #include "keyboard.h" |
2059 | 31 #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
|
32 #include "blockinput.h" |
13771
28790743a5a3
(Fkey_binding): Handle text-property keymaps.
Karl Heuer <kwzh@gnu.org>
parents:
13343
diff
changeset
|
33 #include "puresize.h" |
29282 | 34 #include "intervals.h" |
39697
0b986bb45526
Include keymap.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39689
diff
changeset
|
35 #include "keymap.h" |
250 | 36 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
37 /* The number of elements in keymap vectors. */ |
250 | 38 #define DENSE_TABLE_SIZE (0200) |
39 | |
40 /* Actually allocate storage for these variables */ | |
41 | |
42 Lisp_Object current_global_map; /* Current global keymap */ | |
43 | |
44 Lisp_Object global_map; /* default global key bindings */ | |
45 | |
46 Lisp_Object meta_map; /* The keymap used for globally bound | |
47 ESC-prefixed default commands */ | |
48 | |
49 Lisp_Object control_x_map; /* The keymap used for globally bound | |
50 C-x-prefixed default commands */ | |
51 | |
52 /* was MinibufLocalMap */ | |
53 Lisp_Object Vminibuffer_local_map; | |
54 /* The keymap used by the minibuf for local | |
55 bindings when spaces are allowed in the | |
56 minibuf */ | |
57 | |
58 /* was MinibufLocalNSMap */ | |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
59 Lisp_Object Vminibuffer_local_ns_map; |
250 | 60 /* The keymap used by the minibuf for local |
61 bindings when spaces are not encouraged | |
62 in the minibuf */ | |
63 | |
64 /* keymap used for minibuffers when doing completion */ | |
65 /* was MinibufLocalCompletionMap */ | |
66 Lisp_Object Vminibuffer_local_completion_map; | |
67 | |
67259
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
68 /* keymap used for minibuffers when doing completion in filenames */ |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
69 Lisp_Object Vminibuffer_local_filename_completion_map; |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
70 |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
71 /* keymap used for minibuffers when doing completion in filenames |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
72 with require-match*/ |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
73 Lisp_Object Vminibuffer_local_must_match_filename_map; |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
74 |
250 | 75 /* keymap used for minibuffers when doing completion and require a match */ |
76 /* was MinibufLocalMustMatchMap */ | |
77 Lisp_Object Vminibuffer_local_must_match_map; | |
78 | |
465 | 79 /* Alist of minor mode variables and keymaps. */ |
80 Lisp_Object Vminor_mode_map_alist; | |
81 | |
20517
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
82 /* 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
|
83 minor mode variables and keymaps. */ |
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
84 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
|
85 |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
86 /* List of emulation mode keymap alists. */ |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
87 Lisp_Object Vemulation_mode_map_alists; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
88 |
517 | 89 /* Keymap mapping ASCII function key sequences onto their preferred forms. |
90 Initialized by the terminal-specific lisp files. See DEFVAR for more | |
91 documentation. */ | |
92 Lisp_Object Vfunction_key_map; | |
93 | |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
94 /* 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
|
95 Lisp_Object Vkey_translation_map; |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
96 |
12297
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
97 /* 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
|
98 when nil was stored here. |
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
99 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
|
100 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
|
101 Lisp_Object Vdefine_key_rebound_commands; |
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
102 |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
103 Lisp_Object Qkeymapp, Qkeymap, Qnon_ascii, Qmenu_item, Qremap; |
250 | 104 |
42381
810b3bfc52cf
Fix previous change; also correct its change log:
Richard M. Stallman <rms@gnu.org>
parents:
42378
diff
changeset
|
105 /* 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
|
106 static Lisp_Object exclude_keys; |
810b3bfc52cf
Fix previous change; also correct its change log:
Richard M. Stallman <rms@gnu.org>
parents:
42378
diff
changeset
|
107 |
49757
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
108 /* Pre-allocated 2-element vector for Fcommand_remapping to use. */ |
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
109 static Lisp_Object command_remapping_vector; |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
110 |
2886 | 111 /* A char with the CHAR_META bit set in a vector or the 0200 bit set |
112 in a string key sequence is equivalent to prefixing with this | |
113 character. */ | |
250 | 114 extern Lisp_Object meta_prefix_char; |
115 | |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
116 extern Lisp_Object Voverriding_local_map; |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
117 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
118 /* 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
|
119 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
|
120 /* 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
|
121 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
|
122 |
31208
442d40fce0db
(store_in_keymap, fix_submap_inheritance): New prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30780
diff
changeset
|
123 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
|
124 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
|
125 |
442d40fce0db
(store_in_keymap, fix_submap_inheritance): New prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30780
diff
changeset
|
126 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
|
127 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
|
128 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
|
129 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
|
130 void (*) P_ ((Lisp_Object, Lisp_Object)), |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
131 int, Lisp_Object, Lisp_Object*, int, int)); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
132 static void describe_vector P_ ((Lisp_Object, Lisp_Object, Lisp_Object, |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
133 void (*) (Lisp_Object, Lisp_Object), int, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
134 Lisp_Object, Lisp_Object, int *, |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
135 int, int, int)); |
42404
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
136 static void silly_event_symbol_error P_ ((Lisp_Object)); |
250 | 137 |
465 | 138 /* Keymap object support - constructors and predicates. */ |
139 | |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
140 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
|
141 doc: /* Construct and return a new keymap, of the form (keymap CHARTABLE . ALIST). |
56635
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
142 CHARTABLE is a char-table that holds the bindings for all characters |
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
143 without modifiers. All entries in it are initially nil, meaning |
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
144 "command undefined". ALIST is an assoc-list which holds bindings for |
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
145 function keys, mouse events, and any other things that appear in the |
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
146 input stream. Initially, ALIST is nil. |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
147 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
148 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
|
149 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
|
150 (string) |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
151 Lisp_Object string; |
250 | 152 { |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
153 Lisp_Object tail; |
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
154 if (!NILP (string)) |
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
155 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
|
156 else |
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
157 tail = Qnil; |
250 | 158 return Fcons (Qkeymap, |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
159 Fcons (Fmake_char_table (Qkeymap, Qnil), tail)); |
250 | 160 } |
161 | |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
162 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
|
163 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
|
164 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
|
165 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
|
166 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
|
167 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
|
168 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
169 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
|
170 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
|
171 (string) |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
172 Lisp_Object string; |
250 | 173 { |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
174 if (!NILP (string)) |
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
175 return Fcons (Qkeymap, Fcons (string, Qnil)); |
250 | 176 return Fcons (Qkeymap, Qnil); |
177 } | |
178 | |
179 /* This function is used for installing the standard key bindings | |
180 at initialization time. | |
181 | |
182 For example: | |
183 | |
1388
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
184 initial_define_key (control_x_map, Ctl('X'), "exchange-point-and-mark"); */ |
250 | 185 |
186 void | |
187 initial_define_key (keymap, key, defname) | |
188 Lisp_Object keymap; | |
189 int key; | |
190 char *defname; | |
191 { | |
192 store_in_keymap (keymap, make_number (key), intern (defname)); | |
193 } | |
194 | |
1388
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
195 void |
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
196 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
|
197 Lisp_Object keymap; |
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
198 char *keyname; |
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
199 char *defname; |
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
200 { |
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
201 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
|
202 } |
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
203 |
250 | 204 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
|
205 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
|
206 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
207 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
|
208 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
|
209 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
|
210 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
|
211 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
|
212 (object) |
250 | 213 Lisp_Object object; |
214 { | |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
215 return (KEYMAPP (object) ? Qt : Qnil); |
250 | 216 } |
217 | |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
218 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
|
219 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
|
220 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
|
221 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
|
222 (map) |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
223 Lisp_Object map; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
224 { |
58129
6f1bde62e20e
(Fkeymap_prompt): Accept symbol keymaps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57478
diff
changeset
|
225 map = get_keymap (map, 0, 0); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
226 while (CONSP (map)) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
227 { |
58129
6f1bde62e20e
(Fkeymap_prompt): Accept symbol keymaps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57478
diff
changeset
|
228 Lisp_Object tem = XCAR (map); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
229 if (STRINGP (tem)) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
230 return tem; |
58129
6f1bde62e20e
(Fkeymap_prompt): Accept symbol keymaps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57478
diff
changeset
|
231 map = XCDR (map); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
232 } |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
233 return Qnil; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
234 } |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
235 |
250 | 236 /* 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
|
237 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
|
238 |
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
239 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
|
240 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
|
241 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
|
242 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
243 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
|
244 is zero as well), return Qt. |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
245 |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
246 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
|
247 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
|
248 |
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
249 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
|
250 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
|
251 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
|
252 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
|
253 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
|
254 |
784ef95b020b
(get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents:
30030
diff
changeset
|
255 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
|
256 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
|
257 |
250 | 258 Lisp_Object |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
259 get_keymap (object, error, autoload) |
250 | 260 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
|
261 int error, autoload; |
250 | 262 { |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
263 Lisp_Object tem; |
250 | 264 |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
265 autoload_retry: |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
266 if (NILP (object)) |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
267 goto end; |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
268 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
|
269 return object; |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
270 |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
271 tem = indirect_function (object); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
272 if (CONSP (tem)) |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
273 { |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
274 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
|
275 return tem; |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
276 |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
277 /* 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
|
278 Qkeymap as their fifth element. */ |
57478
3965acfc4e80
(get_keymap): An autoload form is not a keymap.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56635
diff
changeset
|
279 if ((autoload || !error) && EQ (XCAR (tem), Qautoload) |
3965acfc4e80
(get_keymap): An autoload form is not a keymap.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56635
diff
changeset
|
280 && SYMBOLP (object)) |
1566
892c9f61217a
* keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents:
1517
diff
changeset
|
281 { |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
282 Lisp_Object tail; |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
283 |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
284 tail = Fnth (make_number (4), tem); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
285 if (EQ (tail, Qkeymap)) |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
286 { |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
287 if (autoload) |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
288 { |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
289 struct gcpro gcpro1, gcpro2; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
290 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
291 GCPRO2 (tem, object); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
292 do_autoload (tem, object); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
293 UNGCPRO; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
294 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
295 goto autoload_retry; |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
296 } |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
297 else |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
298 return Qt; |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
299 } |
1566
892c9f61217a
* keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents:
1517
diff
changeset
|
300 } |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
301 } |
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
302 |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
303 end: |
250 | 304 if (error) |
305 wrong_type_argument (Qkeymapp, object); | |
31829
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31496
diff
changeset
|
306 return Qnil; |
250 | 307 } |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
308 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
309 /* Return the parent map of KEYMAP, or nil if it has none. |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
310 We assume that KEYMAP is a valid keymap. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
311 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
312 Lisp_Object |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
313 keymap_parent (keymap, autoload) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
314 Lisp_Object keymap; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
315 int autoload; |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
316 { |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
317 Lisp_Object list; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
318 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
319 keymap = get_keymap (keymap, 1, autoload); |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
320 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
321 /* 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
|
322 list = XCDR (keymap); |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
323 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
|
324 { |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
325 /* 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
|
326 if (KEYMAPP (list)) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
327 return list; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
328 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
329 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
330 return get_keymap (list, 0, autoload); |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
331 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
332 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
333 DEFUN ("keymap-parent", Fkeymap_parent, Skeymap_parent, 1, 1, 0, |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
334 doc: /* Return the parent keymap of KEYMAP. */) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
335 (keymap) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
336 Lisp_Object keymap; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
337 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
338 return keymap_parent (keymap, 1); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
339 } |
31496
946e1ba42cc9
(Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents:
31232
diff
changeset
|
340 |
32038
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
341 /* Check whether MAP is one of MAPS parents. */ |
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
342 int |
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
343 keymap_memberp (map, maps) |
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
344 Lisp_Object map, maps; |
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
345 { |
32559
bc60bd171784
(keymap_memberp): Ensure that nil is not a member.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32478
diff
changeset
|
346 if (NILP (map)) return 0; |
32038
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
347 while (KEYMAPP (maps) && !EQ (map, maps)) |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
348 maps = keymap_parent (maps, 0); |
32038
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
349 return (EQ (map, maps)); |
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
350 } |
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
351 |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
352 /* 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
|
353 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
354 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
|
355 doc: /* Modify KEYMAP to set its parent map to PARENT. |
56574
c6f24a7d73bd
(Fset_keymap_parent): Minor doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56573
diff
changeset
|
356 Return PARENT. PARENT should be nil or another keymap. */) |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
357 (keymap, parent) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
358 Lisp_Object keymap, parent; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
359 { |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
360 Lisp_Object list, prev; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
361 struct gcpro gcpro1, gcpro2; |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
362 int i; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
363 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
364 /* 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
|
365 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
|
366 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
|
367 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
|
368 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
|
369 adverse effect. |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
370 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
|
371 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
|
372 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
373 GCPRO2 (keymap, parent); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
374 keymap = get_keymap (keymap, 1, 1); |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
375 |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
376 if (!NILP (parent)) |
31496
946e1ba42cc9
(Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents:
31232
diff
changeset
|
377 { |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
378 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
|
379 |
946e1ba42cc9
(Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents:
31232
diff
changeset
|
380 /* Check for cycles. */ |
32038
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
381 if (keymap_memberp (keymap, parent)) |
31496
946e1ba42cc9
(Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents:
31232
diff
changeset
|
382 error ("Cyclic keymap inheritance"); |
946e1ba42cc9
(Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents:
31232
diff
changeset
|
383 } |
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 /* Skip past the initial element `keymap'. */ |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
386 prev = keymap; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
387 while (1) |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
388 { |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
389 list = XCDR (prev); |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
390 /* 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
|
391 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
|
392 if (!CONSP (list) || KEYMAPP (list)) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
393 { |
15422
dd639432a55a
(Fset_keymap_parent): Return early if KEYMAP already has the proper parent.
Richard M. Stallman <rms@gnu.org>
parents:
15378
diff
changeset
|
394 /* 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
|
395 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
|
396 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
|
397 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
|
398 |
67505
51053176f6b7
(Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
Richard M. Stallman <rms@gnu.org>
parents:
67259
diff
changeset
|
399 CHECK_IMPURE (prev); |
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39940
diff
changeset
|
400 XSETCDR (prev, parent); |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
401 break; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
402 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
403 prev = list; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
404 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
405 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
406 /* 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
|
407 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
408 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
|
409 { |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
410 /* 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
|
411 if (EQ (XCAR (list), Qkeymap)) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
412 break; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
413 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
414 /* 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
|
415 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
|
416 && 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
|
417 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
|
418 XCDR (XCAR (list))); |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
419 |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
420 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
|
421 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
|
422 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
|
423 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
|
424 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
|
425 |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
426 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
|
427 { |
20076
374e09781f08
(Faccessible_keymaps): Avoid alloca for fixed-size array.
Karl Heuer <kwzh@gnu.org>
parents:
20070
diff
changeset
|
428 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
|
429 |
51034
a5bb1c5181ac
(Fset_keymap_parent, map_keymap, Fcopy_keymap)
Richard M. Stallman <rms@gnu.org>
parents:
50828
diff
changeset
|
430 map_char_table (fix_submap_inheritance, Qnil, |
a5bb1c5181ac
(Fset_keymap_parent, map_keymap, Fcopy_keymap)
Richard M. Stallman <rms@gnu.org>
parents:
50828
diff
changeset
|
431 XCAR (list), XCAR (list), |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
432 keymap, 0, indices); |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
433 } |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
434 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
435 |
30134
784ef95b020b
(get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents:
30030
diff
changeset
|
436 RETURN_UNGCPRO (parent); |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
437 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
438 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
439 /* 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
|
440 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
|
441 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
|
442 |
31208
442d40fce0db
(store_in_keymap, fix_submap_inheritance): New prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30780
diff
changeset
|
443 static void |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
444 fix_submap_inheritance (map, event, submap) |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
445 Lisp_Object map, event, submap; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
446 { |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
447 Lisp_Object map_parent, parent_entry; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
448 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
449 /* 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
|
450 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
|
451 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
452 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
|
453 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
454 /* 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
|
455 if (!CONSP (submap)) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
456 return; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
457 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
458 map_parent = keymap_parent (map, 0); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
459 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
|
460 parent_entry = |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
461 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
|
462 else |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
463 parent_entry = Qnil; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
464 |
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
|
465 /* 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
|
466 our own submap shadows it completely. */ |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
467 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
|
468 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
|
469 |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
470 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
|
471 { |
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
472 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
|
473 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
|
474 while (1) |
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
475 { |
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
476 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
|
477 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
478 tem = keymap_parent (submap_parent, 0); |
32739
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
479 |
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
480 if (KEYMAPP (tem)) |
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
481 { |
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
482 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
|
483 /* 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
|
484 return; |
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
485 submap_parent = tem; |
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
486 } |
25600
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
487 else |
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
488 break; |
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
489 } |
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
490 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
|
491 } |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
492 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
493 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
494 /* 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
|
495 Note that this does only one level of lookup; IDX must be a single |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
496 event, not a sequence. |
1388
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
497 |
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
498 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
|
499 bindings; any key left unmentioned by other tables and bindings is |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
500 given the binding of Qt. |
1388
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
501 |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
502 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
|
503 |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
504 If NOINHERIT, don't accept a subkeymap found in an inherited keymap. */ |
250 | 505 |
506 Lisp_Object | |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
507 access_keymap (map, idx, t_ok, noinherit, autoload) |
250 | 508 Lisp_Object map; |
509 Lisp_Object idx; | |
1388
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
510 int t_ok; |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
511 int noinherit; |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
512 int autoload; |
250 | 513 { |
40791
97673fa0eaa7
(access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40656
diff
changeset
|
514 Lisp_Object val; |
97673fa0eaa7
(access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40656
diff
changeset
|
515 |
97673fa0eaa7
(access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40656
diff
changeset
|
516 /* 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
|
517 val = Qunbound; |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
518 |
250 | 519 /* If idx is a list (some sort of mouse click, perhaps?), |
520 the index we want to use is the car of the list, which | |
521 ought to be a symbol. */ | |
1315
884c3d7e7172
* keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents:
1264
diff
changeset
|
522 idx = EVENT_HEAD (idx); |
250 | 523 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
524 /* 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
|
525 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
|
526 if (SYMBOLP (idx)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
527 idx = reorder_modifiers (idx); |
3515
9d0af0f2dc0d
(access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents:
3425
diff
changeset
|
528 else if (INTEGERP (idx)) |
9d0af0f2dc0d
(access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents:
3425
diff
changeset
|
529 /* 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
|
530 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
|
531 XSETFASTINT (idx, XINT (idx) & (CHAR_META | (CHAR_META - 1))); |
250 | 532 |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
533 /* Handle the special meta -> esc mapping. */ |
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
534 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
|
535 { |
32615
5f6178a60e6b
(access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents:
32559
diff
changeset
|
536 /* 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
|
537 no binding for IDX, unless a default binding exists in MAP. */ |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
538 struct gcpro gcpro1; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
539 Lisp_Object meta_map; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
540 GCPRO1 (map); |
59661
e7a8549bb201
(access_keymap): Protect from bad value of meta_prefix_char.
Richard M. Stallman <rms@gnu.org>
parents:
59522
diff
changeset
|
541 /* A strange value in which Meta is set would cause |
e7a8549bb201
(access_keymap): Protect from bad value of meta_prefix_char.
Richard M. Stallman <rms@gnu.org>
parents:
59522
diff
changeset
|
542 infinite recursion. Protect against that. */ |
59754
a9fbaec66c84
(access_keymap): YAILOM.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59661
diff
changeset
|
543 if (XINT (meta_prefix_char) & CHAR_META) |
59661
e7a8549bb201
(access_keymap): Protect from bad value of meta_prefix_char.
Richard M. Stallman <rms@gnu.org>
parents:
59522
diff
changeset
|
544 meta_prefix_char = make_number (27); |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
545 meta_map = get_keymap (access_keymap (map, meta_prefix_char, |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
546 t_ok, noinherit, autoload), |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
547 0, autoload); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
548 UNGCPRO; |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
549 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
|
550 { |
32739
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
551 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
|
552 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
|
553 } |
5f6178a60e6b
(access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents:
32559
diff
changeset
|
554 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
|
555 /* 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
|
556 idx = Qt; |
5f6178a60e6b
(access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents:
32559
diff
changeset
|
557 else |
5f6178a60e6b
(access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents:
32559
diff
changeset
|
558 /* 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
|
559 return Qnil; |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
560 } |
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
561 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
562 /* t_binding is where we put a default binding that applies, |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
563 to use in case we do not find a binding specifically |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
564 for this key sequence. */ |
250 | 565 { |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
566 Lisp_Object tail; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
567 Lisp_Object t_binding = Qnil; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
568 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
569 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
570 GCPRO4 (map, tail, idx, t_binding); |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
571 |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
572 /* 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
|
573 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
|
574 Otherwise, neither are. */ |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
575 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
|
576 |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
577 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
|
578 (CONSP (tail) |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
579 || (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
|
580 tail = XCDR (tail)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
581 { |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
582 Lisp_Object binding; |
250 | 583 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
584 binding = XCAR (tail); |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
585 if (SYMBOLP (binding)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
586 { |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
587 /* If NOINHERIT, stop finding prefix definitions |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
588 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
|
589 if (noinherit && EQ (binding, Qkeymap)) |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
590 RETURN_UNGCPRO (Qnil); |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
591 } |
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
592 else if (CONSP (binding)) |
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
593 { |
38888
bf8f70dc79f4
(access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents:
37938
diff
changeset
|
594 Lisp_Object key = XCAR (binding); |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
595 |
38888
bf8f70dc79f4
(access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents:
37938
diff
changeset
|
596 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
|
597 val = XCDR (binding); |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
598 else if (t_ok |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
599 && INTEGERP (idx) |
38901
f90da7c4551c
(access_keymap): Fix last change to not consider
Gerd Moellmann <gerd@gnu.org>
parents:
38888
diff
changeset
|
600 && (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
|
601 && INTEGERP (key) |
38901
f90da7c4551c
(access_keymap): Fix last change to not consider
Gerd Moellmann <gerd@gnu.org>
parents:
38888
diff
changeset
|
602 && (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
|
603 && !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
|
604 && !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
|
605 && 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
|
606 && !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
|
607 && (CHAR_CHARSET (XINT (key)) |
bf8f70dc79f4
(access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents:
37938
diff
changeset
|
608 == CHAR_CHARSET (XINT (idx)))) |
bf8f70dc79f4
(access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents:
37938
diff
changeset
|
609 { |
bf8f70dc79f4
(access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents:
37938
diff
changeset
|
610 /* 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
|
611 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
|
612 itself. */ |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
613 t_binding = XCDR (binding); |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
614 t_ok = 0; |
38888
bf8f70dc79f4
(access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents:
37938
diff
changeset
|
615 } |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
616 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
|
617 { |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
618 t_binding = XCDR (binding); |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
619 t_ok = 1; |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
620 } |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
621 } |
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
622 else if (VECTORP (binding)) |
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
623 { |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
624 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
|
625 val = AREF (binding, XFASTINT (idx)); |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
626 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
627 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
|
628 { |
17932
78a128b99e05
(access_keymap, store_in_keymap): Don't look in a char-table
Richard M. Stallman <rms@gnu.org>
parents:
17861
diff
changeset
|
629 /* 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
|
630 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
|
631 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
|
632 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
|
633 { |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
634 val = Faref (binding, idx); |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
635 /* `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
|
636 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
|
637 unbound entry. */ |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
638 if (NILP (val)) |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
639 val = Qunbound; |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
640 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
641 } |
1264
6ba9d5aaace6
* keymap.c (access_keymap): Don't forget to QUIT while scanning
Jim Blandy <jimb@redhat.com>
parents:
1236
diff
changeset
|
642 |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
643 /* 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
|
644 if (!EQ (val, Qunbound)) |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
645 { |
41593
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
646 if (EQ (val, Qt)) |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
647 /* 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
|
648 (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
|
649 keymaps of lower precedence). */ |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
650 val = Qnil; |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
651 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
|
652 if (KEYMAPP (val)) |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
653 fix_submap_inheritance (map, idx, val); |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
654 RETURN_UNGCPRO (val); |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
655 } |
1264
6ba9d5aaace6
* keymap.c (access_keymap): Don't forget to QUIT while scanning
Jim Blandy <jimb@redhat.com>
parents:
1236
diff
changeset
|
656 QUIT; |
250 | 657 } |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
658 UNGCPRO; |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
659 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
|
660 } |
250 | 661 } |
662 | |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
663 static void |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
664 map_keymap_item (fun, args, key, val, data) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
665 map_keymap_function_t fun; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
666 Lisp_Object args, key, val; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
667 void *data; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
668 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
669 /* We should maybe try to detect bindings shadowed by previous |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
670 ones and things like that. */ |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
671 if (EQ (val, Qt)) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
672 val = Qnil; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
673 (*fun) (key, val, args, data); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
674 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
675 |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
676 static void |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
677 map_keymap_char_table_item (args, key, val) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
678 Lisp_Object args, key, val; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
679 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
680 if (!NILP (val)) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
681 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
682 map_keymap_function_t fun = XSAVE_VALUE (XCAR (args))->pointer; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
683 args = XCDR (args); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
684 map_keymap_item (fun, XCDR (args), key, val, |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
685 XSAVE_VALUE (XCAR (args))->pointer); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
686 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
687 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
688 |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
689 /* Call FUN for every binding in MAP. |
50828
997060f8dbbb
(map_keymap): Doc fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50798
diff
changeset
|
690 FUN is called with 4 arguments: FUN (KEY, BINDING, ARGS, DATA). |
997060f8dbbb
(map_keymap): Doc fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50798
diff
changeset
|
691 AUTOLOAD if non-zero means that we can autoload keymaps if necessary. */ |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
692 void |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
693 map_keymap (map, fun, args, data, autoload) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
694 map_keymap_function_t fun; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
695 Lisp_Object map, args; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
696 void *data; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
697 int autoload; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
698 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
699 struct gcpro gcpro1, gcpro2, gcpro3; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
700 Lisp_Object tail; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
701 |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
702 GCPRO3 (map, args, tail); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
703 map = get_keymap (map, 1, autoload); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
704 for (tail = (CONSP (map) && EQ (Qkeymap, XCAR (map))) ? XCDR (map) : map; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
705 CONSP (tail) || (tail = get_keymap (tail, 0, autoload), CONSP (tail)); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
706 tail = XCDR (tail)) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
707 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
708 Lisp_Object binding = XCAR (tail); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
709 |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
710 if (CONSP (binding)) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
711 map_keymap_item (fun, args, XCAR (binding), XCDR (binding), data); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
712 else if (VECTORP (binding)) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
713 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
714 /* Loop over the char values represented in the vector. */ |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
715 int len = ASIZE (binding); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
716 int c; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
717 for (c = 0; c < len; c++) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
718 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
719 Lisp_Object character; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
720 XSETFASTINT (character, c); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
721 map_keymap_item (fun, args, character, AREF (binding, c), data); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
722 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
723 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
724 else if (CHAR_TABLE_P (binding)) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
725 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
726 Lisp_Object indices[3]; |
51034
a5bb1c5181ac
(Fset_keymap_parent, map_keymap, Fcopy_keymap)
Richard M. Stallman <rms@gnu.org>
parents:
50828
diff
changeset
|
727 map_char_table (map_keymap_char_table_item, Qnil, binding, binding, |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
728 Fcons (make_save_value (fun, 0), |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
729 Fcons (make_save_value (data, 0), |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
730 args)), |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
731 0, indices); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
732 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
733 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
734 UNGCPRO; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
735 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
736 |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
737 static void |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
738 map_keymap_call (key, val, fun, dummy) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
739 Lisp_Object key, val, fun; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
740 void *dummy; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
741 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
742 call2 (fun, key, val); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
743 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
744 |
58271
8b3b0ccbe80b
(Fmap_keymap): New arg SORT-FIRST. Use
Richard M. Stallman <rms@gnu.org>
parents:
58129
diff
changeset
|
745 DEFUN ("map-keymap", Fmap_keymap, Smap_keymap, 2, 3, 0, |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
746 doc: /* Call FUNCTION for every binding in KEYMAP. |
56635
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
747 FUNCTION is called with two arguments: the event and its binding. |
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
748 If KEYMAP has a parent, the parent's bindings are included as well. |
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
749 This works recursively: if the parent has itself a parent, then the |
58271
8b3b0ccbe80b
(Fmap_keymap): New arg SORT-FIRST. Use
Richard M. Stallman <rms@gnu.org>
parents:
58129
diff
changeset
|
750 grandparent's bindings are also included and so on. |
8b3b0ccbe80b
(Fmap_keymap): New arg SORT-FIRST. Use
Richard M. Stallman <rms@gnu.org>
parents:
58129
diff
changeset
|
751 usage: (map-keymap FUNCTION KEYMAP) */) |
8b3b0ccbe80b
(Fmap_keymap): New arg SORT-FIRST. Use
Richard M. Stallman <rms@gnu.org>
parents:
58129
diff
changeset
|
752 (function, keymap, sort_first) |
8b3b0ccbe80b
(Fmap_keymap): New arg SORT-FIRST. Use
Richard M. Stallman <rms@gnu.org>
parents:
58129
diff
changeset
|
753 Lisp_Object function, keymap, sort_first; |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
754 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
755 if (INTEGERP (function)) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
756 /* We have to stop integers early since map_keymap gives them special |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
757 significance. */ |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
758 Fsignal (Qinvalid_function, Fcons (function, Qnil)); |
58271
8b3b0ccbe80b
(Fmap_keymap): New arg SORT-FIRST. Use
Richard M. Stallman <rms@gnu.org>
parents:
58129
diff
changeset
|
759 if (! NILP (sort_first)) |
8b3b0ccbe80b
(Fmap_keymap): New arg SORT-FIRST. Use
Richard M. Stallman <rms@gnu.org>
parents:
58129
diff
changeset
|
760 return call3 (intern ("map-keymap-internal"), function, keymap, Qt); |
65456
d9638b932900
(Fdescribe_buffer_bindings): Reload `translate'
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
761 |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
762 map_keymap (keymap, map_keymap_call, function, NULL, 1); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
763 return Qnil; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
764 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
765 |
250 | 766 /* Given OBJECT which was found in a slot in a keymap, |
767 trace indirect definitions to get the actual definition of that slot. | |
768 An indirect definition is a list of the form | |
769 (KEYMAP . INDEX), where KEYMAP is a keymap or a symbol defined as one | |
770 and INDEX is the object to look up in KEYMAP to yield the definition. | |
771 | |
772 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
|
773 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
|
774 |
a29237d1fdca
(get_keymap): Pass 1 as ERROR to get_keymap_1.
Richard M. Stallman <rms@gnu.org>
parents:
6695
diff
changeset
|
775 If AUTOLOAD is nonzero, load autoloadable keymaps |
61421
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
776 that are referred to with indirection. |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
777 |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
778 This can GC because menu_item_eval_property calls Feval. */ |
250 | 779 |
780 Lisp_Object | |
6774
a29237d1fdca
(get_keymap): Pass 1 as ERROR to get_keymap_1.
Richard M. Stallman <rms@gnu.org>
parents:
6695
diff
changeset
|
781 get_keyelt (object, autoload) |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
782 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
|
783 int autoload; |
250 | 784 { |
785 while (1) | |
786 { | |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
787 if (!(CONSP (object))) |
21241
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
788 /* This is really the value. */ |
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
789 return object; |
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
790 |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
791 /* 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
|
792 then use itself. */ |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
793 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
|
794 return object; |
250 | 795 |
21241
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
796 /* 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
|
797 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
|
798 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
|
799 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
|
800 { |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
801 if (CONSP (XCDR (object))) |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
802 { |
29941
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
803 Lisp_Object tem; |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
804 |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
805 object = XCDR (XCDR (object)); |
29941
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
806 tem = object; |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
807 if (CONSP (object)) |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
808 object = XCAR (object); |
29941
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
809 |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
810 /* 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
|
811 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
|
812 use. */ |
29941
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
813 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
|
814 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
|
815 { |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
816 Lisp_Object filter; |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
817 filter = XCAR (XCDR (tem)); |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
818 filter = list2 (filter, list2 (Qquote, object)); |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
819 object = menu_item_eval_property (filter); |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
820 break; |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
821 } |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
822 } |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
823 else |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
824 /* Invalid keymap. */ |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
825 return object; |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
826 } |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
827 |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
828 /* 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
|
829 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
|
830 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
|
831 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
|
832 { |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
833 object = XCDR (object); |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
834 /* 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
|
835 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
|
836 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
|
837 object = XCDR (object); |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
838 /* 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
|
839 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
|
840 { |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
841 Lisp_Object carcar; |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
842 carcar = XCAR (XCAR (object)); |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
843 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
|
844 object = XCDR (object); |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
845 } |
21241
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
846 } |
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
847 |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
848 /* If the contents are (KEYMAP . ELEMENT), go indirect. */ |
250 | 849 else |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
850 { |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
851 struct gcpro gcpro1; |
30134
784ef95b020b
(get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents:
30030
diff
changeset
|
852 Lisp_Object map; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
853 GCPRO1 (object); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
854 map = get_keymap (Fcar_safe (object), 0, autoload); |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
855 UNGCPRO; |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
856 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
|
857 : 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
|
858 } |
250 | 859 } |
860 } | |
861 | |
31232
5213900983ed
(store_in_keymap): Add `static' to declaration.
Dave Love <fx@gnu.org>
parents:
31208
diff
changeset
|
862 static Lisp_Object |
250 | 863 store_in_keymap (keymap, idx, def) |
864 Lisp_Object keymap; | |
865 register Lisp_Object idx; | |
866 register Lisp_Object def; | |
867 { | |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
868 /* 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
|
869 where_is_cache = Qnil; |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
870 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
|
871 |
10367
e1c7a3f0c15f
(store_in_keymap): Copy a cons only if car is a string.
Richard M. Stallman <rms@gnu.org>
parents:
10305
diff
changeset
|
872 /* 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
|
873 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
|
874 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
|
875 && (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
|
876 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
|
877 |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
878 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
|
879 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
|
880 |
250 | 881 /* If idx is a list (some sort of mouse click, perhaps?), |
882 the index we want to use is the car of the list, which | |
883 ought to be a symbol. */ | |
1315
884c3d7e7172
* keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents:
1264
diff
changeset
|
884 idx = EVENT_HEAD (idx); |
250 | 885 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
886 /* 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
|
887 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
|
888 if (SYMBOLP (idx)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
889 idx = reorder_modifiers (idx); |
3515
9d0af0f2dc0d
(access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents:
3425
diff
changeset
|
890 else if (INTEGERP (idx)) |
9d0af0f2dc0d
(access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents:
3425
diff
changeset
|
891 /* 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
|
892 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
|
893 XSETFASTINT (idx, XINT (idx) & (CHAR_META | (CHAR_META - 1))); |
250 | 894 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
895 /* 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
|
896 { |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
897 Lisp_Object tail; |
250 | 898 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
899 /* 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
|
900 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
|
901 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
|
902 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
|
903 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
|
904 front of the keymap. */ |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
905 Lisp_Object insertion_point; |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
906 |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
907 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
|
908 for (tail = XCDR (keymap); CONSP (tail); tail = XCDR (tail)) |
250 | 909 { |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
910 Lisp_Object elt; |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
911 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
912 elt = XCAR (tail); |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
913 if (VECTORP (elt)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
914 { |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
915 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
|
916 { |
67505
51053176f6b7
(Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
Richard M. Stallman <rms@gnu.org>
parents:
67259
diff
changeset
|
917 CHECK_IMPURE (elt); |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
918 ASET (elt, XFASTINT (idx), def); |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
919 return def; |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
920 } |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
921 insertion_point = tail; |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
922 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
923 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
|
924 { |
17932
78a128b99e05
(access_keymap, store_in_keymap): Don't look in a char-table
Richard M. Stallman <rms@gnu.org>
parents:
17861
diff
changeset
|
925 /* 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
|
926 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
|
927 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
|
928 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
|
929 { |
41593
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
930 Faset (elt, idx, |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
931 /* `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
|
932 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
|
933 unbound entry. */ |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
934 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
|
935 return def; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
936 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
937 insertion_point = tail; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
938 } |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
939 else if (CONSP (elt)) |
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
940 { |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
941 if (EQ (idx, XCAR (elt))) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
942 { |
67505
51053176f6b7
(Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
Richard M. Stallman <rms@gnu.org>
parents:
67259
diff
changeset
|
943 CHECK_IMPURE (elt); |
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39940
diff
changeset
|
944 XSETCDR (elt, def); |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
945 return def; |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
946 } |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
947 } |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
948 else if (EQ (elt, Qkeymap)) |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
949 /* 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
|
950 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
|
951 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
|
952 should be inserted before it. */ |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
953 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
|
954 |
929409595312
* keymap.c (store_in_keymap): Don't forget to QUIT in the
Jim Blandy <jimb@redhat.com>
parents:
1388
diff
changeset
|
955 QUIT; |
250 | 956 } |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
957 |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
958 keymap_end: |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
959 /* 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
|
960 IDX. Let's add one. */ |
67505
51053176f6b7
(Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
Richard M. Stallman <rms@gnu.org>
parents:
67259
diff
changeset
|
961 CHECK_IMPURE (insertion_point); |
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39940
diff
changeset
|
962 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
|
963 Fcons (Fcons (idx, def), XCDR (insertion_point))); |
250 | 964 } |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
965 |
250 | 966 return def; |
967 } | |
968 | |
39837
ccaa40660e40
(Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39702
diff
changeset
|
969 EXFUN (Fcopy_keymap, 1); |
ccaa40660e40
(Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39702
diff
changeset
|
970 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
971 Lisp_Object |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
972 copy_keymap_item (elt) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
973 Lisp_Object elt; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
974 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
975 Lisp_Object res, tem; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
976 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
977 if (!CONSP (elt)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
978 return elt; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
979 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
980 res = tem = elt; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
981 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
982 /* Is this a new format menu item. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
983 if (EQ (XCAR (tem), Qmenu_item)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
984 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
985 /* Copy cell with menu-item marker. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
986 res = elt = Fcons (XCAR (tem), XCDR (tem)); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
987 tem = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
988 if (CONSP (tem)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
989 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
990 /* Copy cell with menu-item name. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
991 XSETCDR (elt, Fcons (XCAR (tem), XCDR (tem))); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
992 elt = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
993 tem = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
994 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
995 if (CONSP (tem)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
996 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
997 /* Copy cell with binding and if the binding is a keymap, |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
998 copy that. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
999 XSETCDR (elt, Fcons (XCAR (tem), XCDR (tem))); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1000 elt = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1001 tem = XCAR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1002 if (CONSP (tem) && EQ (XCAR (tem), Qkeymap)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1003 XSETCAR (elt, Fcopy_keymap (tem)); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1004 tem = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1005 if (CONSP (tem) && CONSP (XCAR (tem))) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1006 /* Delete cache for key equivalences. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1007 XSETCDR (elt, XCDR (tem)); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1008 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1009 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1010 else |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1011 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1012 /* It may be an old fomat menu item. |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1013 Skip the optional menu string. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1014 if (STRINGP (XCAR (tem))) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1015 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1016 /* Copy the cell, since copy-alist didn't go this deep. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1017 res = elt = Fcons (XCAR (tem), XCDR (tem)); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1018 tem = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1019 /* Also skip the optional menu help string. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1020 if (CONSP (tem) && STRINGP (XCAR (tem))) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1021 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1022 XSETCDR (elt, Fcons (XCAR (tem), XCDR (tem))); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1023 elt = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1024 tem = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1025 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1026 /* There may also be a list that caches key equivalences. |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1027 Just delete it for the new keymap. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1028 if (CONSP (tem) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1029 && CONSP (XCAR (tem)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1030 && (NILP (XCAR (XCAR (tem))) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1031 || VECTORP (XCAR (XCAR (tem))))) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1032 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1033 XSETCDR (elt, XCDR (tem)); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1034 tem = XCDR (tem); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1035 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1036 if (CONSP (tem) && EQ (XCAR (tem), Qkeymap)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1037 XSETCDR (elt, Fcopy_keymap (tem)); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1038 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1039 else if (EQ (XCAR (tem), Qkeymap)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1040 res = Fcopy_keymap (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1041 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1042 return res; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1043 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1044 |
49912
e9f8f5a9cef6
(copy_keymap_1): Make it static.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49902
diff
changeset
|
1045 static void |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1046 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
|
1047 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
|
1048 { |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1049 Faset (chartable, idx, copy_keymap_item (elt)); |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1050 } |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
1051 |
250 | 1052 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
|
1053 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
|
1054 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
|
1055 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
|
1056 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
|
1057 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
|
1058 is not copied. */) |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1059 (keymap) |
250 | 1060 Lisp_Object keymap; |
1061 { | |
1062 register Lisp_Object copy, tail; | |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1063 keymap = get_keymap (keymap, 1, 0); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1064 copy = tail = Fcons (Qkeymap, Qnil); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1065 keymap = XCDR (keymap); /* Skip the `keymap' symbol. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1066 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1067 while (CONSP (keymap) && !EQ (XCAR (keymap), Qkeymap)) |
250 | 1068 { |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1069 Lisp_Object elt = XCAR (keymap); |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1070 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
|
1071 { |
20076
374e09781f08
(Faccessible_keymaps): Avoid alloca for fixed-size array.
Karl Heuer <kwzh@gnu.org>
parents:
20070
diff
changeset
|
1072 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
|
1073 elt = Fcopy_sequence (elt); |
51034
a5bb1c5181ac
(Fset_keymap_parent, map_keymap, Fcopy_keymap)
Richard M. Stallman <rms@gnu.org>
parents:
50828
diff
changeset
|
1074 map_char_table (copy_keymap_1, Qnil, elt, elt, elt, 0, indices); |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1075 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1076 else if (VECTORP (elt)) |
250 | 1077 { |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
1078 int i; |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
1079 elt = Fcopy_sequence (elt); |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
1080 for (i = 0; i < ASIZE (elt); i++) |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1081 ASET (elt, i, copy_keymap_item (AREF (elt, i))); |
250 | 1082 } |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1083 else if (CONSP (elt)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1084 elt = Fcons (XCAR (elt), copy_keymap_item (XCDR (elt))); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1085 XSETCDR (tail, Fcons (elt, Qnil)); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1086 tail = XCDR (tail); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1087 keymap = XCDR (keymap); |
250 | 1088 } |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1089 XSETCDR (tail, keymap); |
250 | 1090 return copy; |
1091 } | |
1092 | |
465 | 1093 /* Simple Keymap mutators and accessors. */ |
1094 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1095 /* 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
|
1096 |
250 | 1097 DEFUN ("define-key", Fdefine_key, Sdefine_key, 3, 3, 0, |
49902
7efa3eeb04ec
(Fdefine_key): Clarification of formulation.
Kai Großjohann <kgrossjo@eu.uu.net>
parents:
49901
diff
changeset
|
1098 doc: /* In KEYMAP, define key sequence KEY as DEF. |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1099 KEYMAP is a keymap. |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1100 |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1101 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
|
1102 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
|
1103 above 127 (such as ISO Latin-1) can be included if you use a vector. |
46142
03d01403f6b7
(Fdefine_key): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
46133
diff
changeset
|
1104 Using [t] for KEY creates a default definition, which applies to any |
49868
466824c9db4a
Typo in docstring for define-key.
Kai Großjohann <kgrossjo@eu.uu.net>
parents:
49757
diff
changeset
|
1105 event type that has no other definition in this keymap. |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1106 |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1107 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
|
1108 nil (means key is undefined in this keymap), |
55722
623ab06bb37b
(Fdefine_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
55006
diff
changeset
|
1109 a command (a Lisp function suitable for interactive calling), |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1110 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
|
1111 a keymap (to define a prefix key), |
55722
623ab06bb37b
(Fdefine_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
55006
diff
changeset
|
1112 a symbol (when the key is looked up, the symbol will stand for its |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1113 function definition, which should at that time be one of the above, |
55722
623ab06bb37b
(Fdefine_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
55006
diff
changeset
|
1114 or another symbol whose function definition is used, etc.), |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1115 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
|
1116 (DEFN should be a valid definition in its own right), |
55722
623ab06bb37b
(Fdefine_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
55006
diff
changeset
|
1117 or a cons (MAP . CHAR), meaning use definition of CHAR in keymap MAP. |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1118 |
49901
71b3917cf40b
(Fdefine_key): Doc fix.
Kai Großjohann <kgrossjo@eu.uu.net>
parents:
49868
diff
changeset
|
1119 If KEYMAP is a sparse keymap with a binding for KEY, the existing |
71b3917cf40b
(Fdefine_key): Doc fix.
Kai Großjohann <kgrossjo@eu.uu.net>
parents:
49868
diff
changeset
|
1120 binding is altered. If there is no binding for KEY, the new pair |
71b3917cf40b
(Fdefine_key): Doc fix.
Kai Großjohann <kgrossjo@eu.uu.net>
parents:
49868
diff
changeset
|
1121 binding KEY to DEF is added at 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
|
1122 (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
|
1123 Lisp_Object keymap; |
250 | 1124 Lisp_Object key; |
1125 Lisp_Object def; | |
1126 { | |
1127 register int idx; | |
1128 register Lisp_Object c; | |
1129 register Lisp_Object cmd; | |
1130 int metized = 0; | |
2059 | 1131 int meta_bit; |
250 | 1132 int length; |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
1133 struct gcpro gcpro1, gcpro2, gcpro3; |
250 | 1134 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1135 GCPRO3 (keymap, key, def); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1136 keymap = get_keymap (keymap, 1, 1); |
250 | 1137 |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1138 if (!VECTORP (key) && !STRINGP (key)) |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1139 key = wrong_type_argument (Qarrayp, key); |
250 | 1140 |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
1141 length = XFASTINT (Flength (key)); |
250 | 1142 if (length == 0) |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1143 RETURN_UNGCPRO (Qnil); |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1144 |
12297
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
1145 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
|
1146 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
|
1147 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1148 meta_bit = VECTORP (key) ? meta_modifier : 0x80; |
2059 | 1149 |
250 | 1150 idx = 0; |
1151 while (1) | |
1152 { | |
1153 c = Faref (key, make_number (idx)); | |
1154 | |
10840
3a7336f191b9
(Fdefine_key): Handle Lucid-style (crtl backspace) etc.
Richard M. Stallman <rms@gnu.org>
parents:
10810
diff
changeset
|
1155 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
|
1156 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
|
1157 |
42404
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1158 if (SYMBOLP (c)) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1159 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
|
1160 |
9123
c225137ddefb
(get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents:
8922
diff
changeset
|
1161 if (INTEGERP (c) |
2059 | 1162 && (XINT (c) & meta_bit) |
250 | 1163 && !metized) |
1164 { | |
1165 c = meta_prefix_char; | |
1166 metized = 1; | |
1167 } | |
1168 else | |
1169 { | |
9123
c225137ddefb
(get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents:
8922
diff
changeset
|
1170 if (INTEGERP (c)) |
2093
ce8bad247b1a
(Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents:
2059
diff
changeset
|
1171 XSETINT (c, XINT (c) & ~meta_bit); |
250 | 1172 |
1173 metized = 0; | |
1174 idx++; | |
1175 } | |
1176 | |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1177 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
|
1178 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
|
1179 |
250 | 1180 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
|
1181 RETURN_UNGCPRO (store_in_keymap (keymap, c, def)); |
250 | 1182 |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1183 cmd = access_keymap (keymap, c, 0, 1, 1); |
250 | 1184 |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1185 /* If this key is undefined, make it a prefix. */ |
485 | 1186 if (NILP (cmd)) |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1187 cmd = define_as_prefix (keymap, c); |
250 | 1188 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1189 keymap = get_keymap (cmd, 0, 1); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1190 if (!CONSP (keymap)) |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
1191 /* 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
|
1192 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
|
1193 error ("Key sequence %s uses invalid prefix characters", |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
1194 SDATA (Fkey_description (key, Qnil))); |
250 | 1195 } |
1196 } | |
1197 | |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1198 /* 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
|
1199 |
49757
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
1200 DEFUN ("command-remapping", Fcommand_remapping, Scommand_remapping, 1, 1, 0, |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1201 doc: /* Return the remapping for command COMMAND in current keymaps. |
49720
e4fcec69ba69
(Fremap_command): Return nil if arg is not a symbol.
Kim F. Storm <storm@cua.dk>
parents:
49059
diff
changeset
|
1202 Returns nil if COMMAND is not remapped (or not a symbol). */) |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1203 (command) |
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1204 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
|
1205 { |
49720
e4fcec69ba69
(Fremap_command): Return nil if arg is not a symbol.
Kim F. Storm <storm@cua.dk>
parents:
49059
diff
changeset
|
1206 if (!SYMBOLP (command)) |
e4fcec69ba69
(Fremap_command): Return nil if arg is not a symbol.
Kim F. Storm <storm@cua.dk>
parents:
49059
diff
changeset
|
1207 return Qnil; |
e4fcec69ba69
(Fremap_command): Return nil if arg is not a symbol.
Kim F. Storm <storm@cua.dk>
parents:
49059
diff
changeset
|
1208 |
49757
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
1209 ASET (command_remapping_vector, 1, command); |
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
1210 return Fkey_binding (command_remapping_vector, Qnil, Qt); |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1211 } |
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1212 |
42206 | 1213 /* 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
|
1214 /* GC is possible in this function if it autoloads a keymap. */ |
250 | 1215 |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1216 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
|
1217 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
|
1218 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
|
1219 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1220 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
|
1221 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
|
1222 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
|
1223 The number is how many characters at the front of KEY |
67505
51053176f6b7
(Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
Richard M. Stallman <rms@gnu.org>
parents:
67259
diff
changeset
|
1224 it takes to reach a non-prefix key. |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1225 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1226 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
|
1227 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
|
1228 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
|
1229 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
|
1230 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
|
1231 (keymap, key, accept_default) |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1232 Lisp_Object keymap; |
250 | 1233 Lisp_Object key; |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1234 Lisp_Object accept_default; |
250 | 1235 { |
1236 register int idx; | |
1237 register Lisp_Object cmd; | |
1238 register Lisp_Object c; | |
1239 int length; | |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1240 int t_ok = !NILP (accept_default); |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1241 struct gcpro gcpro1, gcpro2; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1242 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1243 GCPRO2 (keymap, key); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1244 keymap = get_keymap (keymap, 1, 1); |
250 | 1245 |
9123
c225137ddefb
(get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents:
8922
diff
changeset
|
1246 if (!VECTORP (key) && !STRINGP (key)) |
250 | 1247 key = wrong_type_argument (Qarrayp, key); |
1248 | |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
1249 length = XFASTINT (Flength (key)); |
250 | 1250 if (length == 0) |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1251 RETURN_UNGCPRO (keymap); |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1252 |
250 | 1253 idx = 0; |
1254 while (1) | |
1255 { | |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1256 c = Faref (key, make_number (idx++)); |
250 | 1257 |
10840
3a7336f191b9
(Fdefine_key): Handle Lucid-style (crtl backspace) etc.
Richard M. Stallman <rms@gnu.org>
parents:
10810
diff
changeset
|
1258 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
|
1259 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
|
1260 |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1261 /* Turn the 8th bit of string chars into a meta modifier. */ |
58450
277e7a013eb6
(Flookup_key): Check INTEGERP before XINT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58271
diff
changeset
|
1262 if (INTEGERP (c) && XINT (c) & 0x80 && STRINGP (key)) |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1263 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
|
1264 |
43504
20832766c3e1
(Flookup_key): Fixed problem in 2001-12-28 patch:
Kim F. Storm <storm@cua.dk>
parents:
43494
diff
changeset
|
1265 /* 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
|
1266 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
|
1267 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
|
1268 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
|
1269 |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1270 cmd = access_keymap (keymap, c, t_ok, 0, 1); |
250 | 1271 if (idx == length) |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1272 RETURN_UNGCPRO (cmd); |
250 | 1273 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1274 keymap = get_keymap (cmd, 0, 1); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1275 if (!CONSP (keymap)) |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1276 RETURN_UNGCPRO (make_number (idx)); |
250 | 1277 |
1278 QUIT; | |
1279 } | |
1280 } | |
1281 | |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1282 /* 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
|
1283 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
|
1284 Return the keymap. */ |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1285 |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1286 static Lisp_Object |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1287 define_as_prefix (keymap, c) |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1288 Lisp_Object keymap, c; |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1289 { |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1290 Lisp_Object cmd; |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1291 |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1292 cmd = Fmake_sparse_keymap (Qnil); |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1293 /* 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
|
1294 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
|
1295 inherit the other prefix definition. */ |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1296 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
|
1297 store_in_keymap (keymap, c, cmd); |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1298 |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1299 return cmd; |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1300 } |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1301 |
2093
ce8bad247b1a
(Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents:
2059
diff
changeset
|
1302 /* 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
|
1303 |
250 | 1304 Lisp_Object |
1305 append_key (key_sequence, key) | |
1306 Lisp_Object key_sequence, key; | |
1307 { | |
1308 Lisp_Object args[2]; | |
1309 | |
1310 args[0] = key_sequence; | |
1311 | |
2093
ce8bad247b1a
(Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents:
2059
diff
changeset
|
1312 args[1] = Fcons (key, Qnil); |
ce8bad247b1a
(Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents:
2059
diff
changeset
|
1313 return Fvconcat (2, args); |
250 | 1314 } |
1315 | |
42404
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1316 /* 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
|
1317 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
|
1318 |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1319 static void |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1320 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
|
1321 Lisp_Object c; |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1322 { |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1323 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
|
1324 int modifiers; |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
1325 |
42404
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1326 parsed = parse_modifiers (c); |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1327 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
|
1328 base = XCAR (parsed); |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1329 name = Fsymbol_name (base); |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1330 /* 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
|
1331 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
|
1332 |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1333 if (! NILP (assoc)) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1334 { |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1335 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
|
1336 char *p = new_mods; |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1337 Lisp_Object keystring; |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1338 if (modifiers & alt_modifier) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1339 { *p++ = '\\'; *p++ = 'A'; *p++ = '-'; } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1340 if (modifiers & ctrl_modifier) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1341 { *p++ = '\\'; *p++ = 'C'; *p++ = '-'; } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1342 if (modifiers & hyper_modifier) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1343 { *p++ = '\\'; *p++ = 'H'; *p++ = '-'; } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1344 if (modifiers & meta_modifier) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1345 { *p++ = '\\'; *p++ = 'M'; *p++ = '-'; } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1346 if (modifiers & shift_modifier) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1347 { *p++ = '\\'; *p++ = 'S'; *p++ = '-'; } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1348 if (modifiers & super_modifier) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1349 { *p++ = '\\'; *p++ = 's'; *p++ = '-'; } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1350 *p = 0; |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1351 |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1352 c = reorder_modifiers (c); |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1353 keystring = concat2 (build_string (new_mods), XCDR (assoc)); |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
1354 |
42404
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1355 error ((modifiers & ~meta_modifier |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1356 ? "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
|
1357 : "To bind the key %s, use \"%s\", not [%s]"), |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
1358 SDATA (SYMBOL_NAME (c)), SDATA (keystring), |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
1359 SDATA (SYMBOL_NAME (c))); |
42404
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1360 } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1361 } |
250 | 1362 |
465 | 1363 /* Global, local, and minor mode keymap stuff. */ |
1364 | |
485 | 1365 /* We can't put these variables inside current_minor_maps, since under |
517 | 1366 some systems, static gets macro-defined to be the empty string. |
1367 Ickypoo. */ | |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1368 static Lisp_Object *cmm_modes = NULL, *cmm_maps = NULL; |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1369 static int cmm_size = 0; |
485 | 1370 |
12542
f86a10208f7e
(current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents:
12297
diff
changeset
|
1371 /* 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
|
1372 static Lisp_Object |
f86a10208f7e
(current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents:
12297
diff
changeset
|
1373 current_minor_maps_error () |
f86a10208f7e
(current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents:
12297
diff
changeset
|
1374 { |
f86a10208f7e
(current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents:
12297
diff
changeset
|
1375 return Qnil; |
f86a10208f7e
(current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents:
12297
diff
changeset
|
1376 } |
f86a10208f7e
(current_minor_maps): Catch errors in Findirect_function.
Karl Heuer <kwzh@gnu.org>
parents:
12297
diff
changeset
|
1377 |
465 | 1378 /* Store a pointer to an array of the keymaps of the currently active |
1379 minor modes in *buf, and return the number of maps it contains. | |
1380 | |
1381 This function always returns a pointer to the same buffer, and may | |
1382 free or reallocate it, so if you want to keep it for a long time or | |
1383 hand it out to lisp code, copy it. This procedure will be called | |
1384 for every key sequence read, so the nice lispy approach (return a | |
1385 new assoclist, list, what have you) for each invocation would | |
1386 result in a lot of consing over time. | |
1387 | |
1388 If we used xrealloc/xmalloc and ran out of memory, they would throw | |
1389 back to the command loop, which would try to read a key sequence, | |
1390 which would call this function again, resulting in an infinite | |
1391 loop. Instead, we'll use realloc/malloc and silently truncate the | |
1392 list, let the key sequence be read, and hope some other piece of | |
1393 code signals the error. */ | |
1394 int | |
1395 current_minor_maps (modeptr, mapptr) | |
1396 Lisp_Object **modeptr, **mapptr; | |
1397 { | |
1398 int i = 0; | |
20517
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1399 int list_number = 0; |
517 | 1400 Lisp_Object alist, assoc, var, val; |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1401 Lisp_Object emulation_alists; |
20517
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1402 Lisp_Object lists[2]; |
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1403 |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1404 emulation_alists = Vemulation_mode_map_alists; |
20517
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1405 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
|
1406 lists[1] = Vminor_mode_map_alist; |
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1407 |
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1408 for (list_number = 0; list_number < 2; list_number++) |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1409 { |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1410 if (CONSP (emulation_alists)) |
20517
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1411 { |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1412 alist = XCAR (emulation_alists); |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1413 emulation_alists = XCDR (emulation_alists); |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1414 if (SYMBOLP (alist)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1415 alist = find_symbol_value (alist); |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1416 list_number = -1; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1417 } |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1418 else |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1419 alist = lists[list_number]; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1420 |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1421 for ( ; CONSP (alist); alist = XCDR (alist)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1422 if ((assoc = XCAR (alist), CONSP (assoc)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1423 && (var = XCAR (assoc), SYMBOLP (var)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1424 && (val = find_symbol_value (var), !EQ (val, Qunbound)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1425 && !NILP (val)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1426 { |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1427 Lisp_Object temp; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1428 |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1429 /* If a variable has an entry in Vminor_mode_overriding_map_alist, |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1430 and also an entry in Vminor_mode_map_alist, |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1431 ignore the latter. */ |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1432 if (list_number == 1) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1433 { |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1434 val = assq_no_quit (var, lists[0]); |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1435 if (!NILP (val)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1436 continue; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1437 } |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1438 |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1439 if (i >= cmm_size) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1440 { |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1441 int newsize, allocsize; |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1442 Lisp_Object *newmodes, *newmaps; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1443 |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1444 newsize = cmm_size == 0 ? 30 : cmm_size * 2; |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1445 allocsize = newsize * sizeof *newmodes; |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1446 |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
1447 /* Use malloc here. See the comment above this function. |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1448 Avoid realloc here; it causes spurious traps on GNU/Linux [KFS] */ |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1449 BLOCK_INPUT; |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1450 newmodes = (Lisp_Object *) malloc (allocsize); |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1451 if (newmodes) |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1452 { |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1453 if (cmm_modes) |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1454 { |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1455 bcopy (cmm_modes, newmodes, cmm_size * sizeof cmm_modes[0]); |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1456 free (cmm_modes); |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1457 } |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1458 cmm_modes = newmodes; |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1459 } |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1460 |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1461 newmaps = (Lisp_Object *) malloc (allocsize); |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1462 if (newmaps) |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1463 { |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1464 if (cmm_maps) |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1465 { |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1466 bcopy (cmm_maps, newmaps, cmm_size * sizeof cmm_maps[0]); |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1467 free (cmm_maps); |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1468 } |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1469 cmm_maps = newmaps; |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1470 } |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1471 UNBLOCK_INPUT; |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
1472 |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1473 if (newmodes == NULL || newmaps == NULL) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1474 break; |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1475 cmm_size = newsize; |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1476 } |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1477 |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1478 /* Get the keymap definition--or nil if it is not defined. */ |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1479 temp = internal_condition_case_1 (Findirect_function, |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1480 XCDR (assoc), |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1481 Qerror, current_minor_maps_error); |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1482 if (!NILP (temp)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1483 { |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1484 cmm_modes[i] = var; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1485 cmm_maps [i] = temp; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1486 i++; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1487 } |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1488 } |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1489 } |
465 | 1490 |
485 | 1491 if (modeptr) *modeptr = cmm_modes; |
1492 if (mapptr) *mapptr = cmm_maps; | |
465 | 1493 return i; |
1494 } | |
1495 | |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1496 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
|
1497 0, 1, 0, |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1498 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
|
1499 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
|
1500 `overriding-terminal-local-map'. */) |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1501 (olp) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1502 Lisp_Object olp; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1503 { |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1504 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
|
1505 |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1506 if (!NILP (olp)) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1507 { |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1508 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
|
1509 keymaps = Fcons (current_kboard->Voverriding_terminal_local_map, keymaps); |
59522
031c9a79c55a
(Fcurrent_active_maps): Ignore Voverriding_local_map
Richard M. Stallman <rms@gnu.org>
parents:
58450
diff
changeset
|
1510 /* The doc said that overriding-terminal-local-map should |
031c9a79c55a
(Fcurrent_active_maps): Ignore Voverriding_local_map
Richard M. Stallman <rms@gnu.org>
parents:
58450
diff
changeset
|
1511 override overriding-local-map. The code used them both, |
031c9a79c55a
(Fcurrent_active_maps): Ignore Voverriding_local_map
Richard M. Stallman <rms@gnu.org>
parents:
58450
diff
changeset
|
1512 but it seems clearer to use just one. rms, jan 2005. */ |
031c9a79c55a
(Fcurrent_active_maps): Ignore Voverriding_local_map
Richard M. Stallman <rms@gnu.org>
parents:
58450
diff
changeset
|
1513 else if (!NILP (Voverriding_local_map)) |
031c9a79c55a
(Fcurrent_active_maps): Ignore Voverriding_local_map
Richard M. Stallman <rms@gnu.org>
parents:
58450
diff
changeset
|
1514 keymaps = Fcons (Voverriding_local_map, keymaps); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1515 } |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1516 if (NILP (XCDR (keymaps))) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1517 { |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1518 Lisp_Object local; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1519 Lisp_Object *maps; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1520 int nmaps, i; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1521 |
59522
031c9a79c55a
(Fcurrent_active_maps): Ignore Voverriding_local_map
Richard M. Stallman <rms@gnu.org>
parents:
58450
diff
changeset
|
1522 /* This usually returns the buffer's local map, |
031c9a79c55a
(Fcurrent_active_maps): Ignore Voverriding_local_map
Richard M. Stallman <rms@gnu.org>
parents:
58450
diff
changeset
|
1523 but that can be overridden by a `local-map' property. */ |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1524 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
|
1525 if (!NILP (local)) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1526 keymaps = Fcons (local, keymaps); |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1527 |
59522
031c9a79c55a
(Fcurrent_active_maps): Ignore Voverriding_local_map
Richard M. Stallman <rms@gnu.org>
parents:
58450
diff
changeset
|
1528 /* Now put all the minor mode keymaps on the list. */ |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1529 nmaps = current_minor_maps (0, &maps); |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1530 |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1531 for (i = --nmaps; i >= 0; i--) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1532 if (!NILP (maps[i])) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1533 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
|
1534 |
59522
031c9a79c55a
(Fcurrent_active_maps): Ignore Voverriding_local_map
Richard M. Stallman <rms@gnu.org>
parents:
58450
diff
changeset
|
1535 /* This returns nil unless there is a `keymap' property. */ |
42510
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
1536 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
|
1537 if (!NILP (local)) |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
1538 keymaps = Fcons (local, keymaps); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1539 } |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1540 |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1541 return keymaps; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1542 } |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1543 |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1544 /* 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
|
1545 |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1546 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
|
1547 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
|
1548 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
|
1549 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
|
1550 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1551 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
|
1552 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
|
1553 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
|
1554 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
|
1555 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
|
1556 |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1557 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
|
1558 resulting from looking up KEY by looking up the command in the |
46310
70bccd2fee9f
(Fkey_binding): Fix typo.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
46293
diff
changeset
|
1559 current keymaps. However, if the optional third argument NO-REMAP |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1560 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
|
1561 (key, accept_default, no_remap) |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1562 Lisp_Object key, accept_default, no_remap; |
250 | 1563 { |
465 | 1564 Lisp_Object *maps, value; |
1565 int nmaps, i; | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1566 struct gcpro gcpro1; |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1567 |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1568 GCPRO1 (key); |
465 | 1569 |
12262
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
1570 if (!NILP (current_kboard->Voverriding_terminal_local_map)) |
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
1571 { |
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
1572 value = Flookup_key (current_kboard->Voverriding_terminal_local_map, |
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
1573 key, accept_default); |
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
1574 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
|
1575 goto done; |
12262
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
1576 } |
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
1577 else if (!NILP (Voverriding_local_map)) |
250 | 1578 { |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1579 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
|
1580 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
|
1581 goto done; |
250 | 1582 } |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1583 else |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
1584 { |
13771
28790743a5a3
(Fkey_binding): Handle text-property keymaps.
Karl Heuer <kwzh@gnu.org>
parents:
13343
diff
changeset
|
1585 Lisp_Object local; |
28790743a5a3
(Fkey_binding): Handle text-property keymaps.
Karl Heuer <kwzh@gnu.org>
parents:
13343
diff
changeset
|
1586 |
42510
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
1587 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
|
1588 if (! NILP (local)) |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
1589 { |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
1590 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
|
1591 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
|
1592 goto done; |
42510
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
1593 } |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
1594 |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1595 nmaps = current_minor_maps (0, &maps); |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1596 /* Note that all these maps are GCPRO'd |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1597 in the places where we found them. */ |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1598 |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1599 for (i = 0; i < nmaps; i++) |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1600 if (! NILP (maps[i])) |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1601 { |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1602 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
|
1603 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
|
1604 goto done; |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1605 } |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1606 |
35258
f585b46c055a
Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents:
34906
diff
changeset
|
1607 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
|
1608 if (! NILP (local)) |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1609 { |
13771
28790743a5a3
(Fkey_binding): Handle text-property keymaps.
Karl Heuer <kwzh@gnu.org>
parents:
13343
diff
changeset
|
1610 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
|
1611 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
|
1612 goto done; |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1613 } |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1614 } |
465 | 1615 |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1616 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
|
1617 |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1618 done: |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1619 UNGCPRO; |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1620 if (NILP (value) || INTEGERP (value)) |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1621 return Qnil; |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1622 |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1623 /* 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
|
1624 command, look for a key binding (ie. remapping) for that command. */ |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
1625 |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1626 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
|
1627 { |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1628 Lisp_Object value1; |
49757
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
1629 if (value1 = Fcommand_remapping (value), !NILP (value1)) |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1630 value = value1; |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1631 } |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
1632 |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1633 return value; |
250 | 1634 } |
1635 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1636 /* 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
|
1637 |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1638 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
|
1639 doc: /* Return the binding for command KEYS in current local keymap only. |
56618
166ae6765a44
(Flocal_key_binding, Fglobal_key_binding)
Luc Teirlinck <teirllm@auburn.edu>
parents:
56574
diff
changeset
|
1640 KEYS is a string or vector, a sequence of keystrokes. |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1641 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
|
1642 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1643 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
|
1644 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
|
1645 (keys, accept_default) |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1646 Lisp_Object keys, accept_default; |
250 | 1647 { |
1648 register Lisp_Object map; | |
1649 map = current_buffer->keymap; | |
485 | 1650 if (NILP (map)) |
250 | 1651 return Qnil; |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1652 return Flookup_key (map, keys, accept_default); |
250 | 1653 } |
1654 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1655 /* 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
|
1656 |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1657 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
|
1658 doc: /* Return the binding for command KEYS in current global keymap only. |
56618
166ae6765a44
(Flocal_key_binding, Fglobal_key_binding)
Luc Teirlinck <teirllm@auburn.edu>
parents:
56574
diff
changeset
|
1659 KEYS is a string or vector, a sequence of keystrokes. |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1660 The binding is probably a symbol with a function definition. |
55913
c663e2e97168
(Fdescribe_vector): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
55722
diff
changeset
|
1661 This function's return values are the same as those of `lookup-key' |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1662 \(which see). |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1663 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1664 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
|
1665 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
|
1666 (keys, accept_default) |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1667 Lisp_Object keys, accept_default; |
250 | 1668 { |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1669 return Flookup_key (current_global_map, keys, accept_default); |
250 | 1670 } |
1671 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1672 /* 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
|
1673 |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1674 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
|
1675 doc: /* Find the visible minor mode bindings of KEY. |
64470
f9c745c0d949
(Fminor_mode_key_binding): Delete duplicate words.
Juri Linkov <juri@jurta.org>
parents:
64084
diff
changeset
|
1676 Return an alist of pairs (MODENAME . BINDING), where MODENAME is |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1677 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
|
1678 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
|
1679 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
|
1680 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
|
1681 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
|
1682 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
|
1683 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1684 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
|
1685 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
|
1686 (key, accept_default) |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1687 Lisp_Object key, accept_default; |
465 | 1688 { |
1689 Lisp_Object *modes, *maps; | |
1690 int nmaps; | |
1691 Lisp_Object binding; | |
1692 int i, j; | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1693 struct gcpro gcpro1, gcpro2; |
465 | 1694 |
1695 nmaps = current_minor_maps (&modes, &maps); | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1696 /* Note that all these maps are GCPRO'd |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1697 in the places where we found them. */ |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1698 |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1699 binding = Qnil; |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1700 GCPRO2 (key, binding); |
465 | 1701 |
1702 for (i = j = 0; i < nmaps; i++) | |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1703 if (!NILP (maps[i]) |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1704 && !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
|
1705 && !INTEGERP (binding)) |
465 | 1706 { |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1707 if (KEYMAPP (binding)) |
465 | 1708 maps[j++] = Fcons (modes[i], binding); |
1709 else if (j == 0) | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1710 RETURN_UNGCPRO (Fcons (Fcons (modes[i], binding), Qnil)); |
465 | 1711 } |
1712 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1713 UNGCPRO; |
465 | 1714 return Flist (j, maps); |
1715 } | |
1716 | |
23968
4c423f69142b
(Fdefine_prefix_command): Accept a third argument NAME
Eli Zaretskii <eliz@gnu.org>
parents:
23953
diff
changeset
|
1717 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
|
1718 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
|
1719 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
|
1720 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
|
1721 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
|
1722 as a function. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1723 The third optional argument NAME, if given, supplies a menu name |
56573
b5575b1c51f0
(Fset_keymap_parent, Fdefine_prefix_command): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56217
diff
changeset
|
1724 string for the map. This is required to use the keymap as a menu. |
b5575b1c51f0
(Fset_keymap_parent, Fdefine_prefix_command): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56217
diff
changeset
|
1725 This function returns COMMAND. */) |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1726 (command, mapvar, name) |
23968
4c423f69142b
(Fdefine_prefix_command): Accept a third argument NAME
Eli Zaretskii <eliz@gnu.org>
parents:
23953
diff
changeset
|
1727 Lisp_Object command, mapvar, name; |
250 | 1728 { |
1729 Lisp_Object map; | |
23968
4c423f69142b
(Fdefine_prefix_command): Accept a third argument NAME
Eli Zaretskii <eliz@gnu.org>
parents:
23953
diff
changeset
|
1730 map = Fmake_sparse_keymap (name); |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
1731 Ffset (command, map); |
485 | 1732 if (!NILP (mapvar)) |
250 | 1733 Fset (mapvar, map); |
1734 else | |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
1735 Fset (command, map); |
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
1736 return command; |
250 | 1737 } |
1738 | |
1739 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
|
1740 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
|
1741 (keymap) |
250 | 1742 Lisp_Object keymap; |
1743 { | |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1744 keymap = get_keymap (keymap, 1, 1); |
250 | 1745 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
|
1746 |
250 | 1747 return Qnil; |
1748 } | |
1749 | |
1750 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
|
1751 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
|
1752 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
|
1753 (keymap) |
250 | 1754 Lisp_Object keymap; |
1755 { | |
485 | 1756 if (!NILP (keymap)) |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1757 keymap = get_keymap (keymap, 1, 1); |
250 | 1758 |
1759 current_buffer->keymap = keymap; | |
1760 | |
1761 return Qnil; | |
1762 } | |
1763 | |
1764 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
|
1765 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
|
1766 () |
250 | 1767 { |
1768 return current_buffer->keymap; | |
1769 } | |
1770 | |
1771 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
|
1772 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
|
1773 () |
250 | 1774 { |
1775 return current_global_map; | |
1776 } | |
465 | 1777 |
1778 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
|
1779 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
|
1780 () |
465 | 1781 { |
1782 Lisp_Object *maps; | |
1783 int nmaps = current_minor_maps (0, &maps); | |
1784 | |
1785 return Flist (nmaps, maps); | |
1786 } | |
250 | 1787 |
465 | 1788 /* Help functions for describing and documenting keymaps. */ |
1789 | |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1790 |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1791 static void |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1792 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
|
1793 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
|
1794 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
|
1795 { |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1796 Lisp_Object tem; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1797 |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1798 cmd = get_keymap (get_keyelt (cmd, 0), 0, 0); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1799 if (NILP (cmd)) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1800 return; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1801 |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1802 /* Look for and break cycles. */ |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1803 while (!NILP (tem = Frassq (cmd, maps))) |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1804 { |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1805 Lisp_Object prefix = XCAR (tem); |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1806 int lim = XINT (Flength (XCAR (tem))); |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1807 if (lim <= XINT (Flength (thisseq))) |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1808 { /* This keymap was already seen with a smaller prefix. */ |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1809 int i = 0; |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1810 while (i < lim && EQ (Faref (prefix, make_number (i)), |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1811 Faref (thisseq, make_number (i)))) |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1812 i++; |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1813 if (i >= lim) |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1814 /* `prefix' is a prefix of `thisseq' => there's a cycle. */ |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1815 return; |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1816 } |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1817 /* This occurrence of `cmd' in `maps' does not correspond to a cycle, |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1818 but maybe `cmd' occurs again further down in `maps', so keep |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1819 looking. */ |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1820 maps = XCDR (Fmemq (tem, maps)); |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1821 } |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1822 |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1823 /* If the last key in thisseq is meta-prefix-char, |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1824 turn it into a meta-ized keystroke. We know |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1825 that the event we're about to append is an |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1826 ascii keystroke since we're processing a |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1827 keymap table. */ |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1828 if (is_metized) |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1829 { |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1830 int meta_bit = meta_modifier; |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1831 Lisp_Object last = make_number (XINT (Flength (thisseq)) - 1); |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1832 tem = Fcopy_sequence (thisseq); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
1833 |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1834 Faset (tem, last, make_number (XINT (key) | meta_bit)); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
1835 |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1836 /* This new sequence is the same length as |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1837 thisseq, so stick it in the list right |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1838 after this one. */ |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1839 XSETCDR (tail, |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1840 Fcons (Fcons (tem, cmd), XCDR (tail))); |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1841 } |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1842 else |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1843 { |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1844 tem = append_key (thisseq, key); |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1845 nconc2 (tail, Fcons (Fcons (tem, cmd), Qnil)); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1846 } |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1847 } |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1848 |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1849 static void |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1850 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
|
1851 Lisp_Object args, index, cmd; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1852 { |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1853 accessible_keymaps_1 (index, cmd, |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1854 XCAR (XCAR (args)), |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1855 XCAR (XCDR (args)), |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1856 XCDR (XCDR (args)), |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1857 XINT (XCDR (XCAR (args)))); |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1858 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1859 |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1860 /* This function cannot GC. */ |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1861 |
250 | 1862 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
|
1863 1, 2, 0, |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1864 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
|
1865 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
|
1866 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
|
1867 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
|
1868 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
|
1869 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
|
1870 (keymap, prefix) |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
1871 Lisp_Object keymap, prefix; |
250 | 1872 { |
50190
615d7388f725
(Faccessible_keymaps): Remove unused var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50189
diff
changeset
|
1873 Lisp_Object maps, tail; |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
1874 int prefixlen = 0; |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
1875 |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1876 /* 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
|
1877 |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
1878 if (!NILP (prefix)) |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
1879 prefixlen = XINT (Flength (prefix)); |
250 | 1880 |
8431
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
1881 if (!NILP (prefix)) |
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
1882 { |
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
1883 /* 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
|
1884 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
|
1885 Lisp_Object tem; |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
1886 tem = Flookup_key (keymap, prefix, Qt); |
8473
c285c3b0ea54
(Faccessible_keymaps): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
8464
diff
changeset
|
1887 /* 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
|
1888 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
|
1889 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
|
1890 tem = get_keymap (tem, 0, 0); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1891 if (CONSP (tem)) |
17510
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
1892 { |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
1893 /* 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
|
1894 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
|
1895 if (STRINGP (prefix)) |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
1896 { |
20624
9ac0b485cf60
(describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents:
20576
diff
changeset
|
1897 int i, i_byte, c; |
17510
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
1898 Lisp_Object copy; |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
1899 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
1900 copy = Fmake_vector (make_number (SCHARS (prefix)), Qnil); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
1901 for (i = 0, i_byte = 0; i < SCHARS (prefix);) |
17510
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
1902 { |
20624
9ac0b485cf60
(describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents:
20576
diff
changeset
|
1903 int i_before = i; |
29013
b9565b4bcdf8
(Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents:
26864
diff
changeset
|
1904 |
b9565b4bcdf8
(Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents:
26864
diff
changeset
|
1905 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
|
1906 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
|
1907 c ^= 0200 | meta_modifier; |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
1908 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
|
1909 } |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
1910 prefix = copy; |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
1911 } |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
1912 maps = Fcons (Fcons (prefix, tem), Qnil); |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
1913 } |
8431
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
1914 else |
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
1915 return Qnil; |
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
1916 } |
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
1917 else |
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
1918 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
|
1919 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
|
1920 Qnil); |
250 | 1921 |
1922 /* For each map in the list maps, | |
1923 look at any other maps it points to, | |
1924 and stick them at the end if they are not already in the list. | |
1925 | |
1926 This is a breadth-first traversal, where tail is the queue of | |
1927 nodes, and maps accumulates a list of all nodes visited. */ | |
1928 | |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
1929 for (tail = maps; CONSP (tail); tail = XCDR (tail)) |
250 | 1930 { |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
1931 register Lisp_Object thisseq, thismap; |
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
1932 Lisp_Object last; |
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
1933 /* 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
|
1934 int is_metized; |
250 | 1935 |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
1936 thisseq = Fcar (Fcar (tail)); |
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
1937 thismap = Fcdr (Fcar (tail)); |
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
1938 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
|
1939 is_metized = (XINT (last) >= 0 |
17264
fad065a280dc
(Faccessible_keymaps): When metizing, convert a
Richard M. Stallman <rms@gnu.org>
parents:
17189
diff
changeset
|
1940 /* 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
|
1941 && XINT (last) >= prefixlen |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
1942 && EQ (Faref (thisseq, last), meta_prefix_char)); |
250 | 1943 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
1944 for (; CONSP (thismap); thismap = XCDR (thismap)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
1945 { |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
1946 Lisp_Object elt; |
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
1947 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
1948 elt = XCAR (thismap); |
250 | 1949 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
1950 QUIT; |
250 | 1951 |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1952 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
|
1953 { |
20076
374e09781f08
(Faccessible_keymaps): Avoid alloca for fixed-size array.
Karl Heuer <kwzh@gnu.org>
parents:
20070
diff
changeset
|
1954 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
|
1955 |
51034
a5bb1c5181ac
(Fset_keymap_parent, map_keymap, Fcopy_keymap)
Richard M. Stallman <rms@gnu.org>
parents:
50828
diff
changeset
|
1956 map_char_table (accessible_keymaps_char_table, Qnil, elt, |
36406
f5bdd1200e0e
(Faccessible_keymaps): Pass `is_metized' to accessible_keymaps_char_table.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36405
diff
changeset
|
1957 elt, Fcons (Fcons (maps, make_number (is_metized)), |
36405
7fe1b8d8fc44
*** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36373
diff
changeset
|
1958 Fcons (tail, thisseq)), |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1959 0, indices); |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1960 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1961 else if (VECTORP (elt)) |
250 | 1962 { |
1963 register int i; | |
1964 | |
1965 /* Vector keymap. Scan all the elements. */ | |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
1966 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
|
1967 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
|
1968 maps, tail, thisseq, is_metized); |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1969 |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1970 } |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
1971 else if (CONSP (elt)) |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1972 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
|
1973 maps, tail, thisseq, |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1974 is_metized && INTEGERP (XCAR (elt))); |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1975 |
250 | 1976 } |
1977 } | |
1978 | |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
1979 return maps; |
250 | 1980 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1981 |
250 | 1982 Lisp_Object Qsingle_key_description, Qkey_description; |
1983 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1984 /* This function cannot GC. */ |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1985 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
1986 DEFUN ("key-description", Fkey_description, Skey_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
|
1987 doc: /* Return a pretty description of key-sequence KEYS. |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
1988 Optional arg PREFIX is the sequence of keys leading up to KEYS. |
55913
c663e2e97168
(Fdescribe_vector): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
55722
diff
changeset
|
1989 Control characters turn into "C-foo" sequences, meta into "M-foo", |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1990 spaces are put between sequence elements, etc. */) |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
1991 (keys, prefix) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
1992 Lisp_Object keys, prefix; |
250 | 1993 { |
31829
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31496
diff
changeset
|
1994 int len = 0; |
20624
9ac0b485cf60
(describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents:
20576
diff
changeset
|
1995 int i, i_byte; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
1996 Lisp_Object *args; |
55006
5429150a04f3
(Fkey_description): Fix the usual int/Lisp_Object mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54925
diff
changeset
|
1997 int size = XINT (Flength (keys)); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
1998 Lisp_Object list; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
1999 Lisp_Object sep = build_string (" "); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2000 Lisp_Object key; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2001 int add_meta = 0; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2002 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2003 if (!NILP (prefix)) |
55006
5429150a04f3
(Fkey_description): Fix the usual int/Lisp_Object mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54925
diff
changeset
|
2004 size += XINT (Flength (prefix)); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2005 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2006 /* This has one extra element at the end that we don't pass to Fconcat. */ |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2007 args = (Lisp_Object *) alloca (size * 4 * sizeof (Lisp_Object)); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2008 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2009 /* In effect, this computes |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2010 (mapconcat 'single-key-description keys " ") |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2011 but we shouldn't use mapconcat because it can do GC. */ |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2012 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2013 next_list: |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2014 if (!NILP (prefix)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2015 list = prefix, prefix = Qnil; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2016 else if (!NILP (keys)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2017 list = keys, keys = Qnil; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2018 else |
2059 | 2019 { |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2020 if (add_meta) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2021 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2022 args[len] = Fsingle_key_description (meta_prefix_char, Qnil); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2023 len += 2; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2024 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2025 else if (len == 0) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2026 return empty_string; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2027 return Fconcat (len - 1, args); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2028 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2029 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2030 if (STRINGP (list)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2031 size = SCHARS (list); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2032 else if (VECTORP (list)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2033 size = XVECTOR (list)->size; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2034 else if (CONSP (list)) |
55006
5429150a04f3
(Fkey_description): Fix the usual int/Lisp_Object mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54925
diff
changeset
|
2035 size = XINT (Flength (list)); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2036 else |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2037 wrong_type_argument (Qarrayp, list); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2038 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2039 i = i_byte = 0; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2040 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2041 while (i < size) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2042 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2043 if (STRINGP (list)) |
2059 | 2044 { |
20624
9ac0b485cf60
(describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents:
20576
diff
changeset
|
2045 int c; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2046 FETCH_STRING_CHAR_ADVANCE (c, list, i, i_byte); |
29013
b9565b4bcdf8
(Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents:
26864
diff
changeset
|
2047 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
|
2048 c ^= 0200 | meta_modifier; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2049 XSETFASTINT (key, c); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2050 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2051 else if (VECTORP (list)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2052 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2053 key = AREF (list, i++); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2054 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2055 else |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2056 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2057 key = XCAR (list); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2058 list = XCDR (list); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2059 i++; |
2059 | 2060 } |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2061 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2062 if (add_meta) |
23953
c8cdb4e487cb
(Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents:
23776
diff
changeset
|
2063 { |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2064 if (!INTEGERP (key) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2065 || EQ (key, meta_prefix_char) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2066 || (XINT (key) & meta_modifier)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2067 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2068 args[len++] = Fsingle_key_description (meta_prefix_char, Qnil); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2069 args[len++] = sep; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2070 if (EQ (key, meta_prefix_char)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2071 continue; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2072 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2073 else |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2074 XSETINT (key, (XINT (key) | meta_modifier) & ~0x80); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2075 add_meta = 0; |
23953
c8cdb4e487cb
(Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents:
23776
diff
changeset
|
2076 } |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2077 else if (EQ (key, meta_prefix_char)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2078 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2079 add_meta = 1; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2080 continue; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2081 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2082 args[len++] = Fsingle_key_description (key, Qnil); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2083 args[len++] = sep; |
23953
c8cdb4e487cb
(Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents:
23776
diff
changeset
|
2084 } |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2085 goto next_list; |
250 | 2086 } |
2087 | |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2088 |
250 | 2089 char * |
34906
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2090 push_key_description (c, p, force_multibyte) |
250 | 2091 register unsigned int c; |
2092 register char *p; | |
34906
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2093 int force_multibyte; |
250 | 2094 { |
30780
b4fcea50ee82
(push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents:
30609
diff
changeset
|
2095 unsigned c2; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
2096 |
2343
ddb30eaf2f56
(push_key_description): Ignore bits above meta_modifier.
Richard M. Stallman <rms@gnu.org>
parents:
2093
diff
changeset
|
2097 /* 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
|
2098 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
|
2099 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
|
2100 | 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
|
2101 |
2059 | 2102 if (c & alt_modifier) |
2103 { | |
2104 *p++ = 'A'; | |
2105 *p++ = '-'; | |
2106 c -= alt_modifier; | |
2107 } | |
30780
b4fcea50ee82
(push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents:
30609
diff
changeset
|
2108 if ((c & ctrl_modifier) != 0 |
b4fcea50ee82
(push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents:
30609
diff
changeset
|
2109 || (c2 < ' ' && c2 != 27 && c2 != '\t' && c2 != Ctl ('M'))) |
2059 | 2110 { |
2111 *p++ = 'C'; | |
2112 *p++ = '-'; | |
30780
b4fcea50ee82
(push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents:
30609
diff
changeset
|
2113 c &= ~ctrl_modifier; |
2059 | 2114 } |
2115 if (c & hyper_modifier) | |
2116 { | |
2117 *p++ = 'H'; | |
2118 *p++ = '-'; | |
2119 c -= hyper_modifier; | |
2120 } | |
2121 if (c & meta_modifier) | |
250 | 2122 { |
2123 *p++ = 'M'; | |
2124 *p++ = '-'; | |
2059 | 2125 c -= meta_modifier; |
2126 } | |
2127 if (c & shift_modifier) | |
2128 { | |
2129 *p++ = 'S'; | |
2130 *p++ = '-'; | |
2131 c -= shift_modifier; | |
2132 } | |
2133 if (c & super_modifier) | |
2134 { | |
2135 *p++ = 's'; | |
2136 *p++ = '-'; | |
2137 c -= super_modifier; | |
250 | 2138 } |
2139 if (c < 040) | |
2140 { | |
2141 if (c == 033) | |
2142 { | |
2143 *p++ = 'E'; | |
2144 *p++ = 'S'; | |
2145 *p++ = 'C'; | |
2146 } | |
2059 | 2147 else if (c == '\t') |
250 | 2148 { |
2149 *p++ = 'T'; | |
2150 *p++ = 'A'; | |
2151 *p++ = 'B'; | |
2152 } | |
16875
d9956cf6699b
(push_key_description): Print C-j, not TAB.
Richard M. Stallman <rms@gnu.org>
parents:
16465
diff
changeset
|
2153 else if (c == Ctl ('M')) |
250 | 2154 { |
2155 *p++ = 'R'; | |
2156 *p++ = 'E'; | |
2157 *p++ = 'T'; | |
2158 } | |
2159 else | |
2160 { | |
30780
b4fcea50ee82
(push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents:
30609
diff
changeset
|
2161 /* `C-' already added above. */ |
250 | 2162 if (c > 0 && c <= Ctl ('Z')) |
2163 *p++ = c + 0140; | |
2164 else | |
2165 *p++ = c + 0100; | |
2166 } | |
2167 } | |
2168 else if (c == 0177) | |
2169 { | |
2170 *p++ = 'D'; | |
2171 *p++ = 'E'; | |
2172 *p++ = 'L'; | |
2173 } | |
2174 else if (c == ' ') | |
24394
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2175 { |
250 | 2176 *p++ = 'S'; |
2177 *p++ = 'P'; | |
2178 *p++ = 'C'; | |
2179 } | |
24396
340189fd508f
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
24394
diff
changeset
|
2180 else if (c < 128 |
340189fd508f
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
24394
diff
changeset
|
2181 || (NILP (current_buffer->enable_multibyte_characters) |
34906
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2182 && SINGLE_BYTE_CHAR_P (c) |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2183 && !force_multibyte)) |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2184 { |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2185 *p++ = c; |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2186 } |
250 | 2187 else |
2059 | 2188 { |
34906
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2189 int valid_p = SINGLE_BYTE_CHAR_P (c) || char_valid_p (c, 0); |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
2190 |
34906
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2191 if (force_multibyte && valid_p) |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2192 { |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2193 if (SINGLE_BYTE_CHAR_P (c)) |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2194 c = unibyte_char_to_multibyte (c); |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2195 p += CHAR_STRING (c, p); |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2196 } |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2197 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
|
2198 || valid_p) |
24394
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2199 { |
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2200 int bit_offset; |
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2201 *p++ = '\\'; |
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2202 /* The biggest character code uses 19 bits. */ |
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2203 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
|
2204 { |
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2205 if (c >= (1 << bit_offset)) |
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2206 *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
|
2207 } |
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2208 } |
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2209 else |
34906
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2210 p += CHAR_STRING (c, p); |
2059 | 2211 } |
250 | 2212 |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
2213 return p; |
250 | 2214 } |
2215 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2216 /* This function cannot GC. */ |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2217 |
30559
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2218 DEFUN ("single-key-description", Fsingle_key_description, |
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2219 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
|
2220 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
|
2221 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
|
2222 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
|
2223 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
|
2224 (key, no_angles) |
30559
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2225 Lisp_Object key, no_angles; |
250 | 2226 { |
23953
c8cdb4e487cb
(Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents:
23776
diff
changeset
|
2227 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
|
2228 key = Fevent_convert_list (key); |
c8cdb4e487cb
(Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents:
23776
diff
changeset
|
2229 |
1315
884c3d7e7172
* keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents:
1264
diff
changeset
|
2230 key = EVENT_HEAD (key); |
517 | 2231 |
10008
b83150a8020d
(Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9973
diff
changeset
|
2232 if (INTEGERP (key)) /* Normal character */ |
250 | 2233 { |
23734
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2234 unsigned int charset, c1, c2; |
23776
529965d3c653
(Fsingle_key_description): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
23758
diff
changeset
|
2235 int without_bits = XINT (key) & ~((-1) << CHARACTERBITS); |
529965d3c653
(Fsingle_key_description): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
23758
diff
changeset
|
2236 |
529965d3c653
(Fsingle_key_description): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
23758
diff
changeset
|
2237 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
|
2238 charset = 0; |
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2239 else |
29013
b9565b4bcdf8
(Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents:
26864
diff
changeset
|
2240 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
|
2241 |
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2242 if (charset |
24394
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2243 && CHARSET_DEFINED_P (charset) |
23734
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2244 && ((c1 >= 0 && c1 < 32) |
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2245 || (c2 >= 0 && c2 < 32))) |
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2246 { |
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2247 /* Handle a generic character. */ |
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2248 Lisp_Object name; |
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2249 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
|
2250 CHECK_STRING (name); |
23734
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2251 return concat2 (build_string ("Character set "), name); |
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2252 } |
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2253 else |
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2254 { |
37930
ee47b5c14208
(Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents:
37747
diff
changeset
|
2255 char tem[KEY_DESCRIPTION_SIZE], *end; |
ee47b5c14208
(Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents:
37747
diff
changeset
|
2256 int nbytes, nchars; |
ee47b5c14208
(Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents:
37747
diff
changeset
|
2257 Lisp_Object string; |
ee47b5c14208
(Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents:
37747
diff
changeset
|
2258 |
ee47b5c14208
(Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents:
37747
diff
changeset
|
2259 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
|
2260 nbytes = end - tem; |
ee47b5c14208
(Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents:
37747
diff
changeset
|
2261 nchars = multibyte_chars_in_text (tem, nbytes); |
ee47b5c14208
(Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents:
37747
diff
changeset
|
2262 if (nchars == nbytes) |
37938
fdd419d4776a
(Fsingle_key_description): NUL-terminate the string
Gerd Moellmann <gerd@gnu.org>
parents:
37930
diff
changeset
|
2263 { |
fdd419d4776a
(Fsingle_key_description): NUL-terminate the string
Gerd Moellmann <gerd@gnu.org>
parents:
37930
diff
changeset
|
2264 *end = '\0'; |
fdd419d4776a
(Fsingle_key_description): NUL-terminate the string
Gerd Moellmann <gerd@gnu.org>
parents:
37930
diff
changeset
|
2265 string = build_string (tem); |
fdd419d4776a
(Fsingle_key_description): NUL-terminate the string
Gerd Moellmann <gerd@gnu.org>
parents:
37930
diff
changeset
|
2266 } |
37930
ee47b5c14208
(Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents:
37747
diff
changeset
|
2267 else |
ee47b5c14208
(Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents:
37747
diff
changeset
|
2268 string = make_multibyte_string (tem, nchars, nbytes); |
ee47b5c14208
(Fsingle_key_description): Create a multibyte string
Gerd Moellmann <gerd@gnu.org>
parents:
37747
diff
changeset
|
2269 return string; |
23734
44546fc7faad
(Fsingle_key_description): Handle generic characters.
Richard M. Stallman <rms@gnu.org>
parents:
22841
diff
changeset
|
2270 } |
250 | 2271 } |
10008
b83150a8020d
(Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9973
diff
changeset
|
2272 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
|
2273 { |
30559
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2274 if (NILP (no_angles)) |
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2275 { |
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2276 char *buffer |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
2277 = (char *) alloca (SBYTES (SYMBOL_NAME (key)) + 5); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
2278 sprintf (buffer, "<%s>", SDATA (SYMBOL_NAME (key))); |
30559
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2279 return build_string (buffer); |
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2280 } |
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2281 else |
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2282 return Fsymbol_name (key); |
29651
31099bb76b6e
(Fsingle_key_description): Enclose function key and
Gerd Moellmann <gerd@gnu.org>
parents:
29282
diff
changeset
|
2283 } |
10008
b83150a8020d
(Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9973
diff
changeset
|
2284 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
|
2285 return Fcopy_sequence (key); |
b83150a8020d
(Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9973
diff
changeset
|
2286 else |
b83150a8020d
(Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9973
diff
changeset
|
2287 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
|
2288 return Qnil; |
250 | 2289 } |
2290 | |
2291 char * | |
2292 push_text_char_description (c, p) | |
2293 register unsigned int c; | |
2294 register char *p; | |
2295 { | |
2296 if (c >= 0200) | |
2297 { | |
2298 *p++ = 'M'; | |
2299 *p++ = '-'; | |
2300 c -= 0200; | |
2301 } | |
2302 if (c < 040) | |
2303 { | |
2304 *p++ = '^'; | |
2305 *p++ = c + 64; /* 'A' - 1 */ | |
2306 } | |
2307 else if (c == 0177) | |
2308 { | |
2309 *p++ = '^'; | |
2310 *p++ = '?'; | |
2311 } | |
2312 else | |
2313 *p++ = c; | |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
2314 return p; |
250 | 2315 } |
2316 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2317 /* This function cannot GC. */ |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2318 |
250 | 2319 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
|
2320 doc: /* Return a pretty description of file-character CHARACTER. |
56217
dd79816933ec
(Ftext_char_description): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55913
diff
changeset
|
2321 Control characters turn into "^char", etc. This differs from |
dd79816933ec
(Ftext_char_description): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55913
diff
changeset
|
2322 `single-key-description' which turns them into "C-char". |
dd79816933ec
(Ftext_char_description): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55913
diff
changeset
|
2323 Also, this function recognizes the 2**7 bit as the Meta character, |
dd79816933ec
(Ftext_char_description): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55913
diff
changeset
|
2324 whereas `single-key-description' uses the 2**27 bit for Meta. |
dd79816933ec
(Ftext_char_description): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55913
diff
changeset
|
2325 See Info node `(elisp)Describing Characters' for examples. */) |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
2326 (character) |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
2327 Lisp_Object character; |
250 | 2328 { |
26864
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2329 /* 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
|
2330 unsigned char str[6]; |
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2331 int c; |
250 | 2332 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40625
diff
changeset
|
2333 CHECK_NUMBER (character); |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
2334 |
26864
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2335 c = XINT (character); |
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2336 if (!SINGLE_BYTE_CHAR_P (c)) |
17036 | 2337 { |
26864
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2338 int len = CHAR_STRING (c, str); |
17036 | 2339 |
20624
9ac0b485cf60
(describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents:
20576
diff
changeset
|
2340 return make_multibyte_string (str, 1, len); |
17036 | 2341 } |
2342 | |
26864
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2343 *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
|
2344 |
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2345 return build_string (str); |
250 | 2346 } |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2347 |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2348 /* 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
|
2349 a meta bit. */ |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2350 static int |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2351 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
|
2352 Lisp_Object seq; |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2353 { |
9312
dfaf1d41e53d
(synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents:
9273
diff
changeset
|
2354 int i; |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2355 int len = XINT (Flength (seq)); |
6008
d3ccce72be00
(get_keyelt): Discard keyboard equivalents
Richard M. Stallman <rms@gnu.org>
parents:
5785
diff
changeset
|
2356 |
9312
dfaf1d41e53d
(synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents:
9273
diff
changeset
|
2357 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
|
2358 { |
9312
dfaf1d41e53d
(synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents:
9273
diff
changeset
|
2359 Lisp_Object ii, elt; |
6008
d3ccce72be00
(get_keyelt): Discard keyboard equivalents
Richard M. Stallman <rms@gnu.org>
parents:
5785
diff
changeset
|
2360 |
9312
dfaf1d41e53d
(synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents:
9273
diff
changeset
|
2361 XSETFASTINT (ii, i); |
dfaf1d41e53d
(synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents:
9273
diff
changeset
|
2362 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
|
2363 |
9123
c225137ddefb
(get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents:
8922
diff
changeset
|
2364 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
|
2365 || (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
|
2366 return 0; |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2367 } |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2368 |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2369 return 1; |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2370 } |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2371 |
250 | 2372 |
465 | 2373 /* where-is - finding a command in a set of keymaps. */ |
2374 | |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2375 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
|
2376 static Lisp_Object where_is_internal_1 (); |
20319
81424cf4d446
(copy_keymap_1): Fix return type.
Andreas Schwab <schwab@suse.de>
parents:
20076
diff
changeset
|
2377 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
|
2378 |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2379 /* 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
|
2380 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
|
2381 |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2382 static Lisp_Object |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2383 shadow_lookup (shadow, key, flag) |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2384 Lisp_Object shadow, key, flag; |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2385 { |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2386 Lisp_Object tail, value; |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2387 |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2388 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
|
2389 { |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2390 value = Flookup_key (XCAR (tail), key, flag); |
66757
3f4ee1926eb1
(shadow_lookup): If Flookup_key returns a number,
Juri Linkov <juri@jurta.org>
parents:
65456
diff
changeset
|
2391 if (NATNUMP (value)) |
3f4ee1926eb1
(shadow_lookup): If Flookup_key returns a number,
Juri Linkov <juri@jurta.org>
parents:
65456
diff
changeset
|
2392 { |
67070
c83903b9e676
(shadow_lookup): Use make_number to pass a number to Fsubstring.
Ken Raeburn <raeburn@raeburn.org>
parents:
66757
diff
changeset
|
2393 value = Flookup_key (XCAR (tail), |
c83903b9e676
(shadow_lookup): Use make_number to pass a number to Fsubstring.
Ken Raeburn <raeburn@raeburn.org>
parents:
66757
diff
changeset
|
2394 Fsubstring (key, make_number (0), value), flag); |
66757
3f4ee1926eb1
(shadow_lookup): If Flookup_key returns a number,
Juri Linkov <juri@jurta.org>
parents:
65456
diff
changeset
|
2395 if (!NILP (value)) |
3f4ee1926eb1
(shadow_lookup): If Flookup_key returns a number,
Juri Linkov <juri@jurta.org>
parents:
65456
diff
changeset
|
2396 return Qnil; |
3f4ee1926eb1
(shadow_lookup): If Flookup_key returns a number,
Juri Linkov <juri@jurta.org>
parents:
65456
diff
changeset
|
2397 } |
3f4ee1926eb1
(shadow_lookup): If Flookup_key returns a number,
Juri Linkov <juri@jurta.org>
parents:
65456
diff
changeset
|
2398 else if (!NILP (value)) |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2399 return value; |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2400 } |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2401 return Qnil; |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2402 } |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2403 |
53808
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
2404 static Lisp_Object Vmouse_events; |
50141
3770fda038d0
(Vmenu_events): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49912
diff
changeset
|
2405 |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2406 /* 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
|
2407 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2408 static Lisp_Object |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2409 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
|
2410 Lisp_Object definition, keymaps; |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2411 Lisp_Object firstonly, noindirect, no_remap; |
250 | 2412 { |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2413 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
|
2414 Lisp_Object found, sequences; |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2415 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
|
2416 /* 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
|
2417 int nomenus = !NILP (firstonly) && !EQ (firstonly, Qnon_ascii); |
250 | 2418 |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2419 /* 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
|
2420 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
|
2421 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
|
2422 { |
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
2423 Lisp_Object tem; |
49757
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
2424 if (tem = Fcommand_remapping (definition), !NILP (tem)) |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
2425 return Qnil; |
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
2426 } |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2427 |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2428 found = keymaps; |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2429 while (CONSP (found)) |
29282 | 2430 { |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2431 maps = |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
2432 nconc2 (maps, |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
2433 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
|
2434 found = XCDR (found); |
29282 | 2435 } |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
2436 |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2437 GCPRO5 (definition, keymaps, maps, found, sequences); |
250 | 2438 found = Qnil; |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2439 sequences = Qnil; |
250 | 2440 |
485 | 2441 for (; !NILP (maps); maps = Fcdr (maps)) |
250 | 2442 { |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
2443 /* Key sequence to reach map, and the map that it reaches */ |
50141
3770fda038d0
(Vmenu_events): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49912
diff
changeset
|
2444 register Lisp_Object this, map, tem; |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
2445 |
250 | 2446 /* In order to fold [META-PREFIX-CHAR CHAR] sequences into |
2447 [M-CHAR] sequences, check if last character of the sequence | |
2448 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
|
2449 Lisp_Object last; |
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
2450 int last_is_meta; |
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
2451 |
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
2452 this = Fcar (Fcar (maps)); |
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
2453 map = Fcdr (Fcar (maps)); |
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
2454 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
|
2455 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
|
2456 && EQ (Faref (this, last), meta_prefix_char)); |
250 | 2457 |
36373
274190d289d7
(where_is_internal): Accept non-ascii integer prefixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35781
diff
changeset
|
2458 /* if (nomenus && !ascii_sequence_p (this)) */ |
36405
7fe1b8d8fc44
*** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36373
diff
changeset
|
2459 if (nomenus && XINT (last) >= 0 |
50141
3770fda038d0
(Vmenu_events): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49912
diff
changeset
|
2460 && SYMBOLP (tem = Faref (this, make_number (0))) |
53808
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
2461 && !NILP (Fmemq (XCAR (parse_modifiers (tem)), Vmouse_events))) |
34755
1e3d0f2d1145
(where_is_internal): Check ascii_sequence_p rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
34515
diff
changeset
|
2462 /* 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
|
2463 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
|
2464 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
|
2465 continue; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
2466 |
1236
5e8c234e5f03
* keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents:
1209
diff
changeset
|
2467 QUIT; |
5e8c234e5f03
* keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents:
1209
diff
changeset
|
2468 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
2469 while (CONSP (map)) |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
2470 { |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
2471 /* 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
|
2472 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
|
2473 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
|
2474 loop body over both keymap and vector bindings. |
250 | 2475 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
2476 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
|
2477 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
|
2478 have finished off the vector. */ |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2479 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
|
2480 elt = XCAR (map); |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
2481 map = XCDR (map); |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2482 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2483 sequences = Qnil; |
250 | 2484 |
1236
5e8c234e5f03
* keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents:
1209
diff
changeset
|
2485 QUIT; |
5e8c234e5f03
* keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents:
1209
diff
changeset
|
2486 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
2487 /* 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
|
2488 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
|
2489 if (VECTORP (elt)) |
250 | 2490 { |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2491 Lisp_Object sequence; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2492 int i; |
250 | 2493 /* 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
|
2494 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
|
2495 { |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2496 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
|
2497 XSETFASTINT (key, i); |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2498 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
|
2499 noindirect, this, |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2500 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
|
2501 if (!NILP (sequence)) |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2502 sequences = Fcons (sequence, sequences); |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
2503 } |
250 | 2504 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2505 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
|
2506 { |
20076
374e09781f08
(Faccessible_keymaps): Avoid alloca for fixed-size array.
Karl Heuer <kwzh@gnu.org>
parents:
20070
diff
changeset
|
2507 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
|
2508 Lisp_Object args; |
20076
374e09781f08
(Faccessible_keymaps): Avoid alloca for fixed-size array.
Karl Heuer <kwzh@gnu.org>
parents:
20070
diff
changeset
|
2509 |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2510 args = Fcons (Fcons (Fcons (definition, noindirect), |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2511 Qnil), /* Result accumulator. */ |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2512 Fcons (Fcons (this, last), |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2513 Fcons (make_number (nomenus), |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2514 make_number (last_is_meta)))); |
51034
a5bb1c5181ac
(Fset_keymap_parent, map_keymap, Fcopy_keymap)
Richard M. Stallman <rms@gnu.org>
parents:
50828
diff
changeset
|
2515 map_char_table (where_is_internal_2, Qnil, elt, elt, args, |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2516 0, indices); |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2517 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
|
2518 } |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
2519 else if (CONSP (elt)) |
250 | 2520 { |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2521 Lisp_Object sequence; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2522 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
2523 key = XCAR (elt); |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
2524 binding = XCDR (elt); |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2525 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2526 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
|
2527 noindirect, this, |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2528 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
|
2529 if (!NILP (sequence)) |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2530 sequences = Fcons (sequence, sequences); |
250 | 2531 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2532 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2533 |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2534 while (!NILP (sequences)) |
250 | 2535 { |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
2536 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
|
2537 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
2538 sequence = XCAR (sequences); |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2539 sequences = XCDR (sequences); |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2540 |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
2541 /* 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
|
2542 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
|
2543 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
|
2544 remapped = Qnil; |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2545 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
|
2546 && 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
|
2547 && 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
|
2548 && (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
|
2549 { |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
2550 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
|
2551 |
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
2552 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
|
2553 if (CONSP (remapped1)) |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2554 { |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
2555 /* 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
|
2556 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
|
2557 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
|
2558 continue; |
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
2559 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
|
2560 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
|
2561 goto record_sequence; |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2562 } |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2563 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2564 |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2565 /* 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
|
2566 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
|
2567 |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2568 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
|
2569 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
|
2570 ignore this key. |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2571 |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2572 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
|
2573 means undefined. */ |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2574 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
|
2575 continue; |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2576 |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2577 record_sequence: |
61421
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2578 /* Don't annoy user with strings from a menu such as |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2579 Select Paste. Change them all to "(any string)", |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2580 so that there seems to be only one menu item |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2581 to report. */ |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2582 if (! NILP (sequence)) |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2583 { |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2584 Lisp_Object tem; |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2585 tem = Faref (sequence, make_number (XVECTOR (sequence)->size - 1)); |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2586 if (STRINGP (tem)) |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2587 Faset (sequence, make_number (XVECTOR (sequence)->size - 1), |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2588 build_string ("(any string)")); |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2589 } |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2590 |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2591 /* 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
|
2592 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
|
2593 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
|
2594 found = Fcons (sequence, found); |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2595 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2596 /* 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
|
2597 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
|
2598 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
|
2599 we find. */ |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2600 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
|
2601 RETURN_UNGCPRO (sequence); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2602 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
|
2603 RETURN_UNGCPRO (sequence); |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2604 |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2605 if (CONSP (remapped)) |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2606 { |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2607 sequence = XCAR (remapped); |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2608 remapped = XCDR (remapped); |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2609 goto record_sequence; |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2610 } |
250 | 2611 } |
2612 } | |
2613 } | |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2614 |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2615 UNGCPRO; |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2616 |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2617 found = Fnreverse (found); |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2618 |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2619 /* 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
|
2620 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
|
2621 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
|
2622 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
|
2623 return Fcar (found); |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
2624 |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2625 return found; |
250 | 2626 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2627 |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2628 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
|
2629 doc: /* Return list of keys that invoke DEFINITION. |
56635
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
2630 If KEYMAP is a keymap, search only KEYMAP and the global keymap. |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
2631 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
|
2632 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
|
2633 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
2634 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
|
2635 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
|
2636 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
|
2637 no matter what it is. |
56635
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
2638 If FIRSTONLY has another non-nil value, prefer sequences of ASCII characters |
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
2639 \(or their meta variants) and entirely reject menu bindings. |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
2640 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
2641 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
|
2642 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
|
2643 indirect definition itself. |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2644 |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2645 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
|
2646 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
|
2647 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
|
2648 (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
|
2649 Lisp_Object definition, keymap; |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2650 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
|
2651 { |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2652 Lisp_Object sequences, keymaps; |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2653 /* 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
|
2654 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
|
2655 Lisp_Object result; |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2656 |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2657 /* Find the relevant keymaps. */ |
35258
f585b46c055a
Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents:
34906
diff
changeset
|
2658 if (CONSP (keymap) && KEYMAPP (XCAR (keymap))) |
f585b46c055a
Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents:
34906
diff
changeset
|
2659 keymaps = keymap; |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2660 else if (!NILP (keymap)) |
35258
f585b46c055a
Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents:
34906
diff
changeset
|
2661 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
|
2662 else |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2663 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
|
2664 |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2665 /* 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
|
2666 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
|
2667 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
|
2668 { |
35520
beec07f3fec0
(Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents:
35258
diff
changeset
|
2669 Lisp_Object *defns; |
35781
ffdcf20f53f2
(Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35706
diff
changeset
|
2670 int i, j, n; |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2671 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
2672 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2673 /* 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
|
2674 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
|
2675 where_is_cache = Qnil; |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2676 |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2677 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
|
2678 { |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2679 /* 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
|
2680 Lisp_Object args[2]; |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2681 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
|
2682 where_is_cache_keymaps = Qt; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
2683 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2684 /* Fill in the cache. */ |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2685 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
|
2686 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
|
2687 UNGCPRO; |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2688 |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2689 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
|
2690 } |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2691 |
35520
beec07f3fec0
(Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents:
35258
diff
changeset
|
2692 /* 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
|
2693 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
|
2694 over that vector. */ |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2695 sequences = Fgethash (definition, where_is_cache, Qnil); |
36405
7fe1b8d8fc44
*** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36373
diff
changeset
|
2696 n = XINT (Flength (sequences)); |
35520
beec07f3fec0
(Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents:
35258
diff
changeset
|
2697 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
|
2698 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
|
2699 defns[i++] = XCAR (sequences); |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
2700 |
35520
beec07f3fec0
(Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents:
35258
diff
changeset
|
2701 /* 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
|
2702 the following can GC. */ |
beec07f3fec0
(Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents:
35258
diff
changeset
|
2703 GCPRO2 (definition, keymaps); |
beec07f3fec0
(Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents:
35258
diff
changeset
|
2704 result = Qnil; |
35781
ffdcf20f53f2
(Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35706
diff
changeset
|
2705 j = -1; |
35520
beec07f3fec0
(Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents:
35258
diff
changeset
|
2706 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
|
2707 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
|
2708 { |
ffdcf20f53f2
(Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35706
diff
changeset
|
2709 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
|
2710 break; |
ffdcf20f53f2
(Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35706
diff
changeset
|
2711 else if (j < 0) |
ffdcf20f53f2
(Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35706
diff
changeset
|
2712 j = i; |
ffdcf20f53f2
(Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35706
diff
changeset
|
2713 } |
ffdcf20f53f2
(Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35706
diff
changeset
|
2714 |
ffdcf20f53f2
(Fwhere_is_internal): Use the first valid binding
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35706
diff
changeset
|
2715 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
|
2716 UNGCPRO; |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2717 } |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2718 else |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2719 { |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2720 /* 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
|
2721 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
|
2722 where_is_cache = Qnil; |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2723 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
|
2724 } |
35520
beec07f3fec0
(Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents:
35258
diff
changeset
|
2725 |
beec07f3fec0
(Fwhere_is_internal): Don't nreverse the cached
Gerd Moellmann <gerd@gnu.org>
parents:
35258
diff
changeset
|
2726 return result; |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2727 } |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2728 |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2729 /* 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
|
2730 ARGS has the form |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2731 (((DEFINITION . NOINDIRECT) . (KEYMAP . RESULT)) |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2732 . |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2733 ((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
|
2734 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
|
2735 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
|
2736 |
784ef95b020b
(get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents:
30030
diff
changeset
|
2737 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
|
2738 GC. */ |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2739 |
20319
81424cf4d446
(copy_keymap_1): Fix return type.
Andreas Schwab <schwab@suse.de>
parents:
20076
diff
changeset
|
2740 static void |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2741 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
|
2742 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
|
2743 { |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2744 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
|
2745 Lisp_Object result, sequence; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2746 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
|
2747 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
|
2748 |
784ef95b020b
(get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents:
30030
diff
changeset
|
2749 GCPRO3 (args, key, binding); |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2750 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
|
2751 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
|
2752 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
|
2753 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
|
2754 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
|
2755 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
|
2756 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
|
2757 |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2758 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
|
2759 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
|
2760 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2761 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
|
2762 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
|
2763 |
784ef95b020b
(get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents:
30030
diff
changeset
|
2764 UNGCPRO; |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2765 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2766 |
30134
784ef95b020b
(get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents:
30030
diff
changeset
|
2767 |
61421
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
2768 /* This function can GC because get_keyelt can. */ |
30134
784ef95b020b
(get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents:
30030
diff
changeset
|
2769 |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2770 static Lisp_Object |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2771 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
|
2772 nomenus, last_is_meta) |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2773 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
|
2774 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
|
2775 { |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2776 Lisp_Object sequence; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2777 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2778 /* 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
|
2779 if (NILP (noindirect)) |
32145
a48fcf036df1
(Fwhere_is_internal): Ignore `menu-bar' and `tool-bar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32038
diff
changeset
|
2780 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
|
2781 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2782 /* 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
|
2783 the target. */ |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2784 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2785 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
|
2786 || EQ (binding, definition) |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2787 || (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
|
2788 /* Doesn't match. */ |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2789 return Qnil; |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2790 |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2791 /* 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
|
2792 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
|
2793 { |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2794 sequence = Fcopy_sequence (this); |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2795 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
|
2796 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2797 else |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2798 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
|
2799 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2800 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
|
2801 { |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2802 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
|
2803 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
|
2804 return Qnil; |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2805 } |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2806 else |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2807 return sequence; |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2808 } |
250 | 2809 |
465 | 2810 /* describe-bindings - summarizing all the bindings in a set of keymaps. */ |
2811 | |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2812 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
|
2813 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
|
2814 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
|
2815 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
|
2816 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
|
2817 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
|
2818 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
|
2819 \(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
|
2820 (buffer, prefix, menus) |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2821 Lisp_Object buffer, prefix, menus; |
250 | 2822 { |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2823 Lisp_Object outbuf, shadow; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2824 int nomenu = NILP (menus); |
7186
092688f7ebbb
(describe_buffer_bindings): gcpro stuff. Delete some unused code.
Karl Heuer <kwzh@gnu.org>
parents:
7184
diff
changeset
|
2825 register Lisp_Object start1; |
092688f7ebbb
(describe_buffer_bindings): gcpro stuff. Delete some unused code.
Karl Heuer <kwzh@gnu.org>
parents:
7184
diff
changeset
|
2826 struct gcpro gcpro1; |
250 | 2827 |
1120
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2828 char *alternate_heading |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2829 = "\ |
20850
ffbaaba0bf76
(Fdescribe_bindings_internal):
Richard M. Stallman <rms@gnu.org>
parents:
20708
diff
changeset
|
2830 Keyboard translations:\n\n\ |
ffbaaba0bf76
(Fdescribe_bindings_internal):
Richard M. Stallman <rms@gnu.org>
parents:
20708
diff
changeset
|
2831 You type Translation\n\ |
ffbaaba0bf76
(Fdescribe_bindings_internal):
Richard M. Stallman <rms@gnu.org>
parents:
20708
diff
changeset
|
2832 -------- -----------\n"; |
250 | 2833 |
4575
bf0f07186369
(describe_buffer_bindings): Declare shadow just once.
Richard M. Stallman <rms@gnu.org>
parents:
4138
diff
changeset
|
2834 shadow = Qnil; |
7186
092688f7ebbb
(describe_buffer_bindings): gcpro stuff. Delete some unused code.
Karl Heuer <kwzh@gnu.org>
parents:
7184
diff
changeset
|
2835 GCPRO1 (shadow); |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
2836 |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2837 outbuf = Fcurrent_buffer (); |
250 | 2838 |
1120
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2839 /* Report on alternates for keys. */ |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
2840 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
|
2841 { |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2842 int c; |
46470
00b425333e0d
(Fdescribe_buffer_bindings): Use const for pointer to
Ken Raeburn <raeburn@raeburn.org>
parents:
46370
diff
changeset
|
2843 const unsigned char *translate = SDATA (Vkeyboard_translate_table); |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
2844 int translate_len = SCHARS (Vkeyboard_translate_table); |
1120
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2845 |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2846 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
|
2847 if (translate[c] != c) |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2848 { |
26481
70d85ae6dfee
(Fsingle_key_description): Use KEY_DESCRIPTION_SIZE to
Kenichi Handa <handa@m17n.org>
parents:
26404
diff
changeset
|
2849 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
|
2850 char *bufend; |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2851 |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2852 if (alternate_heading) |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2853 { |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2854 insert_string (alternate_heading); |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2855 alternate_heading = 0; |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2856 } |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2857 |
34906
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2858 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
|
2859 insert (buf, bufend - buf); |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2860 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
|
2861 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
|
2862 insert (buf, bufend - buf); |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2863 |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2864 insert ("\n", 1); |
65456
d9638b932900
(Fdescribe_buffer_bindings): Reload `translate'
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
2865 |
d9638b932900
(Fdescribe_buffer_bindings): Reload `translate'
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
2866 /* Insert calls signal_after_change which may GC. */ |
d9638b932900
(Fdescribe_buffer_bindings): Reload `translate'
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
2867 translate = SDATA (Vkeyboard_translate_table); |
1120
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2868 } |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2869 |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2870 insert ("\n", 1); |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2871 } |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2872 |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
2873 if (!NILP (Vkey_translation_map)) |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
2874 describe_map_tree (Vkey_translation_map, 0, Qnil, prefix, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2875 "Key translations", nomenu, 1, 0, 0); |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
2876 |
465 | 2877 |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
2878 /* Print the (major mode) local map. */ |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2879 start1 = Qnil; |
12262
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
2880 if (!NILP (current_kboard->Voverriding_terminal_local_map)) |
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
2881 start1 = current_kboard->Voverriding_terminal_local_map; |
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
2882 else if (!NILP (Voverriding_local_map)) |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
2883 start1 = Voverriding_local_map; |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
2884 |
485 | 2885 if (!NILP (start1)) |
250 | 2886 { |
16465
398e3995162d
(describe_buffer_bindings): Pass 1 for PARTIAL
Richard M. Stallman <rms@gnu.org>
parents:
16227
diff
changeset
|
2887 describe_map_tree (start1, 1, shadow, prefix, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2888 "\f\nOverriding Bindings", nomenu, 0, 0, 0); |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
2889 shadow = Fcons (start1, shadow); |
250 | 2890 } |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2891 else |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2892 { |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2893 /* 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
|
2894 int i, nmaps; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2895 Lisp_Object *modes, *maps; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2896 |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2897 /* 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
|
2898 minor modes correctly. */ |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2899 Fset_buffer (buffer); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2900 |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2901 nmaps = current_minor_maps (&modes, &maps); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2902 Fset_buffer (outbuf); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2903 |
42510
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
2904 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
|
2905 XBUFFER (buffer), Qkeymap); |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
2906 if (!NILP (start1)) |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
2907 { |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
2908 describe_map_tree (start1, 1, shadow, prefix, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2909 "\f\n`keymap' Property Bindings", nomenu, |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2910 0, 0, 0); |
42510
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
2911 shadow = Fcons (start1, shadow); |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
2912 } |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
2913 |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2914 /* Print the minor mode maps. */ |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2915 for (i = 0; i < nmaps; i++) |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2916 { |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2917 /* The title for a minor mode keymap |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2918 is constructed at run time. |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2919 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
|
2920 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
|
2921 char *title, *p; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2922 |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2923 if (!SYMBOLP (modes[i])) |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2924 abort(); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2925 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
2926 p = title = (char *) alloca (42 + SCHARS (SYMBOL_NAME (modes[i]))); |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2927 *p++ = '\f'; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2928 *p++ = '\n'; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2929 *p++ = '`'; |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
2930 bcopy (SDATA (SYMBOL_NAME (modes[i])), p, |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
2931 SCHARS (SYMBOL_NAME (modes[i]))); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
2932 p += SCHARS (SYMBOL_NAME (modes[i])); |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2933 *p++ = '\''; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2934 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
|
2935 p += sizeof (" Minor Mode Bindings") - 1; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2936 *p = 0; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2937 |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2938 describe_map_tree (maps[i], 1, shadow, prefix, |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2939 title, nomenu, 0, 0, 0); |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2940 shadow = Fcons (maps[i], shadow); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2941 } |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2942 |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2943 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
|
2944 XBUFFER (buffer), Qlocal_map); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2945 if (!NILP (start1)) |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2946 { |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2947 if (EQ (start1, XBUFFER (buffer)->keymap)) |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2948 describe_map_tree (start1, 1, shadow, prefix, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2949 "\f\nMajor Mode Bindings", nomenu, 0, 0, 0); |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2950 else |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2951 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
|
2952 "\f\n`local-map' Property Bindings", |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2953 nomenu, 0, 0, 0); |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2954 |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2955 shadow = Fcons (start1, shadow); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2956 } |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2957 } |
250 | 2958 |
16465
398e3995162d
(describe_buffer_bindings): Pass 1 for PARTIAL
Richard M. Stallman <rms@gnu.org>
parents:
16227
diff
changeset
|
2959 describe_map_tree (current_global_map, 1, shadow, prefix, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2960 "\f\nGlobal Bindings", nomenu, 0, 1, 0); |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
2961 |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
2962 /* 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
|
2963 if (!NILP (Vfunction_key_map)) |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
2964 describe_map_tree (Vfunction_key_map, 0, Qnil, prefix, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2965 "\f\nFunction key map translations", nomenu, 1, 0, 0); |
250 | 2966 |
7186
092688f7ebbb
(describe_buffer_bindings): gcpro stuff. Delete some unused code.
Karl Heuer <kwzh@gnu.org>
parents:
7184
diff
changeset
|
2967 UNGCPRO; |
250 | 2968 return Qnil; |
2969 } | |
2970 | |
13947 | 2971 /* Insert a description of the key bindings in STARTMAP, |
250 | 2972 followed by those of all maps reachable through STARTMAP. |
2973 If PARTIAL is nonzero, omit certain "uninteresting" commands | |
2974 (such as `undefined'). | |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
2975 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
|
2976 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
|
2977 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
|
2978 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
|
2979 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
|
2980 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
|
2981 |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
2982 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
|
2983 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
|
2984 |
2e0c4159e94b
(describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
13201
diff
changeset
|
2985 If ALWAYS_TITLE is nonzero, print the title even if there are no maps |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2986 to look through. |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2987 |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2988 If MENTION_SHADOW is nonzero, then when something is shadowed by SHADOW, |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2989 don't omit it; instead, mention it but say it is shadowed. */ |
250 | 2990 |
2991 void | |
13245
2e0c4159e94b
(describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
13201
diff
changeset
|
2992 describe_map_tree (startmap, partial, shadow, prefix, title, nomenu, transl, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
2993 always_title, mention_shadow) |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
2994 Lisp_Object startmap, shadow, prefix; |
250 | 2995 int partial; |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
2996 char *title; |
5551
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
2997 int nomenu; |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
2998 int transl; |
13245
2e0c4159e94b
(describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
13201
diff
changeset
|
2999 int always_title; |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3000 int mention_shadow; |
250 | 3001 { |
20883
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3002 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
|
3003 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
|
3004 int something = 0; |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3005 char *key_heading |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3006 = "\ |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3007 key binding\n\ |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3008 --- -------\n"; |
250 | 3009 |
20883
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3010 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
|
3011 seen = Qnil; |
7184
caac285c072d
(describe_map_tree): gcpro some things.
Karl Heuer <kwzh@gnu.org>
parents:
7183
diff
changeset
|
3012 sub_shadows = Qnil; |
caac285c072d
(describe_map_tree): gcpro some things.
Karl Heuer <kwzh@gnu.org>
parents:
7183
diff
changeset
|
3013 GCPRO3 (maps, seen, sub_shadows); |
250 | 3014 |
5551
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3015 if (nomenu) |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3016 { |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3017 Lisp_Object list; |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3018 |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3019 /* 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
|
3020 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
|
3021 { |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3022 Lisp_Object elt, prefix, tem; |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3023 |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3024 elt = Fcar (list); |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3025 prefix = Fcar (elt); |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3026 if (XVECTOR (prefix)->size >= 1) |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3027 { |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3028 tem = Faref (prefix, make_number (0)); |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3029 if (EQ (tem, Qmenu_bar)) |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3030 maps = Fdelq (elt, maps); |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3031 } |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3032 } |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3033 } |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3034 |
13245
2e0c4159e94b
(describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
13201
diff
changeset
|
3035 if (!NILP (maps) || always_title) |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3036 { |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3037 if (title) |
4023
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3038 { |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3039 insert_string (title); |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3040 if (!NILP (prefix)) |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3041 { |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3042 insert_string (" Starting With "); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3043 insert1 (Fkey_description (prefix, Qnil)); |
4023
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3044 } |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3045 insert_string (":\n"); |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3046 } |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3047 insert_string (key_heading); |
4023
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3048 something = 1; |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3049 } |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3050 |
485 | 3051 for (; !NILP (maps); maps = Fcdr (maps)) |
250 | 3052 { |
7184
caac285c072d
(describe_map_tree): gcpro some things.
Karl Heuer <kwzh@gnu.org>
parents:
7183
diff
changeset
|
3053 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
|
3054 |
250 | 3055 elt = Fcar (maps); |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3056 prefix = Fcar (elt); |
250 | 3057 |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3058 sub_shadows = Qnil; |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3059 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3060 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
|
3061 { |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3062 Lisp_Object shmap; |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3063 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3064 shmap = XCAR (tail); |
250 | 3065 |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3066 /* 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
|
3067 then the shadow map for this keymap is just SHADOW. */ |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
3068 if ((STRINGP (prefix) && SCHARS (prefix) == 0) |
9123
c225137ddefb
(get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents:
8922
diff
changeset
|
3069 || (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
|
3070 ; |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3071 /* 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
|
3072 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
|
3073 what we should use. */ |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3074 else |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3075 { |
6859
f34b91fa388c
(describe_map_tree): Fix call to Flookup_key.
Richard M. Stallman <rms@gnu.org>
parents:
6834
diff
changeset
|
3076 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
|
3077 if (INTEGERP (shmap)) |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3078 shmap = Qnil; |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3079 } |
250 | 3080 |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3081 /* 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
|
3082 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
|
3083 describe this map at all. */ |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3084 if (!NILP (shmap) && !KEYMAPP (shmap)) |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3085 goto skip; |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3086 |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3087 if (!NILP (shmap)) |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3088 sub_shadows = Fcons (shmap, sub_shadows); |
250 | 3089 } |
3090 | |
20883
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3091 /* 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
|
3092 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
|
3093 { |
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3094 Lisp_Object tem; |
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3095 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
|
3096 if (!NILP (tem)) |
20883
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3097 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
|
3098 } |
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3099 |
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3100 describe_map (Fcdr (elt), prefix, |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3101 transl ? describe_translation : describe_command, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3102 partial, sub_shadows, &seen, nomenu, mention_shadow); |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3103 |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3104 skip: ; |
250 | 3105 } |
3106 | |
4023
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3107 if (something) |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3108 insert_string ("\n"); |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3109 |
250 | 3110 UNGCPRO; |
3111 } | |
3112 | |
14304
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3113 static int previous_description_column; |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3114 |
250 | 3115 static void |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3116 describe_command (definition, args) |
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3117 Lisp_Object definition, args; |
250 | 3118 { |
3119 register Lisp_Object tem1; | |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
3120 int column = (int) current_column (); /* iftc */ |
14304
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3121 int description_column; |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3122 |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3123 /* If column 16 is no good, go to col 32; |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3124 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
|
3125 if (column > 30) |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3126 { |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3127 insert_char ('\n'); |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3128 description_column = 32; |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3129 } |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3130 else if (column > 14 || (column > 10 && previous_description_column == 32)) |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3131 description_column = 32; |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3132 else |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3133 description_column = 16; |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3134 |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3135 Findent_to (make_number (description_column), make_number (1)); |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3136 previous_description_column = description_column; |
250 | 3137 |
9123
c225137ddefb
(get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents:
8922
diff
changeset
|
3138 if (SYMBOLP (definition)) |
250 | 3139 { |
45404
3885467d7b12
* keymap.c (silly_event_symbol_error, Fsingle_key_description)
Ken Raeburn <raeburn@raeburn.org>
parents:
45279
diff
changeset
|
3140 tem1 = SYMBOL_NAME (definition); |
250 | 3141 insert1 (tem1); |
21539
b9606d56f91f
Revert erroneous 1998-04-08 change.
Dave Love <fx@gnu.org>
parents:
21514
diff
changeset
|
3142 insert_string ("\n"); |
250 | 3143 } |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3144 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
|
3145 insert_string ("Keyboard Macro\n"); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3146 else if (KEYMAPP (definition)) |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3147 insert_string ("Prefix Command\n"); |
250 | 3148 else |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3149 insert_string ("??\n"); |
250 | 3150 } |
3151 | |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3152 static void |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3153 describe_translation (definition, args) |
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3154 Lisp_Object definition, args; |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3155 { |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3156 register Lisp_Object tem1; |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3157 |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3158 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
|
3159 |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3160 if (SYMBOLP (definition)) |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3161 { |
45404
3885467d7b12
* keymap.c (silly_event_symbol_error, Fsingle_key_description)
Ken Raeburn <raeburn@raeburn.org>
parents:
45279
diff
changeset
|
3162 tem1 = SYMBOL_NAME (definition); |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3163 insert1 (tem1); |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3164 insert_string ("\n"); |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3165 } |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3166 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
|
3167 { |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3168 insert1 (Fkey_description (definition, Qnil)); |
13343
cc0f24bdfab1
(describe_translation): Insert newline after key description.
Richard M. Stallman <rms@gnu.org>
parents:
13245
diff
changeset
|
3169 insert_string ("\n"); |
cc0f24bdfab1
(describe_translation): Insert newline after key description.
Richard M. Stallman <rms@gnu.org>
parents:
13245
diff
changeset
|
3170 } |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3171 else if (KEYMAPP (definition)) |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3172 insert_string ("Prefix Command\n"); |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3173 else |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3174 insert_string ("??\n"); |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3175 } |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3176 |
6974
ab22b527d380
(describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents:
6859
diff
changeset
|
3177 /* Describe the contents of map MAP, assuming that this map itself is |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3178 reached by the sequence of prefix keys PREFIX (a string or vector). |
14129
d0b95da4f1f2
(describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents:
14099
diff
changeset
|
3179 PARTIAL, SHADOW, NOMENU are as in `describe_map_tree' above. */ |
250 | 3180 |
3181 static void | |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3182 describe_map (map, prefix, elt_describer, partial, shadow, |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3183 seen, nomenu, mention_shadow) |
6974
ab22b527d380
(describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents:
6859
diff
changeset
|
3184 register Lisp_Object map; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3185 Lisp_Object prefix; |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3186 void (*elt_describer) P_ ((Lisp_Object, Lisp_Object)); |
250 | 3187 int partial; |
3188 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
|
3189 Lisp_Object *seen; |
14129
d0b95da4f1f2
(describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents:
14099
diff
changeset
|
3190 int nomenu; |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3191 int mention_shadow; |
250 | 3192 { |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3193 Lisp_Object tail, definition, event; |
3908
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3194 Lisp_Object tem; |
250 | 3195 Lisp_Object suppress; |
3196 Lisp_Object kludge; | |
3197 int first = 1; | |
3198 struct gcpro gcpro1, gcpro2, gcpro3; | |
3199 | |
31829
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31496
diff
changeset
|
3200 suppress = Qnil; |
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31496
diff
changeset
|
3201 |
250 | 3202 if (partial) |
3203 suppress = intern ("suppress-keymap"); | |
3204 | |
3205 /* 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
|
3206 that is done once per keymap element, we don't want to cons up a |
250 | 3207 fresh vector every time. */ |
3208 kludge = Fmake_vector (make_number (1), Qnil); | |
3908
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3209 definition = Qnil; |
250 | 3210 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3211 GCPRO3 (prefix, definition, kludge); |
250 | 3212 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3213 for (tail = map; CONSP (tail); tail = XCDR (tail)) |
250 | 3214 { |
3215 QUIT; | |
3216 | |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3217 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
|
3218 || 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
|
3219 describe_vector (XCAR (tail), |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3220 prefix, Qnil, elt_describer, partial, shadow, map, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3221 (int *)0, 0, 1, mention_shadow); |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3222 else if (CONSP (XCAR (tail))) |
250 | 3223 { |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3224 int this_shadowed = 0; |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3225 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
|
3226 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3227 /* Ignore bindings whose "prefix" are not really valid events. |
7341
516dd16e2017
(describe_map): Ignore bindings for all except symbols and integers.
Richard M. Stallman <rms@gnu.org>
parents:
7191
diff
changeset
|
3228 (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
|
3229 if (!(SYMBOLP (event) || INTEGERP (event))) |
7191
bd2f9c5ee54e
(Fsingle_key_description): Undo previous change.
Karl Heuer <kwzh@gnu.org>
parents:
7186
diff
changeset
|
3230 continue; |
7341
516dd16e2017
(describe_map): Ignore bindings for all except symbols and integers.
Richard M. Stallman <rms@gnu.org>
parents:
7191
diff
changeset
|
3231 |
14129
d0b95da4f1f2
(describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents:
14099
diff
changeset
|
3232 if (nomenu && EQ (event, Qmenu_bar)) |
d0b95da4f1f2
(describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents:
14099
diff
changeset
|
3233 continue; |
d0b95da4f1f2
(describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents:
14099
diff
changeset
|
3234 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3235 definition = get_keyelt (XCDR (XCAR (tail)), 0); |
250 | 3236 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3237 /* Don't show undefined commands or suppressed commands. */ |
3908
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3238 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
|
3239 if (SYMBOLP (definition) && partial) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3240 { |
3908
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3241 tem = Fget (definition, suppress); |
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3242 if (!NILP (tem)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3243 continue; |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3244 } |
250 | 3245 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3246 /* 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
|
3247 because a local definition of the same key shadows it. */ |
250 | 3248 |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
3249 ASET (kludge, 0, event); |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3250 if (!NILP (shadow)) |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3251 { |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3252 tem = shadow_lookup (shadow, kludge, Qt); |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3253 if (!NILP (tem)) |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3254 { |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3255 if (mention_shadow) |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3256 this_shadowed = 1; |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3257 else |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3258 continue; |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3259 } |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3260 } |
250 | 3261 |
6974
ab22b527d380
(describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents:
6859
diff
changeset
|
3262 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
|
3263 if (!EQ (tem, definition)) continue; |
3908
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3264 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3265 if (first) |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3266 { |
14304
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3267 previous_description_column = 0; |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3268 insert ("\n", 1); |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3269 first = 0; |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3270 } |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3271 |
3908
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3272 /* THIS gets the string to describe the character EVENT. */ |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3273 insert1 (Fkey_description (kludge, prefix)); |
250 | 3274 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3275 /* 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
|
3276 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
|
3277 for alignment purposes. */ |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3278 (*elt_describer) (definition, Qnil); |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3279 |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3280 if (this_shadowed) |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3281 { |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3282 SET_PT (PT - 1); |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3283 insert_string (" (binding currently shadowed)"); |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3284 SET_PT (PT + 1); |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3285 } |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3286 } |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3287 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
|
3288 { |
4d540eeb2dd5
(describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents:
6974
diff
changeset
|
3289 /* 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
|
3290 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
|
3291 encountered. */ |
4d540eeb2dd5
(describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents:
6974
diff
changeset
|
3292 tem = Fassq (tail, *seen); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3293 if (CONSP (tem) && !NILP (Fequal (XCAR (tem), prefix))) |
6976
4d540eeb2dd5
(describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents:
6974
diff
changeset
|
3294 break; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3295 *seen = Fcons (Fcons (tail, prefix), *seen); |
6976
4d540eeb2dd5
(describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents:
6974
diff
changeset
|
3296 } |
250 | 3297 } |
3298 | |
3299 UNGCPRO; | |
3300 } | |
3301 | |
20319
81424cf4d446
(copy_keymap_1): Fix return type.
Andreas Schwab <schwab@suse.de>
parents:
20076
diff
changeset
|
3302 static void |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3303 describe_vector_princ (elt, fun) |
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3304 Lisp_Object elt, fun; |
250 | 3305 { |
3691
49ce2242f5c1
(get_keymap_1): Add missing semicolon.
Richard M. Stallman <rms@gnu.org>
parents:
3674
diff
changeset
|
3306 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
|
3307 call1 (fun, elt); |
3632
72cfde0cd8cd
(Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents:
3542
diff
changeset
|
3308 Fterpri (Qnil); |
250 | 3309 } |
3310 | |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3311 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
|
3312 doc: /* Insert a description of contents of VECTOR. |
55913
c663e2e97168
(Fdescribe_vector): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
55722
diff
changeset
|
3313 This is text showing the elements of vector matched against indices. |
c663e2e97168
(Fdescribe_vector): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
55722
diff
changeset
|
3314 DESCRIBER is the output function used; nil means use `princ'. */) |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3315 (vector, describer) |
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3316 Lisp_Object vector, describer; |
250 | 3317 { |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
46142
diff
changeset
|
3318 int count = SPECPDL_INDEX (); |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3319 if (NILP (describer)) |
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3320 describer = intern ("princ"); |
3632
72cfde0cd8cd
(Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents:
3542
diff
changeset
|
3321 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
|
3322 CHECK_VECTOR_OR_CHAR_TABLE (vector); |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3323 describe_vector (vector, Qnil, describer, describe_vector_princ, 0, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3324 Qnil, Qnil, (int *)0, 0, 0, 0); |
3632
72cfde0cd8cd
(Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents:
3542
diff
changeset
|
3325 |
72cfde0cd8cd
(Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents:
3542
diff
changeset
|
3326 return unbind_to (count, Qnil); |
250 | 3327 } |
3328 | |
13201
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3329 /* 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
|
3330 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
|
3331 in VECTOR. |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3332 |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3333 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
|
3334 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
|
3335 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
|
3336 |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3337 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
|
3338 leads to this keymap. |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3339 |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3340 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
|
3341 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
|
3342 set described by this chartable. |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3343 |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3344 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
|
3345 (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
|
3346 |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3347 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
|
3348 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
|
3349 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
|
3350 |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3351 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
|
3352 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
|
3353 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
|
3354 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3355 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
|
3356 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
|
3357 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
|
3358 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3359 KEYMAP_P is 1 if vector is known to be a keymap, so map ESC to M-. |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3360 |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3361 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
|
3362 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3363 static void |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3364 describe_vector (vector, 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
|
3365 partial, shadow, entire_map, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3366 indices, char_table_depth, keymap_p, |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3367 mention_shadow) |
250 | 3368 register Lisp_Object vector; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3369 Lisp_Object prefix, args; |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3370 void (*elt_describer) P_ ((Lisp_Object, Lisp_Object)); |
250 | 3371 int partial; |
3372 Lisp_Object shadow; | |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3373 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
|
3374 int *indices; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3375 int char_table_depth; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3376 int keymap_p; |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3377 int mention_shadow; |
250 | 3378 { |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3379 Lisp_Object definition; |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3380 Lisp_Object tem2; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3381 Lisp_Object elt_prefix = Qnil; |
250 | 3382 register int i; |
3383 Lisp_Object suppress; | |
3384 Lisp_Object kludge; | |
3385 int first = 1; | |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3386 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
17036 | 3387 /* Range of elements to be handled. */ |
3388 int from, to; | |
3389 /* A flag to tell if a leaf in this level of char-table is not a | |
3390 generic character (i.e. a complete multibyte character). */ | |
3391 int complete_char; | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3392 int character; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3393 int starting_i; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3394 |
31829
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31496
diff
changeset
|
3395 suppress = Qnil; |
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31496
diff
changeset
|
3396 |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3397 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
|
3398 indices = (int *) alloca (3 * sizeof (int)); |
250 | 3399 |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3400 definition = Qnil; |
250 | 3401 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3402 if (!keymap_p) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3403 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3404 /* Call Fkey_description first, to avoid GC bug for the other string. */ |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3405 if (!NILP (prefix) && XFASTINT (Flength (prefix)) > 0) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3406 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3407 Lisp_Object tem; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3408 tem = Fkey_description (prefix, Qnil); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3409 elt_prefix = concat2 (tem, build_string (" ")); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3410 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3411 prefix = Qnil; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3412 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3413 |
250 | 3414 /* This vector gets used to present single keys to Flookup_key. Since |
3415 that is done once per vector element, we don't want to cons up a | |
3416 fresh vector every time. */ | |
3417 kludge = Fmake_vector (make_number (1), Qnil); | |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3418 GCPRO4 (elt_prefix, prefix, definition, kludge); |
250 | 3419 |
3420 if (partial) | |
3421 suppress = intern ("suppress-keymap"); | |
3422 | |
17036 | 3423 if (CHAR_TABLE_P (vector)) |
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) |
17036 | 3426 { |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3427 /* 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
|
3428 complete_char = 1; |
17036 | 3429 from = 0; |
3430 to = CHAR_TABLE_ORDINARY_SLOTS; | |
3431 } | |
3432 else | |
3433 { | |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3434 /* 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
|
3435 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
|
3436 /* 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
|
3437 error ("Too deep char table"); |
17036 | 3438 |
3439 complete_char | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3440 = (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
|
3441 && ((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
|
3442 && char_table_depth == 1) |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3443 || char_table_depth == 2)); |
17036 | 3444 |
3445 /* Meaningful elements are from 32th to 127th. */ | |
3446 from = 32; | |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3447 to = SUB_CHAR_TABLE_ORDINARY_SLOTS; |
17036 | 3448 } |
3449 } | |
3450 else | |
3451 { | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3452 /* 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
|
3453 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3454 complete_char = 1; |
17036 | 3455 from = 0; |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3456 to = XVECTOR (vector)->size; |
17036 | 3457 } |
3458 | |
3459 for (i = from; i < to; i++) | |
250 | 3460 { |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3461 int this_shadowed = 0; |
250 | 3462 QUIT; |
17189
7c008ec99e97
(describe_vector): Adjusted for the change of CHAR_TABLE_ORDINARY_SLOTS.
Kenichi Handa <handa@m17n.org>
parents:
17111
diff
changeset
|
3463 |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3464 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
|
3465 { |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3466 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
|
3467 complete_char = 0; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3468 |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3469 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
|
3470 && !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
|
3471 continue; |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3472 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3473 definition |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3474 = 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
|
3475 } |
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3476 else |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
3477 definition = get_keyelt (AREF (vector, i), 0); |
250 | 3478 |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3479 if (NILP (definition)) continue; |
17511
10ead0052174
(describe_vector): Test for suppressed commands in
Richard M. Stallman <rms@gnu.org>
parents:
17510
diff
changeset
|
3480 |
250 | 3481 /* Don't mention suppressed commands. */ |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3482 if (SYMBOLP (definition) && partial) |
250 | 3483 { |
17036 | 3484 Lisp_Object tem; |
3485 | |
3486 tem = Fget (definition, suppress); | |
3487 | |
3488 if (!NILP (tem)) continue; | |
250 | 3489 } |
3490 | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3491 /* 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
|
3492 Also update *INDICES. */ |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3493 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
|
3494 { |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3495 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
|
3496 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3497 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
|
3498 { |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3499 character = i; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3500 indices[0] = i - 128; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3501 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3502 else if (complete_char) |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3503 { |
29013
b9565b4bcdf8
(Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents:
26864
diff
changeset
|
3504 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
|
3505 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3506 else |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3507 character = 0; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3508 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3509 else |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3510 character = i; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3511 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3512 ASET (kludge, 0, make_number (character)); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3513 |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3514 /* 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
|
3515 if (!NILP (shadow) && complete_char) |
250 | 3516 { |
3517 Lisp_Object tem; | |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
3518 |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3519 tem = shadow_lookup (shadow, kludge, Qt); |
250 | 3520 |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3521 if (!NILP (tem)) |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3522 { |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3523 if (mention_shadow) |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3524 this_shadowed = 1; |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3525 else |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3526 continue; |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3527 } |
250 | 3528 } |
3529 | |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3530 /* 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
|
3531 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
|
3532 if (!NILP (entire_map) && complete_char) |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3533 { |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3534 Lisp_Object tem; |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3535 |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3536 tem = Flookup_key (entire_map, kludge, Qt); |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3537 |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
3538 if (!EQ (tem, definition)) |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3539 continue; |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3540 } |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3541 |
250 | 3542 if (first) |
3543 { | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3544 if (char_table_depth == 0) |
17036 | 3545 insert ("\n", 1); |
250 | 3546 first = 0; |
3547 } | |
3548 | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3549 /* 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
|
3550 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
|
3551 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
|
3552 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
|
3553 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3554 /* 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
|
3555 if (!NILP (elt_prefix)) |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3556 insert1 (elt_prefix); |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3557 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3558 /* 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
|
3559 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
|
3560 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
|
3561 { |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3562 if (complete_char) |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3563 insert_char (character); |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3564 else |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3565 { |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3566 /* 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
|
3567 characters. */ |
17795
41b7d56b62fb
(describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents:
17788
diff
changeset
|
3568 char work[16]; |
41b7d56b62fb
(describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents:
17788
diff
changeset
|
3569 sprintf (work, "(row %d)", i); |
41b7d56b62fb
(describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents:
17788
diff
changeset
|
3570 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
|
3571 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3572 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3573 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
|
3574 { |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3575 if (complete_char) |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3576 insert1 (Fkey_description (kludge, prefix)); |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3577 else |
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3578 { |
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3579 /* 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
|
3580 insert_string ("<"); |
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3581 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
|
3582 if (STRINGP (tem2)) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
3583 insert_from_string (tem2, 0, 0, SCHARS (tem2), |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
3584 SBYTES (tem2), 0); |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3585 else |
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3586 insert ("?", 1); |
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3587 insert (">", 1); |
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3588 } |
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3589 } |
13201
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3590 else |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3591 { |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3592 insert1 (Fkey_description (kludge, prefix)); |
17036 | 3593 } |
3594 | |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3595 /* If we find a sub char-table within a char-table, |
17036 | 3596 scan it recursively; it defines the details for |
3597 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
|
3598 if (CHAR_TABLE_P (vector) && SUB_CHAR_TABLE_P (definition)) |
17036 | 3599 { |
3600 insert ("\n", 1); | |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3601 describe_vector (definition, 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
|
3602 partial, shadow, entire_map, |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3603 indices, char_table_depth + 1, keymap_p, |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3604 mention_shadow); |
17036 | 3605 continue; |
13201
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3606 } |
250 | 3607 |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3608 starting_i = i; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3609 |
17795
41b7d56b62fb
(describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents:
17788
diff
changeset
|
3610 /* 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
|
3611 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
|
3612 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
|
3613 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
|
3614 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
|
3615 { |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3616 int limit = to; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3617 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3618 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
|
3619 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
|
3620 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3621 while (i + 1 < limit |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3622 && (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
|
3623 !NILP (tem2)) |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3624 && !NILP (Fequal (tem2, definition))) |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3625 i++; |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3626 } |
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3627 else |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3628 while (i + 1 < to |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
3629 && (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
|
3630 !NILP (tem2)) |
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3631 && !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
|
3632 i++; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
3633 |
250 | 3634 |
3635 /* If we have a range of more than one character, | |
3636 print where the range reaches to. */ | |
3637 | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3638 if (i != starting_i) |
250 | 3639 { |
3640 insert (" .. ", 4); | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3641 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3642 ASET (kludge, 0, make_number (i)); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3643 |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3644 if (!NILP (elt_prefix)) |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3645 insert1 (elt_prefix); |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3646 |
13201
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3647 if (CHAR_TABLE_P (vector)) |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3648 { |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3649 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
|
3650 { |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3651 insert1 (Fkey_description (kludge, prefix)); |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3652 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3653 else if (complete_char) |
13201
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3654 { |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3655 indices[char_table_depth] = i; |
29013
b9565b4bcdf8
(Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents:
26864
diff
changeset
|
3656 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
|
3657 insert_char (character); |
17036 | 3658 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3659 else |
17036 | 3660 { |
17795
41b7d56b62fb
(describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents:
17788
diff
changeset
|
3661 /* 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
|
3662 characters. */ |
41b7d56b62fb
(describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents:
17788
diff
changeset
|
3663 char work[16]; |
41b7d56b62fb
(describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents:
17788
diff
changeset
|
3664 sprintf (work, "(row %d)", i); |
41b7d56b62fb
(describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents:
17788
diff
changeset
|
3665 insert (work, strlen (work)); |
13201
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3666 } |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3667 } |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3668 else |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3669 { |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3670 insert1 (Fkey_description (kludge, prefix)); |
13201
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3671 } |
250 | 3672 } |
3673 | |
3674 /* Print a description of the definition of this character. | |
3675 elt_describer will take care of spacing out far enough | |
3676 for alignment purposes. */ | |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3677 (*elt_describer) (definition, args); |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3678 |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3679 if (this_shadowed) |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3680 { |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3681 SET_PT (PT - 1); |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3682 insert_string (" (binding currently shadowed)"); |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3683 SET_PT (PT + 1); |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3684 } |
250 | 3685 } |
3686 | |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3687 /* For (sub) char-table, print `defalt' slot at last. */ |
17036 | 3688 if (CHAR_TABLE_P (vector) && !NILP (XCHAR_TABLE (vector)->defalt)) |
3689 { | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3690 insert (" ", char_table_depth * 2); |
17036 | 3691 insert_string ("<<default>>"); |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3692 (*elt_describer) (XCHAR_TABLE (vector)->defalt, args); |
17036 | 3693 } |
3694 | |
250 | 3695 UNGCPRO; |
3696 } | |
3697 | |
465 | 3698 /* Apropos - finding all symbols whose names match a regexp. */ |
49059
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3699 static Lisp_Object apropos_predicate; |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3700 static Lisp_Object apropos_accumulate; |
250 | 3701 |
3702 static void | |
3703 apropos_accum (symbol, string) | |
3704 Lisp_Object symbol, string; | |
3705 { | |
3706 register Lisp_Object tem; | |
3707 | |
3708 tem = Fstring_match (string, Fsymbol_name (symbol), Qnil); | |
485 | 3709 if (!NILP (tem) && !NILP (apropos_predicate)) |
250 | 3710 tem = call1 (apropos_predicate, symbol); |
485 | 3711 if (!NILP (tem)) |
250 | 3712 apropos_accumulate = Fcons (symbol, apropos_accumulate); |
3713 } | |
3714 | |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
3715 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
|
3716 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
|
3717 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
|
3718 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
|
3719 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
|
3720 (regexp, predicate) |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
3721 Lisp_Object regexp, predicate; |
250 | 3722 { |
49059
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3723 Lisp_Object tem; |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40625
diff
changeset
|
3724 CHECK_STRING (regexp); |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
3725 apropos_predicate = predicate; |
250 | 3726 apropos_accumulate = Qnil; |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
3727 map_obarray (Vobarray, apropos_accum, regexp); |
49059
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3728 tem = Fsort (apropos_accumulate, Qstring_lessp); |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3729 apropos_accumulate = Qnil; |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3730 apropos_predicate = Qnil; |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3731 return tem; |
250 | 3732 } |
3733 | |
21514 | 3734 void |
250 | 3735 syms_of_keymap () |
3736 { | |
3737 Qkeymap = intern ("keymap"); | |
3738 staticpro (&Qkeymap); | |
49059
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3739 staticpro (&apropos_predicate); |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3740 staticpro (&apropos_accumulate); |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3741 apropos_predicate = Qnil; |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3742 apropos_accumulate = Qnil; |
250 | 3743 |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3744 /* 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
|
3745 create char tables. */ |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3746 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
|
3747 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3748 /* 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
|
3749 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
|
3750 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
|
3751 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3752 global_map = Fmake_keymap (Qnil); |
250 | 3753 Fset (intern ("global-map"), global_map); |
3754 | |
16125
2e0a45264368
(syms_of_keymap): staticpro current_global_map;
Richard M. Stallman <rms@gnu.org>
parents:
15422
diff
changeset
|
3755 current_global_map = global_map; |
16227
6acf08913847
(syms_of_keymap): staticpro global_map.
Erik Naggum <erik@naggum.no>
parents:
16125
diff
changeset
|
3756 staticpro (&global_map); |
16125
2e0a45264368
(syms_of_keymap): staticpro current_global_map;
Richard M. Stallman <rms@gnu.org>
parents:
15422
diff
changeset
|
3757 staticpro (¤t_global_map); |
2e0a45264368
(syms_of_keymap): staticpro current_global_map;
Richard M. Stallman <rms@gnu.org>
parents:
15422
diff
changeset
|
3758 |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
3759 meta_map = Fmake_keymap (Qnil); |
250 | 3760 Fset (intern ("esc-map"), meta_map); |
3761 Ffset (intern ("ESC-prefix"), meta_map); | |
3762 | |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
3763 control_x_map = Fmake_keymap (Qnil); |
250 | 3764 Fset (intern ("ctl-x-map"), control_x_map); |
3765 Ffset (intern ("Control-X-prefix"), control_x_map); | |
3766 | |
42378
9f96219e833e
(Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents:
42206
diff
changeset
|
3767 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
|
3768 = 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
|
3769 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
|
3770 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
|
3771 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
|
3772 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
|
3773 Qnil))))); |
9f96219e833e
(Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents:
42206
diff
changeset
|
3774 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
|
3775 |
12297
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
3776 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
|
3777 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
|
3778 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
|
3779 don't alter it yourself. */); |
12297
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
3780 Vdefine_key_rebound_commands = Qt; |
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
3781 |
250 | 3782 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
|
3783 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
|
3784 Vminibuffer_local_map = Fmake_sparse_keymap (Qnil); |
250 | 3785 |
3786 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
|
3787 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
|
3788 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
|
3789 Fset_keymap_parent (Vminibuffer_local_ns_map, Vminibuffer_local_map); |
250 | 3790 |
3791 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
|
3792 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
|
3793 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
|
3794 Fset_keymap_parent (Vminibuffer_local_completion_map, Vminibuffer_local_map); |
250 | 3795 |
67259
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3796 DEFVAR_LISP ("minibuffer-local-filename-completion-map", |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3797 &Vminibuffer_local_filename_completion_map, |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3798 doc: /* Local keymap for minibuffer input with completion for filenames. */); |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3799 Vminibuffer_local_filename_completion_map = Fmake_sparse_keymap (Qnil); |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3800 Fset_keymap_parent (Vminibuffer_local_filename_completion_map, |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3801 Vminibuffer_local_completion_map); |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3802 |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3803 |
250 | 3804 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
|
3805 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
|
3806 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
|
3807 Fset_keymap_parent (Vminibuffer_local_must_match_map, |
ccaa40660e40
(Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39702
diff
changeset
|
3808 Vminibuffer_local_completion_map); |
250 | 3809 |
67259
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3810 DEFVAR_LISP ("minibuffer-local-must-match-filename-map", |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3811 &Vminibuffer_local_must_match_filename_map, |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3812 doc: /* Local keymap for minibuffer input with completion for filenames with exact match. */); |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3813 Vminibuffer_local_must_match_filename_map = Fmake_sparse_keymap (Qnil); |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3814 Fset_keymap_parent (Vminibuffer_local_must_match_filename_map, |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3815 Vminibuffer_local_must_match_map); |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3816 |
465 | 3817 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
|
3818 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
|
3819 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
|
3820 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
|
3821 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
|
3822 in the list takes precedence. */); |
465 | 3823 Vminor_mode_map_alist = Qnil; |
3824 | |
20517
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
3825 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
|
3826 doc: /* Alist of keymaps to use for minor modes, in current major mode. |
46133
14893800e663
(syms_of_keymap): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents:
45619
diff
changeset
|
3827 This variable is an alist just like `minor-mode-map-alist', and it is |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
3828 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
|
3829 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
|
3830 Vminor_mode_overriding_map_alist = Qnil; |
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
3831 |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
3832 DEFVAR_LISP ("emulation-mode-map-alists", &Vemulation_mode_map_alists, |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
3833 doc: /* List of keymap alists to use for emulations modes. |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
3834 It is intended for modes or packages using multiple minor-mode keymaps. |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
3835 Each element is a keymap alist just like `minor-mode-map-alist', or a |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
3836 symbol with a variable binding which is a keymap alist, and it is used |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
3837 the same way. The "active" keymaps in each alist are used before |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
3838 `minor-mode-map-alist' and `minor-mode-overriding-map-alist'. */); |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
3839 Vemulation_mode_map_alists = Qnil; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
3840 |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
3841 |
517 | 3842 DEFVAR_LISP ("function-key-map", &Vfunction_key_map, |
67505
51053176f6b7
(Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
Richard M. Stallman <rms@gnu.org>
parents:
67259
diff
changeset
|
3843 doc: /* Keymap that translates key sequences to key sequences during input. |
51053176f6b7
(Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
Richard M. Stallman <rms@gnu.org>
parents:
67259
diff
changeset
|
3844 This is used mainly for mapping ASCII function key sequences into |
51053176f6b7
(Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
Richard M. Stallman <rms@gnu.org>
parents:
67259
diff
changeset
|
3845 real Emacs function key events (symbols). |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
3846 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
3847 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
|
3848 `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
|
3849 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
|
3850 `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
|
3851 `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
|
3852 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
|
3853 |
67674
e7b90ba8a38a
(Vfunction_key_map): Docstring fix: mention that bindings can be functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67505
diff
changeset
|
3854 If the binding is a function, it is called with one argument (the prompt) |
e7b90ba8a38a
(Vfunction_key_map): Docstring fix: mention that bindings can be functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67505
diff
changeset
|
3855 and its return value (a key sequence) is used. |
e7b90ba8a38a
(Vfunction_key_map): Docstring fix: mention that bindings can be functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67505
diff
changeset
|
3856 |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
3857 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
|
3858 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
|
3859 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
3860 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
|
3861 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
|
3862 `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
|
3863 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
|
3864 Vfunction_key_map = Fmake_sparse_keymap (Qnil); |
517 | 3865 |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3866 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
|
3867 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
|
3868 This keymap works like `function-key-map', but comes after that, |
56618
166ae6765a44
(Flocal_key_binding, Fglobal_key_binding)
Luc Teirlinck <teirllm@auburn.edu>
parents:
56574
diff
changeset
|
3869 and its non-prefix bindings override ordinary bindings. */); |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3870 Vkey_translation_map = Qnil; |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3871 |
53808
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
3872 staticpro (&Vmouse_events); |
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
3873 Vmouse_events = Fcons (intern ("menu-bar"), |
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
3874 Fcons (intern ("tool-bar"), |
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
3875 Fcons (intern ("header-line"), |
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
3876 Fcons (intern ("mode-line"), |
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
3877 Fcons (intern ("mouse-1"), |
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
3878 Fcons (intern ("mouse-2"), |
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
3879 Fcons (intern ("mouse-3"), |
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
3880 Fcons (intern ("mouse-4"), |
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
3881 Fcons (intern ("mouse-5"), |
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
3882 Qnil))))))))); |
50141
3770fda038d0
(Vmenu_events): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49912
diff
changeset
|
3883 |
3770fda038d0
(Vmenu_events): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49912
diff
changeset
|
3884 |
250 | 3885 Qsingle_key_description = intern ("single-key-description"); |
3886 staticpro (&Qsingle_key_description); | |
3887 | |
3888 Qkey_description = intern ("key-description"); | |
3889 staticpro (&Qkey_description); | |
3890 | |
3891 Qkeymapp = intern ("keymapp"); | |
3892 staticpro (&Qkeymapp); | |
3893 | |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
3894 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
|
3895 staticpro (&Qnon_ascii); |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
3896 |
21241
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
3897 Qmenu_item = intern ("menu-item"); |
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
3898 staticpro (&Qmenu_item); |
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
3899 |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
3900 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
|
3901 staticpro (&Qremap); |
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
3902 |
49757
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
3903 command_remapping_vector = Fmake_vector (make_number (2), Qremap); |
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
3904 staticpro (&command_remapping_vector); |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
3905 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
3906 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
|
3907 where_is_cache = Qnil; |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
3908 staticpro (&where_is_cache); |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
3909 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
|
3910 |
250 | 3911 defsubr (&Skeymapp); |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
3912 defsubr (&Skeymap_parent); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
3913 defsubr (&Skeymap_prompt); |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
3914 defsubr (&Sset_keymap_parent); |
250 | 3915 defsubr (&Smake_keymap); |
3916 defsubr (&Smake_sparse_keymap); | |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
3917 defsubr (&Smap_keymap); |
250 | 3918 defsubr (&Scopy_keymap); |
49757
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
3919 defsubr (&Scommand_remapping); |
250 | 3920 defsubr (&Skey_binding); |
3921 defsubr (&Slocal_key_binding); | |
3922 defsubr (&Sglobal_key_binding); | |
465 | 3923 defsubr (&Sminor_mode_key_binding); |
250 | 3924 defsubr (&Sdefine_key); |
3925 defsubr (&Slookup_key); | |
3926 defsubr (&Sdefine_prefix_command); | |
3927 defsubr (&Suse_global_map); | |
3928 defsubr (&Suse_local_map); | |
3929 defsubr (&Scurrent_local_map); | |
3930 defsubr (&Scurrent_global_map); | |
465 | 3931 defsubr (&Scurrent_minor_mode_maps); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
3932 defsubr (&Scurrent_active_maps); |
250 | 3933 defsubr (&Saccessible_keymaps); |
3934 defsubr (&Skey_description); | |
3935 defsubr (&Sdescribe_vector); | |
3936 defsubr (&Ssingle_key_description); | |
3937 defsubr (&Stext_char_description); | |
3938 defsubr (&Swhere_is_internal); | |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
3939 defsubr (&Sdescribe_buffer_bindings); |
250 | 3940 defsubr (&Sapropos_internal); |
3941 } | |
3942 | |
21514 | 3943 void |
250 | 3944 keys_of_keymap () |
3945 { | |
3946 initial_define_key (global_map, 033, "ESC-prefix"); | |
3947 initial_define_key (global_map, Ctl('X'), "Control-X-prefix"); | |
3948 } | |
52401 | 3949 |
3950 /* arch-tag: 6dd15c26-7cf1-41c4-b904-f42f7ddda463 | |
3951 (do not change this comment) */ |