Mercurial > emacs
annotate src/keymap.c @ 109667:fd6fad994956
* src/frame.c (frame_params): Make const.
author | Dan Nicolaescu <dann@ics.uci.edu> |
---|---|
date | Fri, 06 Aug 2010 12:01:35 -0700 |
parents | c4c8e4a16194 |
children | 8949aad5e992 |
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, |
106815 | 4 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
250 | 5 |
6 This file is part of GNU Emacs. | |
7 | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93882
diff
changeset
|
8 GNU Emacs is free software: you can redistribute it and/or modify |
250 | 9 it under the terms of the GNU General Public License as published by |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93882
diff
changeset
|
10 the Free Software Foundation, either version 3 of the License, or |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93882
diff
changeset
|
11 (at your option) any later version. |
250 | 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 | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93882
diff
changeset
|
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
250 | 20 |
21 | |
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
4575
diff
changeset
|
22 #include <config.h> |
250 | 23 #include <stdio.h> |
105669
68dd71358159
* alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104971
diff
changeset
|
24 #include <setjmp.h> |
250 | 25 #include "lisp.h" |
26 #include "commands.h" | |
27 #include "buffer.h" | |
88380 | 28 #include "character.h" |
17036 | 29 #include "charset.h" |
517 | 30 #include "keyboard.h" |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
52740
diff
changeset
|
31 #include "frame.h" |
2059 | 32 #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
|
33 #include "blockinput.h" |
13771
28790743a5a3
(Fkey_binding): Handle text-property keymaps.
Karl Heuer <kwzh@gnu.org>
parents:
13343
diff
changeset
|
34 #include "puresize.h" |
29282 | 35 #include "intervals.h" |
39697
0b986bb45526
Include keymap.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39689
diff
changeset
|
36 #include "keymap.h" |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
37 #include "window.h" |
250 | 38 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
39 /* The number of elements in keymap vectors. */ |
250 | 40 #define DENSE_TABLE_SIZE (0200) |
41 | |
42 /* Actually allocate storage for these variables */ | |
43 | |
44 Lisp_Object current_global_map; /* Current global keymap */ | |
45 | |
46 Lisp_Object global_map; /* default global key bindings */ | |
47 | |
48 Lisp_Object meta_map; /* The keymap used for globally bound | |
49 ESC-prefixed default commands */ | |
50 | |
51 Lisp_Object control_x_map; /* The keymap used for globally bound | |
52 C-x-prefixed default commands */ | |
53 | |
54 /* was MinibufLocalMap */ | |
55 Lisp_Object Vminibuffer_local_map; | |
56 /* The keymap used by the minibuf for local | |
57 bindings when spaces are allowed in the | |
58 minibuf */ | |
59 | |
60 /* was MinibufLocalNSMap */ | |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
61 Lisp_Object Vminibuffer_local_ns_map; |
250 | 62 /* The keymap used by the minibuf for local |
63 bindings when spaces are not encouraged | |
64 in the minibuf */ | |
65 | |
66 /* keymap used for minibuffers when doing completion */ | |
67 /* was MinibufLocalCompletionMap */ | |
68 Lisp_Object Vminibuffer_local_completion_map; | |
69 | |
67259
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
70 /* keymap used for minibuffers when doing completion in filenames */ |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
71 Lisp_Object Vminibuffer_local_filename_completion_map; |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
72 |
68758
13c1b7c5f555
* data.c (Findirect_function): Add NOERROR arg. All callers changed
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
73 /* keymap used for minibuffers when doing completion in filenames |
67259
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
74 with require-match*/ |
95575
d34a432d5863
* keymap.c (Vminibuffer_local_filename_must_match_map):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94963
diff
changeset
|
75 Lisp_Object Vminibuffer_local_filename_must_match_map; |
67259
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
76 |
250 | 77 /* keymap used for minibuffers when doing completion and require a match */ |
78 /* was MinibufLocalMustMatchMap */ | |
79 Lisp_Object Vminibuffer_local_must_match_map; | |
80 | |
465 | 81 /* Alist of minor mode variables and keymaps. */ |
82 Lisp_Object Vminor_mode_map_alist; | |
83 | |
20517
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
84 /* 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
|
85 minor mode variables and keymaps. */ |
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
86 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
|
87 |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
88 /* List of emulation mode keymap alists. */ |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
89 Lisp_Object Vemulation_mode_map_alists; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
90 |
12297
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
91 /* 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
|
92 when nil was stored here. |
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
93 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
|
94 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
|
95 Lisp_Object Vdefine_key_rebound_commands; |
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
96 |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
97 Lisp_Object Qkeymapp, Qkeymap, Qnon_ascii, Qmenu_item, Qremap; |
104922
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
98 Lisp_Object QCadvertised_binding; |
250 | 99 |
42381
810b3bfc52cf
Fix previous change; also correct its change log:
Richard M. Stallman <rms@gnu.org>
parents:
42378
diff
changeset
|
100 /* 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
|
101 static Lisp_Object exclude_keys; |
810b3bfc52cf
Fix previous change; also correct its change log:
Richard M. Stallman <rms@gnu.org>
parents:
42378
diff
changeset
|
102 |
49757
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
103 /* 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
|
104 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
|
105 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
106 /* 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
|
107 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
|
108 /* 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
|
109 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
|
110 |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
111 static Lisp_Object store_in_keymap (Lisp_Object, Lisp_Object, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
112 static void fix_submap_inheritance (Lisp_Object, Lisp_Object, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
113 |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
114 static Lisp_Object define_as_prefix (Lisp_Object, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
115 static void describe_command (Lisp_Object, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
116 static void describe_translation (Lisp_Object, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
117 static void describe_map (Lisp_Object, Lisp_Object, |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
118 void (*) (Lisp_Object, Lisp_Object), |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
119 int, Lisp_Object, Lisp_Object*, int, int); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
120 static void describe_vector (Lisp_Object, Lisp_Object, Lisp_Object, |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
121 void (*) (Lisp_Object, Lisp_Object), int, |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
122 Lisp_Object, Lisp_Object, int *, |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
123 int, int, int); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
124 static void silly_event_symbol_error (Lisp_Object); |
250 | 125 |
465 | 126 /* Keymap object support - constructors and predicates. */ |
127 | |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
128 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
|
129 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
|
130 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
|
131 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
|
132 "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
|
133 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
|
134 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
|
135 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
136 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
|
137 in case you use it as a menu with `x-popup-menu'. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
138 (Lisp_Object string) |
250 | 139 { |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
140 Lisp_Object tail; |
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
141 if (!NILP (string)) |
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
142 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
|
143 else |
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
144 tail = Qnil; |
250 | 145 return Fcons (Qkeymap, |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
146 Fcons (Fmake_char_table (Qkeymap, Qnil), tail)); |
250 | 147 } |
148 | |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
149 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
|
150 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
|
151 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
|
152 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
|
153 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
|
154 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
|
155 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
156 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
|
157 in case you use it as a menu with `x-popup-menu'. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
158 (Lisp_Object string) |
250 | 159 { |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
160 if (!NILP (string)) |
105744
b0a732611398
* keymap.c (Fmake_sparse_keymap): Purecopy the name.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105669
diff
changeset
|
161 { |
b0a732611398
* keymap.c (Fmake_sparse_keymap): Purecopy the name.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105669
diff
changeset
|
162 if (!NILP (Vpurify_flag)) |
b0a732611398
* keymap.c (Fmake_sparse_keymap): Purecopy the name.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105669
diff
changeset
|
163 string = Fpurecopy (string); |
b0a732611398
* keymap.c (Fmake_sparse_keymap): Purecopy the name.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105669
diff
changeset
|
164 return Fcons (Qkeymap, Fcons (string, Qnil)); |
b0a732611398
* keymap.c (Fmake_sparse_keymap): Purecopy the name.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105669
diff
changeset
|
165 } |
250 | 166 return Fcons (Qkeymap, Qnil); |
167 } | |
168 | |
169 /* This function is used for installing the standard key bindings | |
170 at initialization time. | |
171 | |
172 For example: | |
173 | |
1388
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
174 initial_define_key (control_x_map, Ctl('X'), "exchange-point-and-mark"); */ |
250 | 175 |
176 void | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
177 initial_define_key (Lisp_Object keymap, int key, char *defname) |
250 | 178 { |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
179 store_in_keymap (keymap, make_number (key), intern_c_string (defname)); |
250 | 180 } |
181 | |
1388
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
182 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
183 initial_define_lispy_key (Lisp_Object keymap, char *keyname, char *defname) |
1388
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
184 { |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
185 store_in_keymap (keymap, intern_c_string (keyname), intern_c_string (defname)); |
1388
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
186 } |
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
187 |
250 | 188 DEFUN ("keymapp", Fkeymapp, Skeymapp, 1, 1, 0, |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
189 doc: /* Return t if OBJECT is a keymap. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
190 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
191 A keymap is a list (keymap . ALIST), |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
192 or a symbol whose function definition is itself a keymap. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
193 ALIST elements look like (CHAR . DEFN) or (SYMBOL . DEFN); |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
194 a vector of densely packed bindings for small character codes |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
195 is also allowed as an element. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
196 (Lisp_Object object) |
250 | 197 { |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
198 return (KEYMAPP (object) ? Qt : Qnil); |
250 | 199 } |
200 | |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
201 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
|
202 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
|
203 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
|
204 when reading a key-sequence to be looked-up in this keymap. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
205 (Lisp_Object map) |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
206 { |
58129
6f1bde62e20e
(Fkeymap_prompt): Accept symbol keymaps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57478
diff
changeset
|
207 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
|
208 while (CONSP (map)) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
209 { |
58129
6f1bde62e20e
(Fkeymap_prompt): Accept symbol keymaps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57478
diff
changeset
|
210 Lisp_Object tem = XCAR (map); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
211 if (STRINGP (tem)) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
212 return tem; |
58129
6f1bde62e20e
(Fkeymap_prompt): Accept symbol keymaps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57478
diff
changeset
|
213 map = XCDR (map); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
214 } |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
215 return Qnil; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
216 } |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
217 |
250 | 218 /* 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
|
219 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
|
220 |
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
221 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
|
222 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
|
223 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
|
224 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
225 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
|
226 is zero as well), return Qt. |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
227 |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
228 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
|
229 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
|
230 |
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
231 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
|
232 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
|
233 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
|
234 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
|
235 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
|
236 |
784ef95b020b
(get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents:
30030
diff
changeset
|
237 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
|
238 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
|
239 |
250 | 240 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
241 get_keymap (Lisp_Object object, int error, int autoload) |
250 | 242 { |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
243 Lisp_Object tem; |
250 | 244 |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
245 autoload_retry: |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
246 if (NILP (object)) |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
247 goto end; |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
248 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
|
249 return object; |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
250 |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
251 tem = indirect_function (object); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
252 if (CONSP (tem)) |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
253 { |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
254 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
|
255 return tem; |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
256 |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
257 /* 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
|
258 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
|
259 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
|
260 && 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
|
261 { |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
262 Lisp_Object tail; |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
263 |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
264 tail = Fnth (make_number (4), tem); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
265 if (EQ (tail, Qkeymap)) |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
266 { |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
267 if (autoload) |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
268 { |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
269 struct gcpro gcpro1, gcpro2; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
270 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
271 GCPRO2 (tem, object); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
272 do_autoload (tem, object); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
273 UNGCPRO; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
274 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
275 goto autoload_retry; |
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 else |
104925
54e4fb84ea5d
(get_keymap): Return the actual keymap symbol rather than t for autoloaded
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104922
diff
changeset
|
278 return object; |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
279 } |
1566
892c9f61217a
* keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents:
1517
diff
changeset
|
280 } |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
281 } |
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
282 |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
283 end: |
250 | 284 if (error) |
285 wrong_type_argument (Qkeymapp, object); | |
31829
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31496
diff
changeset
|
286 return Qnil; |
250 | 287 } |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
288 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
289 /* 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
|
290 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
|
291 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
292 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
293 keymap_parent (Lisp_Object keymap, int autoload) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
294 { |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
295 Lisp_Object list; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
296 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
297 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
|
298 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
299 /* 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
|
300 list = XCDR (keymap); |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
301 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
|
302 { |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
303 /* 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
|
304 if (KEYMAPP (list)) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
305 return list; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
306 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
307 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
308 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
|
309 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
310 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
311 DEFUN ("keymap-parent", Fkeymap_parent, Skeymap_parent, 1, 1, 0, |
102130
c78d442e47ad
(Fkeymap_parent): Doc fix (Bug#2391).
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
312 doc: /* Return the parent keymap of KEYMAP. |
c78d442e47ad
(Fkeymap_parent): Doc fix (Bug#2391).
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
313 If KEYMAP has no parent, return nil. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
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 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
316 return keymap_parent (keymap, 1); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
317 } |
31496
946e1ba42cc9
(Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents:
31232
diff
changeset
|
318 |
32038
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
319 /* Check whether MAP is one of MAPS parents. */ |
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
320 int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
321 keymap_memberp (Lisp_Object map, Lisp_Object maps) |
32038
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
322 { |
32559
bc60bd171784
(keymap_memberp): Ensure that nil is not a member.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32478
diff
changeset
|
323 if (NILP (map)) return 0; |
32038
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
324 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
|
325 maps = keymap_parent (maps, 0); |
32038
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
326 return (EQ (map, maps)); |
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
327 } |
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
328 |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
329 /* 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
|
330 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
331 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
|
332 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
|
333 Return PARENT. PARENT should be nil or another keymap. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
334 (Lisp_Object keymap, Lisp_Object parent) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
335 { |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
336 Lisp_Object list, prev; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
337 struct gcpro gcpro1, gcpro2; |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
338 int i; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
339 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
340 /* Force a keymap flush for the next call to where-is. |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
341 Since this can be called from within where-is, we don't set where_is_cache |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
342 directly but only where_is_cache_keymaps, since where_is_cache shouldn't |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
343 be changed during where-is, while where_is_cache_keymaps is only used at |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
344 the very beginning of where-is and can thus be changed here without any |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
345 adverse effect. |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
346 This is a very minor correctness (rather than safety) issue. */ |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
347 where_is_cache_keymaps = Qt; |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
348 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
349 GCPRO2 (keymap, parent); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
350 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
|
351 |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
352 if (!NILP (parent)) |
31496
946e1ba42cc9
(Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents:
31232
diff
changeset
|
353 { |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
354 parent = get_keymap (parent, 1, 1); |
31496
946e1ba42cc9
(Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents:
31232
diff
changeset
|
355 |
946e1ba42cc9
(Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents:
31232
diff
changeset
|
356 /* Check for cycles. */ |
32038
0cb9cab990cb
(keymap_memberp): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31989
diff
changeset
|
357 if (keymap_memberp (keymap, parent)) |
31496
946e1ba42cc9
(Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents:
31232
diff
changeset
|
358 error ("Cyclic keymap inheritance"); |
946e1ba42cc9
(Fset_keymap_parent): Check for cycles in keymap
Gerd Moellmann <gerd@gnu.org>
parents:
31232
diff
changeset
|
359 } |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
360 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
361 /* Skip past the initial element `keymap'. */ |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
362 prev = keymap; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
363 while (1) |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
364 { |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
365 list = XCDR (prev); |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
366 /* If there is a parent keymap here, replace it. |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
367 If we came to the end, add the parent in PREV. */ |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
368 if (!CONSP (list) || KEYMAPP (list)) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
369 { |
15422
dd639432a55a
(Fset_keymap_parent): Return early if KEYMAP already has the proper parent.
Richard M. Stallman <rms@gnu.org>
parents:
15378
diff
changeset
|
370 /* If we already have the right parent, return now |
dd639432a55a
(Fset_keymap_parent): Return early if KEYMAP already has the proper parent.
Richard M. Stallman <rms@gnu.org>
parents:
15378
diff
changeset
|
371 so that we avoid the loops below. */ |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
372 if (EQ (XCDR (prev), parent)) |
30134
784ef95b020b
(get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents:
30030
diff
changeset
|
373 RETURN_UNGCPRO (parent); |
15422
dd639432a55a
(Fset_keymap_parent): Return early if KEYMAP already has the proper parent.
Richard M. Stallman <rms@gnu.org>
parents:
15378
diff
changeset
|
374 |
67505
51053176f6b7
(Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
Richard M. Stallman <rms@gnu.org>
parents:
67259
diff
changeset
|
375 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
|
376 XSETCDR (prev, parent); |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
377 break; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
378 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
379 prev = list; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
380 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
381 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
382 /* 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
|
383 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
384 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
|
385 { |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
386 /* 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
|
387 if (EQ (XCAR (list), Qkeymap)) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
388 break; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
389 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
390 /* 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
|
391 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
|
392 && 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
|
393 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
|
394 XCDR (XCAR (list))); |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
395 |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
396 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
|
397 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
|
398 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
|
399 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
|
400 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
|
401 |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
402 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
|
403 { |
89551
28a8f2be4414
(Fset_keymap_parent, map_keymap, Fcopy_keymap)
Dave Love <fx@gnu.org>
parents:
89483
diff
changeset
|
404 map_char_table (fix_submap_inheritance, Qnil, XCAR (list), keymap); |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
405 } |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
406 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
407 |
30134
784ef95b020b
(get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents:
30030
diff
changeset
|
408 RETURN_UNGCPRO (parent); |
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 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
411 /* 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
|
412 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
|
413 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
|
414 |
31208
442d40fce0db
(store_in_keymap, fix_submap_inheritance): New prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30780
diff
changeset
|
415 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
416 fix_submap_inheritance (Lisp_Object map, Lisp_Object event, Lisp_Object submap) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
417 { |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
418 Lisp_Object map_parent, parent_entry; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
419 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
420 /* 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
|
421 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
|
422 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
423 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
|
424 |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
425 /* 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
|
426 if (!CONSP (submap)) |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
427 return; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
428 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
429 map_parent = keymap_parent (map, 0); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
430 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
|
431 parent_entry = |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
432 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
|
433 else |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
434 parent_entry = Qnil; |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
435 |
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
|
436 /* 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
|
437 our own submap shadows it completely. */ |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
438 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
|
439 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
|
440 |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
441 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
|
442 { |
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
443 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
|
444 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
|
445 while (1) |
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
446 { |
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
447 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
|
448 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
449 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
|
450 |
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
451 if (KEYMAPP (tem)) |
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
452 { |
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
453 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
|
454 /* 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
|
455 return; |
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
456 submap_parent = tem; |
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
457 } |
25600
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
458 else |
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
459 break; |
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
460 } |
6cea4c28fc1c
(fix_submap_inheritance): Do nothing if the proper parent is an
Richard M. Stallman <rms@gnu.org>
parents:
25128
diff
changeset
|
461 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
|
462 } |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
463 } |
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
464 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
465 /* 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
|
466 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
|
467 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
|
468 |
02226bff1476
* keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents:
1315
diff
changeset
|
469 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
|
470 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
|
471 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
|
472 |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
473 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
|
474 |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
475 If NOINHERIT, don't accept a subkeymap found in an inherited keymap. */ |
250 | 476 |
477 Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
478 access_keymap (Lisp_Object map, Lisp_Object idx, int t_ok, int noinherit, int autoload) |
250 | 479 { |
40791
97673fa0eaa7
(access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40656
diff
changeset
|
480 Lisp_Object val; |
97673fa0eaa7
(access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40656
diff
changeset
|
481 |
97673fa0eaa7
(access_keymap): Don't use initializers on Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40656
diff
changeset
|
482 /* 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
|
483 val = Qunbound; |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
484 |
250 | 485 /* If idx is a list (some sort of mouse click, perhaps?), |
486 the index we want to use is the car of the list, which | |
487 ought to be a symbol. */ | |
1315
884c3d7e7172
* keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents:
1264
diff
changeset
|
488 idx = EVENT_HEAD (idx); |
250 | 489 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
490 /* 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
|
491 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
|
492 if (SYMBOLP (idx)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
493 idx = reorder_modifiers (idx); |
3515
9d0af0f2dc0d
(access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents:
3425
diff
changeset
|
494 else if (INTEGERP (idx)) |
9d0af0f2dc0d
(access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents:
3425
diff
changeset
|
495 /* 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
|
496 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
|
497 XSETFASTINT (idx, XINT (idx) & (CHAR_META | (CHAR_META - 1))); |
250 | 498 |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
499 /* Handle the special meta -> esc mapping. */ |
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
500 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
|
501 { |
32615
5f6178a60e6b
(access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents:
32559
diff
changeset
|
502 /* 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
|
503 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
|
504 struct gcpro gcpro1; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
505 Lisp_Object meta_map; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
506 GCPRO1 (map); |
59661
e7a8549bb201
(access_keymap): Protect from bad value of meta_prefix_char.
Richard M. Stallman <rms@gnu.org>
parents:
59522
diff
changeset
|
507 /* 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
|
508 infinite recursion. Protect against that. */ |
59754
a9fbaec66c84
(access_keymap): YAILOM.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59661
diff
changeset
|
509 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
|
510 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
|
511 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
|
512 t_ok, noinherit, autoload), |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
513 0, autoload); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
514 UNGCPRO; |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
515 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
|
516 { |
32739
5ce157b2eaa9
(fix_submap_inheritance): Don't do anything if parent_entry
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32615
diff
changeset
|
517 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
|
518 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
|
519 } |
5f6178a60e6b
(access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents:
32559
diff
changeset
|
520 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
|
521 /* 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
|
522 idx = Qt; |
5f6178a60e6b
(access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents:
32559
diff
changeset
|
523 else |
5f6178a60e6b
(access_keymap): If IDX has a meta prefix, and there's
Gerd Moellmann <gerd@gnu.org>
parents:
32559
diff
changeset
|
524 /* 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
|
525 return Qnil; |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
526 } |
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
527 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
528 /* 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
|
529 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
|
530 for this key sequence. */ |
250 | 531 { |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
532 Lisp_Object tail; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
533 Lisp_Object t_binding = Qnil; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
534 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
|
535 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
536 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
|
537 |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
538 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
|
539 (CONSP (tail) |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
540 || (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
|
541 tail = XCDR (tail)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
542 { |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
543 Lisp_Object binding; |
250 | 544 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
545 binding = XCAR (tail); |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
546 if (SYMBOLP (binding)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
547 { |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
548 /* If NOINHERIT, stop finding prefix definitions |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
549 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
|
550 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
|
551 RETURN_UNGCPRO (Qnil); |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
552 } |
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
553 else if (CONSP (binding)) |
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
554 { |
38888
bf8f70dc79f4
(access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents:
37938
diff
changeset
|
555 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
|
556 |
38888
bf8f70dc79f4
(access_keymap): If a binding of the form (GENERIC-CHAR
Gerd Moellmann <gerd@gnu.org>
parents:
37938
diff
changeset
|
557 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
|
558 val = XCDR (binding); |
93882
9eaa3ee184e9
(access_keymap): Remove the value 2 for t_ok which was used
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93664
diff
changeset
|
559 else if (t_ok && EQ (key, Qt)) |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
560 { |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
561 t_binding = XCDR (binding); |
93882
9eaa3ee184e9
(access_keymap): Remove the value 2 for t_ok which was used
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93664
diff
changeset
|
562 t_ok = 0; |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
563 } |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
564 } |
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
565 else if (VECTORP (binding)) |
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
566 { |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
567 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
|
568 val = AREF (binding, XFASTINT (idx)); |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
569 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
570 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
|
571 { |
17932
78a128b99e05
(access_keymap, store_in_keymap): Don't look in a char-table
Richard M. Stallman <rms@gnu.org>
parents:
17861
diff
changeset
|
572 /* 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
|
573 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
|
574 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
|
575 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
|
576 { |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
577 val = Faref (binding, idx); |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
578 /* `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
|
579 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
|
580 unbound entry. */ |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
581 if (NILP (val)) |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
582 val = Qunbound; |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
583 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
584 } |
1264
6ba9d5aaace6
* keymap.c (access_keymap): Don't forget to QUIT while scanning
Jim Blandy <jimb@redhat.com>
parents:
1236
diff
changeset
|
585 |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
586 /* 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
|
587 if (!EQ (val, Qunbound)) |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
588 { |
41593
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
589 if (EQ (val, Qt)) |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
590 /* 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
|
591 (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
|
592 keymaps of lower precedence). */ |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
593 val = Qnil; |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
594 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
|
595 if (KEYMAPP (val)) |
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
596 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
|
597 RETURN_UNGCPRO (val); |
39940
a6ced7cb88d9
(access_keymap): Unify handling of `t' and generic-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39837
diff
changeset
|
598 } |
1264
6ba9d5aaace6
* keymap.c (access_keymap): Don't forget to QUIT while scanning
Jim Blandy <jimb@redhat.com>
parents:
1236
diff
changeset
|
599 QUIT; |
250 | 600 } |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
601 UNGCPRO; |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
602 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
|
603 } |
250 | 604 } |
605 | |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
606 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
607 map_keymap_item (map_keymap_function_t fun, Lisp_Object args, Lisp_Object key, Lisp_Object val, void *data) |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
608 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
609 /* 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
|
610 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
|
611 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
|
612 val = Qnil; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
613 (*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
|
614 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
615 |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
616 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
617 map_keymap_char_table_item (Lisp_Object args, Lisp_Object key, Lisp_Object val) |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
618 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
619 if (!NILP (val)) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
620 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
621 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
|
622 args = XCDR (args); |
100689
eca026eee0d7
(map_keymap_char_table_item): Make a copy of KEY if it is a
Andreas Schwab <schwab@suse.de>
parents:
99981
diff
changeset
|
623 /* If the key is a range, make a copy since map_char_table modifies |
eca026eee0d7
(map_keymap_char_table_item): Make a copy of KEY if it is a
Andreas Schwab <schwab@suse.de>
parents:
99981
diff
changeset
|
624 it in place. */ |
eca026eee0d7
(map_keymap_char_table_item): Make a copy of KEY if it is a
Andreas Schwab <schwab@suse.de>
parents:
99981
diff
changeset
|
625 if (CONSP (key)) |
eca026eee0d7
(map_keymap_char_table_item): Make a copy of KEY if it is a
Andreas Schwab <schwab@suse.de>
parents:
99981
diff
changeset
|
626 key = Fcons (XCAR (key), XCDR (key)); |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
627 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
|
628 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
|
629 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
630 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
631 |
93205
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
632 /* Call FUN for every binding in MAP and stop at (and return) the parent. |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
633 FUN is called with 4 arguments: FUN (KEY, BINDING, ARGS, DATA). */ |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
634 Lisp_Object |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
635 map_keymap_internal (Lisp_Object map, |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
636 map_keymap_function_t fun, |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
637 Lisp_Object args, |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
638 void *data) |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
639 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
640 struct gcpro gcpro1, gcpro2, gcpro3; |
93205
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
641 Lisp_Object tail |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
642 = (CONSP (map) && EQ (Qkeymap, XCAR (map))) ? XCDR (map) : map; |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
643 |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
644 GCPRO3 (map, args, tail); |
93205
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
645 for (; CONSP (tail) && !EQ (Qkeymap, XCAR (tail)); tail = XCDR (tail)) |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
646 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
647 Lisp_Object binding = XCAR (tail); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
648 |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
649 if (CONSP (binding)) |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
650 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
|
651 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
|
652 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
653 /* 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
|
654 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
|
655 int c; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
656 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
|
657 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
658 Lisp_Object character; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
659 XSETFASTINT (character, c); |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
660 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
|
661 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
662 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
663 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
|
664 { |
89483 | 665 map_char_table (map_keymap_char_table_item, Qnil, binding, |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
666 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
|
667 Fcons (make_save_value (data, 0), |
89483 | 668 args))); |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
669 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
670 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
671 UNGCPRO; |
93205
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
672 return tail; |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
673 } |
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 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
676 map_keymap_call (Lisp_Object key, Lisp_Object val, Lisp_Object fun, void *dummy) |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
677 { |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
678 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
|
679 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
680 |
93205
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
681 /* Same as map_keymap_internal, but doesn't traverses parent keymaps as well. |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
682 A non-zero AUTOLOAD indicates that autoloaded keymaps should be loaded. */ |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
683 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
684 map_keymap (Lisp_Object map, map_keymap_function_t fun, Lisp_Object args, void *data, int autoload) |
93205
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
685 { |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
686 struct gcpro gcpro1; |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
687 GCPRO1 (args); |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
688 map = get_keymap (map, 1, autoload); |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
689 while (CONSP (map)) |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
690 { |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
691 map = map_keymap_internal (map, fun, args, data); |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
692 map = get_keymap (map, 0, autoload); |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
693 } |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
694 UNGCPRO; |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
695 } |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
696 |
93664
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
697 Lisp_Object Qkeymap_canonicalize; |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
698 |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
699 /* Same as map_keymap, but does it right, properly eliminating duplicate |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
700 bindings due to inheritance. */ |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
701 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
702 map_keymap_canonical (Lisp_Object map, map_keymap_function_t fun, Lisp_Object args, void *data) |
93664
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
703 { |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
704 struct gcpro gcpro1; |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
705 GCPRO1 (args); |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
706 /* map_keymap_canonical may be used from redisplay (e.g. when building menus) |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
707 so be careful to ignore errors and to inhibit redisplay. */ |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
708 map = safe_call1 (Qkeymap_canonicalize, map); |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
709 /* No need to use `map_keymap' here because canonical map has no parent. */ |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
710 map_keymap_internal (map, fun, args, data); |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
711 UNGCPRO; |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
712 } |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
713 |
93205
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
714 DEFUN ("map-keymap-internal", Fmap_keymap_internal, Smap_keymap_internal, 2, 2, 0, |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
715 doc: /* Call FUNCTION once for each event binding in KEYMAP. |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
716 FUNCTION is called with two arguments: the event that is bound, and |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
717 the definition it is bound to. The event may be a character range. |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
718 If KEYMAP has a parent, this function returns it without processing it. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
719 (Lisp_Object function, Lisp_Object keymap) |
93205
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
720 { |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
721 struct gcpro gcpro1; |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
722 GCPRO1 (function); |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
723 keymap = get_keymap (keymap, 1, 1); |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
724 keymap = map_keymap_internal (keymap, map_keymap_call, function, NULL); |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
725 UNGCPRO; |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
726 return keymap; |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
727 } |
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
728 |
58271
8b3b0ccbe80b
(Fmap_keymap): New arg SORT-FIRST. Use
Richard M. Stallman <rms@gnu.org>
parents:
58129
diff
changeset
|
729 DEFUN ("map-keymap", Fmap_keymap, Smap_keymap, 2, 3, 0, |
68397
5b1791b98dc2
(Fmap_keymap): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
68264
diff
changeset
|
730 doc: /* Call FUNCTION once for each event binding in KEYMAP. |
68264
d25897b05660
(Fmap_keymap): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67994
diff
changeset
|
731 FUNCTION is called with two arguments: the event that is bound, and |
93205
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
732 the definition it is bound to. The event may be a character range. |
68264
d25897b05660
(Fmap_keymap): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67994
diff
changeset
|
733 |
56635
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
734 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
|
735 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
|
736 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
|
737 usage: (map-keymap FUNCTION KEYMAP) */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
738 (Lisp_Object function, Lisp_Object keymap, Lisp_Object sort_first) |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
739 { |
58271
8b3b0ccbe80b
(Fmap_keymap): New arg SORT-FIRST. Use
Richard M. Stallman <rms@gnu.org>
parents:
58129
diff
changeset
|
740 if (! NILP (sort_first)) |
93204
9f83f0ec5257
* subr.el (map-keymap-sorted): Rename from map-keymap-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91670
diff
changeset
|
741 return call2 (intern ("map-keymap-sorted"), function, keymap); |
65456
d9638b932900
(Fdescribe_buffer_bindings): Reload `translate'
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
742 |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
743 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
|
744 return Qnil; |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
745 } |
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
746 |
250 | 747 /* Given OBJECT which was found in a slot in a keymap, |
748 trace indirect definitions to get the actual definition of that slot. | |
749 An indirect definition is a list of the form | |
750 (KEYMAP . INDEX), where KEYMAP is a keymap or a symbol defined as one | |
751 and INDEX is the object to look up in KEYMAP to yield the definition. | |
752 | |
753 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
|
754 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
|
755 |
a29237d1fdca
(get_keymap): Pass 1 as ERROR to get_keymap_1.
Richard M. Stallman <rms@gnu.org>
parents:
6695
diff
changeset
|
756 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
|
757 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
|
758 |
d474c1024296
(where_is_internal): Convert a string used as event type into "(any string)".
Richard M. Stallman <rms@gnu.org>
parents:
60066
diff
changeset
|
759 This can GC because menu_item_eval_property calls Feval. */ |
250 | 760 |
761 Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
762 get_keyelt (Lisp_Object object, int autoload) |
250 | 763 { |
764 while (1) | |
765 { | |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
766 if (!(CONSP (object))) |
21241
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
767 /* This is really the value. */ |
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
768 return object; |
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
769 |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
770 /* 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
|
771 then use itself. */ |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
772 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
|
773 return object; |
250 | 774 |
21241
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
775 /* 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
|
776 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
|
777 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
|
778 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
|
779 { |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
780 if (CONSP (XCDR (object))) |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
781 { |
29941
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
782 Lisp_Object tem; |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
783 |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
784 object = XCDR (XCDR (object)); |
29941
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
785 tem = object; |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
786 if (CONSP (object)) |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
787 object = XCAR (object); |
29941
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
788 |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
789 /* 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
|
790 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
|
791 use. */ |
29941
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
792 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
|
793 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
|
794 { |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
795 Lisp_Object filter; |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
796 filter = XCAR (XCDR (tem)); |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
797 filter = list2 (filter, list2 (Qquote, object)); |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
798 object = menu_item_eval_property (filter); |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
799 break; |
0c77254c90b8
(get_keyelt): For menu-items containing a `:filter
Gerd Moellmann <gerd@gnu.org>
parents:
29726
diff
changeset
|
800 } |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
801 } |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
802 else |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
803 /* Invalid keymap. */ |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
804 return object; |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
805 } |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
806 |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
807 /* 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
|
808 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
|
809 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
|
810 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
|
811 { |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
812 object = XCDR (object); |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
813 /* 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
|
814 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
|
815 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
|
816 object = XCDR (object); |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
817 /* 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
|
818 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
|
819 { |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
820 Lisp_Object carcar; |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
821 carcar = XCAR (XCAR (object)); |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
822 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
|
823 object = XCDR (object); |
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
824 } |
21241
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
825 } |
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
826 |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
827 /* If the contents are (KEYMAP . ELEMENT), go indirect. */ |
250 | 828 else |
25128
2563b35e613f
(get_keymap_1, get_keyelt): Check the type of OBJECT
Karl Heuer <kwzh@gnu.org>
parents:
24572
diff
changeset
|
829 { |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
830 struct gcpro gcpro1; |
30134
784ef95b020b
(get_keymap_1): Add comment that this function can GC.
Gerd Moellmann <gerd@gnu.org>
parents:
30030
diff
changeset
|
831 Lisp_Object map; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
832 GCPRO1 (object); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
833 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
|
834 UNGCPRO; |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
835 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
|
836 : 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
|
837 } |
250 | 838 } |
839 } | |
840 | |
31232
5213900983ed
(store_in_keymap): Add `static' to declaration.
Dave Love <fx@gnu.org>
parents:
31208
diff
changeset
|
841 static Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
842 store_in_keymap (Lisp_Object keymap, register Lisp_Object idx, Lisp_Object def) |
250 | 843 { |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
844 /* 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
|
845 where_is_cache = Qnil; |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
846 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
|
847 |
10367
e1c7a3f0c15f
(store_in_keymap): Copy a cons only if car is a string.
Richard M. Stallman <rms@gnu.org>
parents:
10305
diff
changeset
|
848 /* 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
|
849 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
|
850 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
|
851 && (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
|
852 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
|
853 |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
854 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
|
855 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
|
856 |
89640
99303f55a1b8
(store_in_keymap): Pay attention to the case that idx
Kenichi Handa <handa@m17n.org>
parents:
89626
diff
changeset
|
857 /* If idx is a cons, and the car part is a character, idx must be of |
99303f55a1b8
(store_in_keymap): Pay attention to the case that idx
Kenichi Handa <handa@m17n.org>
parents:
89626
diff
changeset
|
858 the form (FROM-CHAR . TO-CHAR). */ |
99303f55a1b8
(store_in_keymap): Pay attention to the case that idx
Kenichi Handa <handa@m17n.org>
parents:
89626
diff
changeset
|
859 if (CONSP (idx) && CHARACTERP (XCAR (idx))) |
99303f55a1b8
(store_in_keymap): Pay attention to the case that idx
Kenichi Handa <handa@m17n.org>
parents:
89626
diff
changeset
|
860 CHECK_CHARACTER_CDR (idx); |
99303f55a1b8
(store_in_keymap): Pay attention to the case that idx
Kenichi Handa <handa@m17n.org>
parents:
89626
diff
changeset
|
861 else |
99303f55a1b8
(store_in_keymap): Pay attention to the case that idx
Kenichi Handa <handa@m17n.org>
parents:
89626
diff
changeset
|
862 /* If idx is a list (some sort of mouse click, perhaps?), |
99303f55a1b8
(store_in_keymap): Pay attention to the case that idx
Kenichi Handa <handa@m17n.org>
parents:
89626
diff
changeset
|
863 the index we want to use is the car of the list, which |
99303f55a1b8
(store_in_keymap): Pay attention to the case that idx
Kenichi Handa <handa@m17n.org>
parents:
89626
diff
changeset
|
864 ought to be a symbol. */ |
99303f55a1b8
(store_in_keymap): Pay attention to the case that idx
Kenichi Handa <handa@m17n.org>
parents:
89626
diff
changeset
|
865 idx = EVENT_HEAD (idx); |
250 | 866 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
867 /* 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
|
868 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
|
869 if (SYMBOLP (idx)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
870 idx = reorder_modifiers (idx); |
3515
9d0af0f2dc0d
(access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents:
3425
diff
changeset
|
871 else if (INTEGERP (idx)) |
9d0af0f2dc0d
(access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents:
3425
diff
changeset
|
872 /* 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
|
873 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
|
874 XSETFASTINT (idx, XINT (idx) & (CHAR_META | (CHAR_META - 1))); |
250 | 875 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
876 /* 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
|
877 { |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
878 Lisp_Object tail; |
250 | 879 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
880 /* 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
|
881 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
|
882 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
|
883 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
|
884 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
|
885 front of the keymap. */ |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
886 Lisp_Object insertion_point; |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
887 |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
888 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
|
889 for (tail = XCDR (keymap); CONSP (tail); tail = XCDR (tail)) |
250 | 890 { |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
891 Lisp_Object elt; |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
892 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
893 elt = XCAR (tail); |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
894 if (VECTORP (elt)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
895 { |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
896 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
|
897 { |
67505
51053176f6b7
(Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
Richard M. Stallman <rms@gnu.org>
parents:
67259
diff
changeset
|
898 CHECK_IMPURE (elt); |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
899 ASET (elt, XFASTINT (idx), def); |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
900 return def; |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
901 } |
89655
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
902 else if (CONSP (idx) && CHARACTERP (XCAR (idx))) |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
903 { |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
904 int from = XFASTINT (XCAR (idx)); |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
905 int to = XFASTINT (XCDR (idx)); |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
906 |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
907 if (to >= ASIZE (elt)) |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
908 to = ASIZE (elt) - 1; |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
909 for (; from <= to; from++) |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
910 ASET (elt, from, def); |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
911 if (to == XFASTINT (XCDR (idx))) |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
912 /* We have defined all keys in IDX. */ |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
913 return def; |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
914 } |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
915 insertion_point = tail; |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
916 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
917 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
|
918 { |
17932
78a128b99e05
(access_keymap, store_in_keymap): Don't look in a char-table
Richard M. Stallman <rms@gnu.org>
parents:
17861
diff
changeset
|
919 /* 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
|
920 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
|
921 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
|
922 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
|
923 { |
41593
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
924 Faset (elt, idx, |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
925 /* `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
|
926 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
|
927 unbound entry. */ |
bc65be224d92
(access_keymap): Handle t bindings like nil bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41387
diff
changeset
|
928 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
|
929 return def; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
930 } |
88380 | 931 else if (CONSP (idx) && CHARACTERP (XCAR (idx))) |
932 { | |
933 Fset_char_table_range (elt, idx, NILP (def) ? Qt : def); | |
934 return def; | |
935 } | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
936 insertion_point = tail; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
937 } |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
938 else if (CONSP (elt)) |
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
939 { |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
940 if (EQ (idx, XCAR (elt))) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
941 { |
67505
51053176f6b7
(Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
Richard M. Stallman <rms@gnu.org>
parents:
67259
diff
changeset
|
942 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
|
943 XSETCDR (elt, def); |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
944 return def; |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
945 } |
89655
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
946 else if (CONSP (idx) && CHARACTERP (XCAR (idx))) |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
947 { |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
948 int from = XFASTINT (XCAR (idx)); |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
949 int to = XFASTINT (XCDR (idx)); |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
950 |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
951 if (from <= XFASTINT (XCAR (elt)) |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
952 && to >= XFASTINT (XCAR (elt))) |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
953 { |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
954 XSETCDR (elt, def); |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
955 if (from == to) |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
956 return def; |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
957 } |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
958 } |
9973
1d5a908f201e
(access_keymap): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9957
diff
changeset
|
959 } |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
960 else if (EQ (elt, Qkeymap)) |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
961 /* 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
|
962 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
|
963 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
|
964 should be inserted before it. */ |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
965 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
|
966 |
929409595312
* keymap.c (store_in_keymap): Don't forget to QUIT in the
Jim Blandy <jimb@redhat.com>
parents:
1388
diff
changeset
|
967 QUIT; |
250 | 968 } |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
969 |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
970 keymap_end: |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
971 /* 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
|
972 IDX. Let's add one. */ |
89655
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
973 { |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
974 Lisp_Object elt; |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
975 |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
976 if (CONSP (idx) && CHARACTERP (XCAR (idx))) |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
977 { |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
978 /* IDX specifies a range of characters, and not all of them |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
979 were handled yet, which means this keymap doesn't have a |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
980 char-table. So, we insert a char-table now. */ |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
981 elt = Fmake_char_table (Qkeymap, Qnil); |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
982 Fset_char_table_range (elt, idx, NILP (def) ? Qt : def); |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
983 } |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
984 else |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
985 elt = Fcons (idx, def); |
90261
7beb78bc1f8e
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-97
Miles Bader <miles@gnu.org>
diff
changeset
|
986 CHECK_IMPURE (insertion_point); |
89655
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
987 XSETCDR (insertion_point, Fcons (elt, XCDR (insertion_point))); |
c7f2621e0e2d
(store_in_keymap): Pay attention to the case that idx is a cons
Kenichi Handa <handa@m17n.org>
parents:
89640
diff
changeset
|
988 } |
250 | 989 } |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
990 |
250 | 991 return def; |
992 } | |
993 | |
39837
ccaa40660e40
(Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39702
diff
changeset
|
994 EXFUN (Fcopy_keymap, 1); |
ccaa40660e40
(Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39702
diff
changeset
|
995 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
996 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
997 copy_keymap_item (Lisp_Object elt) |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
998 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
999 Lisp_Object res, tem; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1000 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1001 if (!CONSP (elt)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1002 return elt; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1003 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1004 res = tem = elt; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1005 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1006 /* 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
|
1007 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
|
1008 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1009 /* 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
|
1010 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
|
1011 tem = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1012 if (CONSP (tem)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1013 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1014 /* 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
|
1015 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
|
1016 elt = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1017 tem = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1018 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1019 if (CONSP (tem)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1020 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1021 /* 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
|
1022 copy that. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1023 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
|
1024 elt = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1025 tem = XCAR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1026 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
|
1027 XSETCAR (elt, Fcopy_keymap (tem)); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1028 tem = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1029 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
|
1030 /* Delete cache for key equivalences. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1031 XSETCDR (elt, XCDR (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 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1034 else |
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 /* 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
|
1037 Skip the optional menu string. */ |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1038 if (STRINGP (XCAR (tem))) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1039 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1040 /* 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
|
1041 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
|
1042 tem = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1043 /* 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
|
1044 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
|
1045 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1046 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
|
1047 elt = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1048 tem = XCDR (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1049 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1050 /* 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
|
1051 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
|
1052 if (CONSP (tem) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1053 && CONSP (XCAR (tem)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1054 && (NILP (XCAR (XCAR (tem))) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1055 || VECTORP (XCAR (XCAR (tem))))) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1056 { |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1057 XSETCDR (elt, XCDR (tem)); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1058 tem = XCDR (tem); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1059 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1060 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
|
1061 XSETCDR (elt, Fcopy_keymap (tem)); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1062 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1063 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
|
1064 res = Fcopy_keymap (elt); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1065 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1066 return res; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1067 } |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1068 |
49912
e9f8f5a9cef6
(copy_keymap_1): Make it static.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49902
diff
changeset
|
1069 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
1070 copy_keymap_1 (Lisp_Object chartable, Lisp_Object idx, Lisp_Object elt) |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1071 { |
89483 | 1072 Fset_char_table_range (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
|
1073 } |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
1074 |
250 | 1075 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
|
1076 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
|
1077 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
|
1078 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
|
1079 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
|
1080 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
|
1081 is not copied. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
1082 (Lisp_Object keymap) |
250 | 1083 { |
1084 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
|
1085 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
|
1086 copy = tail = Fcons (Qkeymap, Qnil); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1087 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
|
1088 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1089 while (CONSP (keymap) && !EQ (XCAR (keymap), Qkeymap)) |
250 | 1090 { |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1091 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
|
1092 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
|
1093 { |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1094 elt = Fcopy_sequence (elt); |
89483 | 1095 map_char_table (copy_keymap_1, Qnil, elt, elt); |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1096 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
1097 else if (VECTORP (elt)) |
250 | 1098 { |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
1099 int i; |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
1100 elt = Fcopy_sequence (elt); |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
1101 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
|
1102 ASET (elt, i, copy_keymap_item (AREF (elt, i))); |
250 | 1103 } |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1104 else if (CONSP (elt)) |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1105 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
|
1106 XSETCDR (tail, Fcons (elt, Qnil)); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1107 tail = XCDR (tail); |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1108 keymap = XCDR (keymap); |
250 | 1109 } |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1110 XSETCDR (tail, keymap); |
250 | 1111 return copy; |
1112 } | |
1113 | |
465 | 1114 /* Simple Keymap mutators and accessors. */ |
1115 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1116 /* 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
|
1117 |
250 | 1118 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
|
1119 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
|
1120 KEYMAP is a keymap. |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1121 |
109246
d657dd1ad387
* keymap.c (Fdefine_key): Doc fix (Bug#6460).
Chong Yidong <cyd@stupidchicken.com>
parents:
108678
diff
changeset
|
1122 KEY is a string or a vector of symbols and characters, representing a |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1123 sequence of keystrokes and events. Non-ASCII characters with codes |
109246
d657dd1ad387
* keymap.c (Fdefine_key): Doc fix (Bug#6460).
Chong Yidong <cyd@stupidchicken.com>
parents:
108678
diff
changeset
|
1124 above 127 (such as ISO Latin-1) can be represented by vectors. |
d657dd1ad387
* keymap.c (Fdefine_key): Doc fix (Bug#6460).
Chong Yidong <cyd@stupidchicken.com>
parents:
108678
diff
changeset
|
1125 Two types of vector have special meanings: |
109302
60516122d066
Merge changes from emacs-23 branch.
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
1126 [remap COMMAND] remaps any key binding for COMMAND. |
109246
d657dd1ad387
* keymap.c (Fdefine_key): Doc fix (Bug#6460).
Chong Yidong <cyd@stupidchicken.com>
parents:
108678
diff
changeset
|
1127 [t] creates a default definition, which applies to any event with no |
d657dd1ad387
* keymap.c (Fdefine_key): Doc fix (Bug#6460).
Chong Yidong <cyd@stupidchicken.com>
parents:
108678
diff
changeset
|
1128 other definition in KEYMAP. |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1129 |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1130 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
|
1131 nil (means key is undefined in this keymap), |
55722
623ab06bb37b
(Fdefine_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
55006
diff
changeset
|
1132 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
|
1133 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
|
1134 a keymap (to define a prefix key), |
55722
623ab06bb37b
(Fdefine_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
55006
diff
changeset
|
1135 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
|
1136 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
|
1137 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
|
1138 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
|
1139 (DEFN should be a valid definition in its own right), |
74975
489131611785
(Fdefine_key): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
74574
diff
changeset
|
1140 or a cons (MAP . CHAR), meaning use definition of CHAR in keymap MAP, |
77422
7ecfd3e438e0
(Fdefine_key): Minor doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
77367
diff
changeset
|
1141 or an extended menu item definition. |
7ecfd3e438e0
(Fdefine_key): Minor doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
77367
diff
changeset
|
1142 (See info node `(elisp)Extended Menu Items'.) |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1143 |
49901
71b3917cf40b
(Fdefine_key): Doc fix.
Kai Großjohann <kgrossjo@eu.uu.net>
parents:
49868
diff
changeset
|
1144 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
|
1145 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
|
1146 binding KEY to DEF is added at the front of KEYMAP. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
1147 (Lisp_Object keymap, Lisp_Object key, Lisp_Object def) |
250 | 1148 { |
1149 register int idx; | |
1150 register Lisp_Object c; | |
1151 register Lisp_Object cmd; | |
1152 int metized = 0; | |
2059 | 1153 int meta_bit; |
250 | 1154 int length; |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
1155 struct gcpro gcpro1, gcpro2, gcpro3; |
250 | 1156 |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1157 GCPRO3 (keymap, key, def); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1158 keymap = get_keymap (keymap, 1, 1); |
250 | 1159 |
71836
838fd2b04ce0
(Fdefine_key, Flookup_key): Use CHECK_VECTOR_OR_STRING.
Kim F. Storm <storm@cua.dk>
parents:
70554
diff
changeset
|
1160 CHECK_VECTOR_OR_STRING (key); |
250 | 1161 |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
1162 length = XFASTINT (Flength (key)); |
250 | 1163 if (length == 0) |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1164 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
|
1165 |
12297
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
1166 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
|
1167 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
|
1168 |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
1169 meta_bit = (VECTORP (key) || (STRINGP (key) && STRING_MULTIBYTE (key)) |
80869
f526513aec92
(Fdefine_key, Flookup_key): Only do the 0x80->meta_modifier
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77422
diff
changeset
|
1170 ? meta_modifier : 0x80); |
2059 | 1171 |
73152
645da5a91b56
(Fdefine_key): Yet another int/Lisp_Object mixup (YAILOM).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73131
diff
changeset
|
1172 if (VECTORP (def) && ASIZE (def) > 0 && CONSP (AREF (def, 0))) |
72074
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1173 { /* DEF is apparently an XEmacs-style keyboard macro. */ |
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1174 Lisp_Object tmp = Fmake_vector (make_number (ASIZE (def)), Qnil); |
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1175 int i = ASIZE (def); |
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1176 while (--i >= 0) |
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1177 { |
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1178 Lisp_Object c = AREF (def, i); |
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1179 if (CONSP (c) && lucid_event_type_list_p (c)) |
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1180 c = Fevent_convert_list (c); |
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1181 ASET (tmp, i, c); |
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1182 } |
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1183 def = tmp; |
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1184 } |
91ea8d22ef60
(Fdefine_key): If the key binding definition looks like an
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71982
diff
changeset
|
1185 |
250 | 1186 idx = 0; |
1187 while (1) | |
1188 { | |
1189 c = Faref (key, make_number (idx)); | |
1190 | |
88380 | 1191 if (CONSP (c)) |
1192 { | |
89626
e2d5f38e23b4
(Fdefine_key): Fix handling of Lucid style event type list.
Kenichi Handa <handa@m17n.org>
parents:
89551
diff
changeset
|
1193 /* C may be a Lucid style event type list or a cons (FROM . |
e2d5f38e23b4
(Fdefine_key): Fix handling of Lucid style event type list.
Kenichi Handa <handa@m17n.org>
parents:
89551
diff
changeset
|
1194 TO) specifying a range of characters. */ |
e2d5f38e23b4
(Fdefine_key): Fix handling of Lucid style event type list.
Kenichi Handa <handa@m17n.org>
parents:
89551
diff
changeset
|
1195 if (lucid_event_type_list_p (c)) |
e2d5f38e23b4
(Fdefine_key): Fix handling of Lucid style event type list.
Kenichi Handa <handa@m17n.org>
parents:
89551
diff
changeset
|
1196 c = Fevent_convert_list (c); |
e2d5f38e23b4
(Fdefine_key): Fix handling of Lucid style event type list.
Kenichi Handa <handa@m17n.org>
parents:
89551
diff
changeset
|
1197 else if (CHARACTERP (XCAR (c))) |
89483 | 1198 CHECK_CHARACTER_CDR (c); |
88380 | 1199 } |
10840
3a7336f191b9
(Fdefine_key): Handle Lucid-style (crtl backspace) etc.
Richard M. Stallman <rms@gnu.org>
parents:
10810
diff
changeset
|
1200 |
42404
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1201 if (SYMBOLP (c)) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1202 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
|
1203 |
9123
c225137ddefb
(get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents:
8922
diff
changeset
|
1204 if (INTEGERP (c) |
2059 | 1205 && (XINT (c) & meta_bit) |
250 | 1206 && !metized) |
1207 { | |
1208 c = meta_prefix_char; | |
1209 metized = 1; | |
1210 } | |
1211 else | |
1212 { | |
9123
c225137ddefb
(get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents:
8922
diff
changeset
|
1213 if (INTEGERP (c)) |
2093
ce8bad247b1a
(Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents:
2059
diff
changeset
|
1214 XSETINT (c, XINT (c) & ~meta_bit); |
250 | 1215 |
1216 metized = 0; | |
1217 idx++; | |
1218 } | |
1219 | |
88380 | 1220 if (!INTEGERP (c) && !SYMBOLP (c) |
1221 && (!CONSP (c) | |
1222 /* If C is a range, it must be a leaf. */ | |
1223 || (INTEGERP (XCAR (c)) && idx != length))) | |
109601
0a12f74cc5d8
* src/keymap.c (Fdefine_key, Flookup_key): Say what event is invalid.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
109573
diff
changeset
|
1224 message_with_string ("Key sequence contains invalid event %s", c, 1); |
6473
76bb655df959
(Fdefine_key): Check for non-events in keyvector.
Karl Heuer <kwzh@gnu.org>
parents:
6457
diff
changeset
|
1225 |
250 | 1226 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
|
1227 RETURN_UNGCPRO (store_in_keymap (keymap, c, def)); |
250 | 1228 |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1229 cmd = access_keymap (keymap, c, 0, 1, 1); |
250 | 1230 |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1231 /* If this key is undefined, make it a prefix. */ |
485 | 1232 if (NILP (cmd)) |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1233 cmd = define_as_prefix (keymap, c); |
250 | 1234 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1235 keymap = get_keymap (cmd, 0, 1); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1236 if (!CONSP (keymap)) |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
1237 /* 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
|
1238 error; key might be a vector, not a string. */ |
70293
3f5619e77411
(Fdefine_key): Improve error message when KEY begins with a non-prefix key.
Richard M. Stallman <rms@gnu.org>
parents:
70242
diff
changeset
|
1239 error ("Key sequence %s starts with non-prefix key %s", |
3f5619e77411
(Fdefine_key): Improve error message when KEY begins with a non-prefix key.
Richard M. Stallman <rms@gnu.org>
parents:
70242
diff
changeset
|
1240 SDATA (Fkey_description (key, Qnil)), |
3f5619e77411
(Fdefine_key): Improve error message when KEY begins with a non-prefix key.
Richard M. Stallman <rms@gnu.org>
parents:
70242
diff
changeset
|
1241 SDATA (Fkey_description (Fsubstring (key, make_number (0), |
3f5619e77411
(Fdefine_key): Improve error message when KEY begins with a non-prefix key.
Richard M. Stallman <rms@gnu.org>
parents:
70242
diff
changeset
|
1242 make_number (idx)), |
3f5619e77411
(Fdefine_key): Improve error message when KEY begins with a non-prefix key.
Richard M. Stallman <rms@gnu.org>
parents:
70242
diff
changeset
|
1243 Qnil))); |
250 | 1244 } |
1245 } | |
1246 | |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1247 /* 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
|
1248 |
76887
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1249 DEFUN ("command-remapping", Fcommand_remapping, Scommand_remapping, 1, 3, 0, |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1250 doc: /* Return the remapping for command COMMAND. |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1251 Returns nil if COMMAND is not remapped (or not a symbol). |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1252 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1253 If the optional argument POSITION is non-nil, it specifies a mouse |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1254 position as returned by `event-start' and `event-end', and the |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1255 remapping occurs in the keymaps associated with it. It can also be a |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1256 number or marker, in which case the keymap properties at the specified |
76887
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1257 buffer position instead of point are used. The KEYMAPS argument is |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1258 ignored if POSITION is non-nil. |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1259 |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1260 If the optional argument KEYMAPS is non-nil, it should be a list of |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1261 keymaps to search for command remapping. Otherwise, search for the |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1262 remapping in all currently active keymaps. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
1263 (Lisp_Object command, Lisp_Object position, Lisp_Object keymaps) |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1264 { |
49720
e4fcec69ba69
(Fremap_command): Return nil if arg is not a symbol.
Kim F. Storm <storm@cua.dk>
parents:
49059
diff
changeset
|
1265 if (!SYMBOLP (command)) |
e4fcec69ba69
(Fremap_command): Return nil if arg is not a symbol.
Kim F. Storm <storm@cua.dk>
parents:
49059
diff
changeset
|
1266 return Qnil; |
e4fcec69ba69
(Fremap_command): Return nil if arg is not a symbol.
Kim F. Storm <storm@cua.dk>
parents:
49059
diff
changeset
|
1267 |
49757
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
1268 ASET (command_remapping_vector, 1, command); |
76887
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1269 |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1270 if (NILP (keymaps)) |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1271 return Fkey_binding (command_remapping_vector, Qnil, Qt, position); |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1272 else |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1273 { |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1274 Lisp_Object maps, binding; |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1275 |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85106
diff
changeset
|
1276 for (maps = keymaps; CONSP (maps); maps = XCDR (maps)) |
76887
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1277 { |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85106
diff
changeset
|
1278 binding = Flookup_key (XCAR (maps), command_remapping_vector, Qnil); |
76887
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1279 if (!NILP (binding) && !INTEGERP (binding)) |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1280 return binding; |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1281 } |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1282 return Qnil; |
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1283 } |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1284 } |
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1285 |
42206 | 1286 /* 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
|
1287 /* GC is possible in this function if it autoloads a keymap. */ |
250 | 1288 |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1289 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
|
1290 doc: /* In keymap KEYMAP, look up key sequence KEY. Return the definition. |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1291 A value of nil means undefined. See doc of `define-key' |
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1292 for kinds of definitions. |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1293 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1294 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
|
1295 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
|
1296 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
|
1297 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
|
1298 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
|
1299 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1300 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
|
1301 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
|
1302 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
|
1303 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
|
1304 recognize the default bindings, just as `read-key-sequence' does. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
1305 (Lisp_Object keymap, Lisp_Object key, Lisp_Object accept_default) |
250 | 1306 { |
1307 register int idx; | |
1308 register Lisp_Object cmd; | |
1309 register Lisp_Object c; | |
1310 int length; | |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1311 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
|
1312 struct gcpro gcpro1, gcpro2; |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1313 |
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1314 GCPRO2 (keymap, key); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1315 keymap = get_keymap (keymap, 1, 1); |
250 | 1316 |
71836
838fd2b04ce0
(Fdefine_key, Flookup_key): Use CHECK_VECTOR_OR_STRING.
Kim F. Storm <storm@cua.dk>
parents:
70554
diff
changeset
|
1317 CHECK_VECTOR_OR_STRING (key); |
250 | 1318 |
1517
72b7bbcaf7d8
* keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents:
1441
diff
changeset
|
1319 length = XFASTINT (Flength (key)); |
250 | 1320 if (length == 0) |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1321 RETURN_UNGCPRO (keymap); |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1322 |
250 | 1323 idx = 0; |
1324 while (1) | |
1325 { | |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1326 c = Faref (key, make_number (idx++)); |
250 | 1327 |
10840
3a7336f191b9
(Fdefine_key): Handle Lucid-style (crtl backspace) etc.
Richard M. Stallman <rms@gnu.org>
parents:
10810
diff
changeset
|
1328 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
|
1329 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
|
1330 |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1331 /* Turn the 8th bit of string chars into a meta modifier. */ |
80871
c49e1e480880
(Flookup_key): Fix typo in last change.
Andreas Schwab <schwab@suse.de>
parents:
80869
diff
changeset
|
1332 if (STRINGP (key) && XINT (c) & 0x80 && !STRING_MULTIBYTE (key)) |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1333 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
|
1334 |
43504
20832766c3e1
(Flookup_key): Fixed problem in 2001-12-28 patch:
Kim F. Storm <storm@cua.dk>
parents:
43494
diff
changeset
|
1335 /* 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
|
1336 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
|
1337 if (!INTEGERP (c) && !SYMBOLP (c) && !CONSP (c) && !STRINGP (c)) |
109601
0a12f74cc5d8
* src/keymap.c (Fdefine_key, Flookup_key): Say what event is invalid.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
109573
diff
changeset
|
1338 message_with_string ("Key sequence contains invalid event %s", c, 1); |
42378
9f96219e833e
(Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents:
42206
diff
changeset
|
1339 |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1340 cmd = access_keymap (keymap, c, t_ok, 0, 1); |
250 | 1341 if (idx == length) |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1342 RETURN_UNGCPRO (cmd); |
250 | 1343 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1344 keymap = get_keymap (cmd, 0, 1); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1345 if (!CONSP (keymap)) |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1346 RETURN_UNGCPRO (make_number (idx)); |
250 | 1347 |
1348 QUIT; | |
1349 } | |
1350 } | |
1351 | |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1352 /* 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
|
1353 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
|
1354 Return the keymap. */ |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1355 |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1356 static Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
1357 define_as_prefix (Lisp_Object keymap, Lisp_Object c) |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1358 { |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1359 Lisp_Object cmd; |
3735
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1360 |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1361 cmd = Fmake_sparse_keymap (Qnil); |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1362 /* 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
|
1363 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
|
1364 inherit the other prefix definition. */ |
32476
9b2a0dc393a4
* keymap.c (access_keymap): Add AUTOLOAD parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32145
diff
changeset
|
1365 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
|
1366 store_in_keymap (keymap, c, cmd); |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1367 |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1368 return cmd; |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1369 } |
7193a99a87c1
Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents:
3691
diff
changeset
|
1370 |
2093
ce8bad247b1a
(Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents:
2059
diff
changeset
|
1371 /* 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
|
1372 |
250 | 1373 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
1374 append_key (Lisp_Object key_sequence, Lisp_Object key) |
250 | 1375 { |
1376 Lisp_Object args[2]; | |
1377 | |
1378 args[0] = key_sequence; | |
1379 | |
2093
ce8bad247b1a
(Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents:
2059
diff
changeset
|
1380 args[1] = Fcons (key, Qnil); |
ce8bad247b1a
(Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents:
2059
diff
changeset
|
1381 return Fvconcat (2, args); |
250 | 1382 } |
1383 | |
42404
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1384 /* 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
|
1385 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
|
1386 |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1387 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
1388 silly_event_symbol_error (Lisp_Object c) |
42404
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1389 { |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1390 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
|
1391 int modifiers; |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
1392 |
42404
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1393 parsed = parse_modifiers (c); |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1394 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
|
1395 base = XCAR (parsed); |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1396 name = Fsymbol_name (base); |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1397 /* 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
|
1398 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
|
1399 |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1400 if (! NILP (assoc)) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1401 { |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1402 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
|
1403 char *p = new_mods; |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1404 Lisp_Object keystring; |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1405 if (modifiers & alt_modifier) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1406 { *p++ = '\\'; *p++ = 'A'; *p++ = '-'; } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1407 if (modifiers & ctrl_modifier) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1408 { *p++ = '\\'; *p++ = 'C'; *p++ = '-'; } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1409 if (modifiers & hyper_modifier) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1410 { *p++ = '\\'; *p++ = 'H'; *p++ = '-'; } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1411 if (modifiers & meta_modifier) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1412 { *p++ = '\\'; *p++ = 'M'; *p++ = '-'; } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1413 if (modifiers & shift_modifier) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1414 { *p++ = '\\'; *p++ = 'S'; *p++ = '-'; } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1415 if (modifiers & super_modifier) |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1416 { *p++ = '\\'; *p++ = 's'; *p++ = '-'; } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1417 *p = 0; |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1418 |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1419 c = reorder_modifiers (c); |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1420 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
|
1421 |
42404
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1422 error ((modifiers & ~meta_modifier |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1423 ? "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
|
1424 : "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
|
1425 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
|
1426 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
|
1427 } |
ca040d0f5c67
(silly_event_symbol_error): New subrtn, from Fdefine_key.
Richard M. Stallman <rms@gnu.org>
parents:
42381
diff
changeset
|
1428 } |
250 | 1429 |
465 | 1430 /* Global, local, and minor mode keymap stuff. */ |
1431 | |
485 | 1432 /* We can't put these variables inside current_minor_maps, since under |
517 | 1433 some systems, static gets macro-defined to be the empty string. |
1434 Ickypoo. */ | |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1435 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
|
1436 static int cmm_size = 0; |
485 | 1437 |
76710
13738aa5cbd1
Fix a comment before `current_minor_maps'.
Eli Zaretskii <eliz@gnu.org>
parents:
76415
diff
changeset
|
1438 /* Store a pointer to an array of the currently active minor modes in |
13738aa5cbd1
Fix a comment before `current_minor_maps'.
Eli Zaretskii <eliz@gnu.org>
parents:
76415
diff
changeset
|
1439 *modeptr, a pointer to an array of the keymaps of the currently |
13738aa5cbd1
Fix a comment before `current_minor_maps'.
Eli Zaretskii <eliz@gnu.org>
parents:
76415
diff
changeset
|
1440 active minor modes in *mapptr, and return the number of maps |
13738aa5cbd1
Fix a comment before `current_minor_maps'.
Eli Zaretskii <eliz@gnu.org>
parents:
76415
diff
changeset
|
1441 *mapptr contains. |
465 | 1442 |
1443 This function always returns a pointer to the same buffer, and may | |
1444 free or reallocate it, so if you want to keep it for a long time or | |
1445 hand it out to lisp code, copy it. This procedure will be called | |
1446 for every key sequence read, so the nice lispy approach (return a | |
1447 new assoclist, list, what have you) for each invocation would | |
1448 result in a lot of consing over time. | |
1449 | |
1450 If we used xrealloc/xmalloc and ran out of memory, they would throw | |
1451 back to the command loop, which would try to read a key sequence, | |
1452 which would call this function again, resulting in an infinite | |
1453 loop. Instead, we'll use realloc/malloc and silently truncate the | |
1454 list, let the key sequence be read, and hope some other piece of | |
1455 code signals the error. */ | |
1456 int | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
1457 current_minor_maps (Lisp_Object **modeptr, Lisp_Object **mapptr) |
465 | 1458 { |
1459 int i = 0; | |
20517
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1460 int list_number = 0; |
517 | 1461 Lisp_Object alist, assoc, var, val; |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1462 Lisp_Object emulation_alists; |
20517
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1463 Lisp_Object lists[2]; |
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1464 |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1465 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
|
1466 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
|
1467 lists[1] = Vminor_mode_map_alist; |
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1468 |
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1469 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
|
1470 { |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1471 if (CONSP (emulation_alists)) |
20517
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
1472 { |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1473 alist = XCAR (emulation_alists); |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1474 emulation_alists = XCDR (emulation_alists); |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1475 if (SYMBOLP (alist)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1476 alist = find_symbol_value (alist); |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1477 list_number = -1; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1478 } |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1479 else |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1480 alist = lists[list_number]; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1481 |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1482 for ( ; CONSP (alist); alist = XCDR (alist)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1483 if ((assoc = XCAR (alist), CONSP (assoc)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1484 && (var = XCAR (assoc), SYMBOLP (var)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1485 && (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
|
1486 && !NILP (val)) |
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 Lisp_Object temp; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1489 |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1490 /* 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
|
1491 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
|
1492 ignore the latter. */ |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1493 if (list_number == 1) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1494 { |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1495 val = assq_no_quit (var, lists[0]); |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1496 if (!NILP (val)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1497 continue; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1498 } |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1499 |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1500 if (i >= cmm_size) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1501 { |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1502 int newsize, allocsize; |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1503 Lisp_Object *newmodes, *newmaps; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1504 |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1505 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
|
1506 allocsize = newsize * sizeof *newmodes; |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1507 |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
1508 /* 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
|
1509 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
|
1510 BLOCK_INPUT; |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1511 newmodes = (Lisp_Object *) malloc (allocsize); |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1512 if (newmodes) |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1513 { |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1514 if (cmm_modes) |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1515 { |
109165
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109131
diff
changeset
|
1516 memcpy (newmodes, cmm_modes, |
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109131
diff
changeset
|
1517 cmm_size * sizeof cmm_modes[0]); |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1518 free (cmm_modes); |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1519 } |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1520 cmm_modes = newmodes; |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1521 } |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1522 |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1523 newmaps = (Lisp_Object *) malloc (allocsize); |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1524 if (newmaps) |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1525 { |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1526 if (cmm_maps) |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1527 { |
109165
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109131
diff
changeset
|
1528 memcpy (newmaps, cmm_maps, |
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109131
diff
changeset
|
1529 cmm_size * sizeof cmm_maps[0]); |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1530 free (cmm_maps); |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1531 } |
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1532 cmm_maps = newmaps; |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1533 } |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1534 UNBLOCK_INPUT; |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
1535 |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1536 if (newmodes == NULL || newmaps == NULL) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1537 break; |
45235
66271fa0bf60
(current_minor_maps): Fixed resizing of cmm_maps;
Kim F. Storm <storm@cua.dk>
parents:
45222
diff
changeset
|
1538 cmm_size = newsize; |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1539 } |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1540 |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1541 /* Get the keymap definition--or nil if it is not defined. */ |
68758
13c1b7c5f555
* data.c (Findirect_function): Add NOERROR arg. All callers changed
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
1542 temp = Findirect_function (XCDR (assoc), Qt); |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1543 if (!NILP (temp)) |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1544 { |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1545 cmm_modes[i] = var; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1546 cmm_maps [i] = temp; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1547 i++; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1548 } |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1549 } |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
1550 } |
465 | 1551 |
485 | 1552 if (modeptr) *modeptr = cmm_modes; |
1553 if (mapptr) *mapptr = cmm_maps; | |
465 | 1554 return i; |
1555 } | |
1556 | |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1557 DEFUN ("current-active-maps", Fcurrent_active_maps, Scurrent_active_maps, |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1558 0, 2, 0, |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1559 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
|
1560 OLP if non-nil indicates that we should obey `overriding-local-map' and |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1561 `overriding-terminal-local-map'. POSITION can specify a click position |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1562 like in the respective argument of `key-binding'. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
1563 (Lisp_Object olp, Lisp_Object position) |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1564 { |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1565 int count = SPECPDL_INDEX (); |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1566 |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1567 Lisp_Object keymaps; |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1568 |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1569 /* If a mouse click position is given, our variables are based on |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1570 the buffer clicked on, not the current buffer. So we may have to |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1571 switch the buffer here. */ |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1572 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1573 if (CONSP (position)) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1574 { |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1575 Lisp_Object window; |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1576 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1577 window = POSN_WINDOW (position); |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1578 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1579 if (WINDOWP (window) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1580 && BUFFERP (XWINDOW (window)->buffer) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1581 && XBUFFER (XWINDOW (window)->buffer) != current_buffer) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1582 { |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1583 /* Arrange to go back to the original buffer once we're done |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1584 processing the key sequence. We don't use |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1585 save_excursion_{save,restore} here, in analogy to |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1586 `read-key-sequence' to avoid saving point. Maybe this |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1587 would not be a problem here, but it is easier to keep |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1588 things the same. |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1589 */ |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1590 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1591 record_unwind_protect (Fset_buffer, Fcurrent_buffer ()); |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1592 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1593 set_buffer_internal (XBUFFER (XWINDOW (window)->buffer)); |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1594 } |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1595 } |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1596 |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1597 keymaps = Fcons (current_global_map, Qnil); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1598 |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1599 if (!NILP (olp)) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1600 { |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1601 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
|
1602 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
|
1603 /* 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
|
1604 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
|
1605 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
|
1606 else if (!NILP (Voverriding_local_map)) |
031c9a79c55a
(Fcurrent_active_maps): Ignore Voverriding_local_map
Richard M. Stallman <rms@gnu.org>
parents:
58450
diff
changeset
|
1607 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
|
1608 } |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1609 if (NILP (XCDR (keymaps))) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1610 { |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1611 Lisp_Object *maps; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1612 int nmaps, i; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1613 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1614 Lisp_Object keymap, local_map; |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1615 EMACS_INT pt; |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1616 |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1617 pt = INTEGERP (position) ? XINT (position) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1618 : MARKERP (position) ? marker_position (position) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1619 : PT; |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1620 |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1621 /* Get the buffer local maps, possibly overriden by text or |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1622 overlay properties */ |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1623 |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1624 local_map = get_local_map (pt, current_buffer, Qlocal_map); |
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1625 keymap = get_local_map (pt, current_buffer, Qkeymap); |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1626 |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1627 if (CONSP (position)) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1628 { |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1629 Lisp_Object string; |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1630 |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1631 /* For a mouse click, get the local text-property keymap |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1632 of the place clicked on, rather than point. */ |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1633 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1634 if (POSN_INBUFFER_P (position)) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1635 { |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1636 Lisp_Object pos; |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1637 |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1638 pos = POSN_BUFFER_POSN (position); |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1639 if (INTEGERP (pos) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1640 && XINT (pos) >= BEG && XINT (pos) <= Z) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1641 { |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1642 local_map = get_local_map (XINT (pos), |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1643 current_buffer, Qlocal_map); |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1644 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1645 keymap = get_local_map (XINT (pos), |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1646 current_buffer, Qkeymap); |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1647 } |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1648 } |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1649 |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1650 /* If on a mode line string with a local keymap, |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1651 or for a click on a string, i.e. overlay string or a |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1652 string displayed via the `display' property, |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1653 consider `local-map' and `keymap' properties of |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1654 that string. */ |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1655 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1656 if (string = POSN_STRING (position), |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1657 (CONSP (string) && STRINGP (XCAR (string)))) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1658 { |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1659 Lisp_Object pos, map; |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1660 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1661 pos = XCDR (string); |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1662 string = XCAR (string); |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1663 if (INTEGERP (pos) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1664 && XINT (pos) >= 0 |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1665 && XINT (pos) < SCHARS (string)) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1666 { |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1667 map = Fget_text_property (pos, Qlocal_map, string); |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1668 if (!NILP (map)) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1669 local_map = map; |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1670 |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1671 map = Fget_text_property (pos, Qkeymap, string); |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1672 if (!NILP (map)) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1673 keymap = map; |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1674 } |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1675 } |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
1676 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1677 } |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1678 |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1679 if (!NILP (local_map)) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1680 keymaps = Fcons (local_map, keymaps); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1681 |
59522
031c9a79c55a
(Fcurrent_active_maps): Ignore Voverriding_local_map
Richard M. Stallman <rms@gnu.org>
parents:
58450
diff
changeset
|
1682 /* 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
|
1683 nmaps = current_minor_maps (0, &maps); |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1684 |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1685 for (i = --nmaps; i >= 0; i--) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1686 if (!NILP (maps[i])) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1687 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
|
1688 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1689 if (!NILP (keymap)) |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1690 keymaps = Fcons (keymap, keymaps); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1691 } |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
1692 |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1693 unbind_to (count, Qnil); |
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
1694 |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1695 return keymaps; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1696 } |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
1697 |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1698 /* 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
|
1699 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1700 DEFUN ("key-binding", Fkey_binding, Skey_binding, 1, 4, 0, |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1701 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
|
1702 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
|
1703 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
|
1704 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1705 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
|
1706 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
|
1707 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
|
1708 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
|
1709 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
|
1710 |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1711 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
|
1712 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
|
1713 current keymaps. However, if the optional third argument NO-REMAP |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1714 is non-nil, `key-binding' returns the unmapped command. |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1715 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1716 If KEY is a key sequence initiated with the mouse, the used keymaps |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1717 will depend on the clicked mouse position with regard to the buffer |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1718 and possible local keymaps on strings. |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1719 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1720 If the optional argument POSITION is non-nil, it specifies a mouse |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1721 position as returned by `event-start' and `event-end', and the lookup |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1722 occurs in the keymaps associated with it instead of KEY. It can also |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1723 be a number or marker, in which case the keymap properties at the |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1724 specified buffer position instead of point are used. |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1725 */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
1726 (Lisp_Object key, Lisp_Object accept_default, Lisp_Object no_remap, Lisp_Object position) |
250 | 1727 { |
465 | 1728 Lisp_Object *maps, value; |
1729 int nmaps, i; | |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1730 struct gcpro gcpro1, gcpro2; |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1731 int count = SPECPDL_INDEX (); |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1732 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1733 GCPRO2 (key, position); |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1734 |
72989
f9742f561ed9
Include alloca.h if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72889
diff
changeset
|
1735 if (NILP (position) && VECTORP (key)) |
72795
64e86769392f
* keymap.c (Fkey_binding): Check for local keymap for mouse click
Chong Yidong <cyd@stupidchicken.com>
parents:
72074
diff
changeset
|
1736 { |
72989
f9742f561ed9
Include alloca.h if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72889
diff
changeset
|
1737 Lisp_Object event |
f9742f561ed9
Include alloca.h if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72889
diff
changeset
|
1738 /* mouse events may have a symbolic prefix indicating the |
f9742f561ed9
Include alloca.h if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72889
diff
changeset
|
1739 scrollbar or mode line */ |
f9742f561ed9
Include alloca.h if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72889
diff
changeset
|
1740 = AREF (key, SYMBOLP (AREF (key, 0)) && ASIZE (key) > 1 ? 1 : 0); |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1741 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1742 /* We are not interested in locations without event data */ |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1743 |
76269 | 1744 if (EVENT_HAS_PARAMETERS (event) && CONSP (XCDR (event))) |
73350
1a3368a80879
* keymap.c (Fkey_binding): Check Lisp_Object types before doing
Chong Yidong <cyd@stupidchicken.com>
parents:
73152
diff
changeset
|
1745 { |
1a3368a80879
* keymap.c (Fkey_binding): Check Lisp_Object types before doing
Chong Yidong <cyd@stupidchicken.com>
parents:
73152
diff
changeset
|
1746 Lisp_Object kind = EVENT_HEAD_KIND (EVENT_HEAD (event)); |
76269 | 1747 if (EQ (kind, Qmouse_click)) |
73350
1a3368a80879
* keymap.c (Fkey_binding): Check Lisp_Object types before doing
Chong Yidong <cyd@stupidchicken.com>
parents:
73152
diff
changeset
|
1748 position = EVENT_START (event); |
1a3368a80879
* keymap.c (Fkey_binding): Check Lisp_Object types before doing
Chong Yidong <cyd@stupidchicken.com>
parents:
73152
diff
changeset
|
1749 } |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1750 } |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1751 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1752 /* Key sequences beginning with mouse clicks |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1753 are read using the keymaps of the buffer clicked on, not |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1754 the current buffer. So we may have to switch the buffer |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1755 here. */ |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1756 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1757 if (CONSP (position)) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1758 { |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1759 Lisp_Object window; |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1760 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1761 window = POSN_WINDOW (position); |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1762 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1763 if (WINDOWP (window) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1764 && BUFFERP (XWINDOW (window)->buffer) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1765 && XBUFFER (XWINDOW (window)->buffer) != current_buffer) |
72795
64e86769392f
* keymap.c (Fkey_binding): Check for local keymap for mouse click
Chong Yidong <cyd@stupidchicken.com>
parents:
72074
diff
changeset
|
1766 { |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1767 /* Arrange to go back to the original buffer once we're done |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1768 processing the key sequence. We don't use |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1769 save_excursion_{save,restore} here, in analogy to |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1770 `read-key-sequence' to avoid saving point. Maybe this |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1771 would not be a problem here, but it is easier to keep |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1772 things the same. |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1773 */ |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1774 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1775 record_unwind_protect (Fset_buffer, Fcurrent_buffer ()); |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1776 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1777 set_buffer_internal (XBUFFER (XWINDOW (window)->buffer)); |
72795
64e86769392f
* keymap.c (Fkey_binding): Check for local keymap for mouse click
Chong Yidong <cyd@stupidchicken.com>
parents:
72074
diff
changeset
|
1778 } |
64e86769392f
* keymap.c (Fkey_binding): Check for local keymap for mouse click
Chong Yidong <cyd@stupidchicken.com>
parents:
72074
diff
changeset
|
1779 } |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1780 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1781 if (! NILP (current_kboard->Voverriding_terminal_local_map)) |
12262
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
1782 { |
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
1783 value = Flookup_key (current_kboard->Voverriding_terminal_local_map, |
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
1784 key, accept_default); |
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
1785 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
|
1786 goto done; |
12262
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
1787 } |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1788 else if (! NILP (Voverriding_local_map)) |
250 | 1789 { |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1790 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
|
1791 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
|
1792 goto done; |
250 | 1793 } |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1794 else |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
1795 { |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1796 Lisp_Object keymap, local_map; |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1797 EMACS_INT pt; |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1798 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1799 pt = INTEGERP (position) ? XINT (position) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1800 : MARKERP (position) ? marker_position (position) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1801 : PT; |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1802 |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1803 local_map = get_local_map (pt, current_buffer, Qlocal_map); |
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1804 keymap = get_local_map (pt, current_buffer, Qkeymap); |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1805 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1806 if (CONSP (position)) |
42510
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
1807 { |
72989
f9742f561ed9
Include alloca.h if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72889
diff
changeset
|
1808 Lisp_Object string; |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1809 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1810 /* For a mouse click, get the local text-property keymap |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1811 of the place clicked on, rather than point. */ |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1812 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1813 if (POSN_INBUFFER_P (position)) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1814 { |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1815 Lisp_Object pos; |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1816 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1817 pos = POSN_BUFFER_POSN (position); |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1818 if (INTEGERP (pos) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1819 && XINT (pos) >= BEG && XINT (pos) <= Z) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1820 { |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1821 local_map = get_local_map (XINT (pos), |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1822 current_buffer, Qlocal_map); |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1823 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1824 keymap = get_local_map (XINT (pos), |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1825 current_buffer, Qkeymap); |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1826 } |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1827 } |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1828 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1829 /* If on a mode line string with a local keymap, |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1830 or for a click on a string, i.e. overlay string or a |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1831 string displayed via the `display' property, |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1832 consider `local-map' and `keymap' properties of |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1833 that string. */ |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1834 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1835 if (string = POSN_STRING (position), |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1836 (CONSP (string) && STRINGP (XCAR (string)))) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1837 { |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1838 Lisp_Object pos, map; |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1839 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1840 pos = XCDR (string); |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1841 string = XCAR (string); |
73350
1a3368a80879
* keymap.c (Fkey_binding): Check Lisp_Object types before doing
Chong Yidong <cyd@stupidchicken.com>
parents:
73152
diff
changeset
|
1842 if (INTEGERP (pos) |
1a3368a80879
* keymap.c (Fkey_binding): Check Lisp_Object types before doing
Chong Yidong <cyd@stupidchicken.com>
parents:
73152
diff
changeset
|
1843 && XINT (pos) >= 0 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1844 && XINT (pos) < SCHARS (string)) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1845 { |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1846 map = Fget_text_property (pos, Qlocal_map, string); |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1847 if (!NILP (map)) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1848 local_map = map; |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1849 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1850 map = Fget_text_property (pos, Qkeymap, string); |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1851 if (!NILP (map)) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1852 keymap = map; |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1853 } |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1854 } |
74574
3c809b430d91
(Flookup_key): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73350
diff
changeset
|
1855 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1856 } |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1857 |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1858 if (! NILP (keymap)) |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1859 { |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1860 value = Flookup_key (keymap, key, accept_default); |
42510
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
1861 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
|
1862 goto done; |
42510
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
1863 } |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
1864 |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1865 nmaps = current_minor_maps (0, &maps); |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1866 /* Note that all these maps are GCPRO'd |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1867 in the places where we found them. */ |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1868 |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1869 for (i = 0; i < nmaps; i++) |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1870 if (! NILP (maps[i])) |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1871 { |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1872 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
|
1873 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
|
1874 goto done; |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1875 } |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1876 |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1877 if (! NILP (local_map)) |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1878 { |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1879 value = Flookup_key (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
|
1880 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
|
1881 goto done; |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1882 } |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
1883 } |
465 | 1884 |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1885 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
|
1886 |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1887 done: |
72889
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1888 unbind_to (count, Qnil); |
25c755416160
* NEWS: explain new behavior and arguments of `key-binding' and
David Kastrup <dak@gnu.org>
parents:
72806
diff
changeset
|
1889 |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1890 UNGCPRO; |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1891 if (NILP (value) || INTEGERP (value)) |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1892 return Qnil; |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1893 |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1894 /* 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
|
1895 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
|
1896 |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
1897 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
|
1898 { |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1899 Lisp_Object value1; |
76887
a5751af0b8a7
(Fcommand_remapping): New optional argument.
Chong Yidong <cyd@stupidchicken.com>
parents:
76862
diff
changeset
|
1900 if (value1 = Fcommand_remapping (value, position, Qnil), !NILP (value1)) |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1901 value = value1; |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1902 } |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
1903 |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
1904 return value; |
250 | 1905 } |
1906 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1907 /* 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
|
1908 |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1909 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
|
1910 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
|
1911 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
|
1912 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
|
1913 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1914 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
|
1915 bindings; see the description of `lookup-key' for more details about this. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
1916 (Lisp_Object keys, Lisp_Object accept_default) |
250 | 1917 { |
1918 register Lisp_Object map; | |
1919 map = current_buffer->keymap; | |
485 | 1920 if (NILP (map)) |
250 | 1921 return Qnil; |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1922 return Flookup_key (map, keys, accept_default); |
250 | 1923 } |
1924 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1925 /* 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
|
1926 |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1927 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
|
1928 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
|
1929 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
|
1930 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
|
1931 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
|
1932 \(which see). |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1933 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1934 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
|
1935 bindings; see the description of `lookup-key' for more details about this. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
1936 (Lisp_Object keys, Lisp_Object accept_default) |
250 | 1937 { |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1938 return Flookup_key (current_global_map, keys, accept_default); |
250 | 1939 } |
1940 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1941 /* 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
|
1942 |
1871
00bee181f7ed
* keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
1943 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
|
1944 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
|
1945 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
|
1946 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
|
1947 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
|
1948 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
|
1949 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
|
1950 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
|
1951 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
|
1952 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1953 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
|
1954 bindings; see the description of `lookup-key' for more details about this. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
1955 (Lisp_Object key, Lisp_Object accept_default) |
465 | 1956 { |
1957 Lisp_Object *modes, *maps; | |
1958 int nmaps; | |
1959 Lisp_Object binding; | |
1960 int i, j; | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1961 struct gcpro gcpro1, gcpro2; |
465 | 1962 |
1963 nmaps = current_minor_maps (&modes, &maps); | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1964 /* Note that all these maps are GCPRO'd |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1965 in the places where we found them. */ |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1966 |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1967 binding = Qnil; |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1968 GCPRO2 (key, binding); |
465 | 1969 |
1970 for (i = j = 0; i < nmaps; i++) | |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1971 if (!NILP (maps[i]) |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1972 && !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
|
1973 && !INTEGERP (binding)) |
465 | 1974 { |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
1975 if (KEYMAPP (binding)) |
465 | 1976 maps[j++] = Fcons (modes[i], binding); |
1977 else if (j == 0) | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1978 RETURN_UNGCPRO (Fcons (Fcons (modes[i], binding), Qnil)); |
465 | 1979 } |
1980 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
1981 UNGCPRO; |
465 | 1982 return Flist (j, maps); |
1983 } | |
1984 | |
23968
4c423f69142b
(Fdefine_prefix_command): Accept a third argument NAME
Eli Zaretskii <eliz@gnu.org>
parents:
23953
diff
changeset
|
1985 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
|
1986 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
|
1987 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
|
1988 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
|
1989 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
|
1990 as a function. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
1991 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
|
1992 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
|
1993 This function returns COMMAND. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
1994 (Lisp_Object command, Lisp_Object mapvar, Lisp_Object name) |
250 | 1995 { |
1996 Lisp_Object map; | |
23968
4c423f69142b
(Fdefine_prefix_command): Accept a third argument NAME
Eli Zaretskii <eliz@gnu.org>
parents:
23953
diff
changeset
|
1997 map = Fmake_sparse_keymap (name); |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
1998 Ffset (command, map); |
485 | 1999 if (!NILP (mapvar)) |
250 | 2000 Fset (mapvar, map); |
2001 else | |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
2002 Fset (command, map); |
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
2003 return command; |
250 | 2004 } |
2005 | |
2006 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
|
2007 doc: /* Select KEYMAP as the global keymap. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
2008 (Lisp_Object keymap) |
250 | 2009 { |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
2010 keymap = get_keymap (keymap, 1, 1); |
250 | 2011 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
|
2012 |
250 | 2013 return Qnil; |
2014 } | |
2015 | |
2016 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
|
2017 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
|
2018 If KEYMAP is nil, that means no local keymap. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
2019 (Lisp_Object keymap) |
250 | 2020 { |
485 | 2021 if (!NILP (keymap)) |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
2022 keymap = get_keymap (keymap, 1, 1); |
250 | 2023 |
2024 current_buffer->keymap = keymap; | |
2025 | |
2026 return Qnil; | |
2027 } | |
2028 | |
2029 DEFUN ("current-local-map", Fcurrent_local_map, Scurrent_local_map, 0, 0, 0, | |
86808
3386f3b8a58f
(Fcurrent_local_map): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
86331
diff
changeset
|
2030 doc: /* Return current buffer's local keymap, or nil if it has none. |
3386f3b8a58f
(Fcurrent_local_map): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
86331
diff
changeset
|
2031 Normally the local keymap is set by the major mode with `use-local-map'. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
2032 (void) |
250 | 2033 { |
2034 return current_buffer->keymap; | |
2035 } | |
2036 | |
2037 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
|
2038 doc: /* Return the current global keymap. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
2039 (void) |
250 | 2040 { |
2041 return current_global_map; | |
2042 } | |
465 | 2043 |
2044 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
|
2045 doc: /* Return a list of keymaps for the minor modes of the current buffer. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
2046 (void) |
465 | 2047 { |
2048 Lisp_Object *maps; | |
2049 int nmaps = current_minor_maps (0, &maps); | |
2050 | |
2051 return Flist (nmaps, maps); | |
2052 } | |
250 | 2053 |
465 | 2054 /* Help functions for describing and documenting keymaps. */ |
2055 | |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2056 struct accessible_keymaps_data { |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2057 Lisp_Object maps, tail, thisseq; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2058 /* Does the current sequence end in the meta-prefix-char? */ |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2059 int is_metized; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2060 }; |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2061 |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2062 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2063 accessible_keymaps_1 (Lisp_Object key, Lisp_Object cmd, Lisp_Object args, void *data) |
109131
18f8e88d3829
Fix comments and whitespace.
Juanma Barranquero <lekktu@gmail.com>
parents:
109126
diff
changeset
|
2064 /* Use void* data to be compatible with map_keymap_function_t. */ |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2065 { |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2066 struct accessible_keymaps_data *d = data; /* Cast! */ |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2067 Lisp_Object maps = d->maps; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2068 Lisp_Object tail = d->tail; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2069 Lisp_Object thisseq = d->thisseq; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2070 int is_metized = d->is_metized && INTEGERP (key); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2071 Lisp_Object tem; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2072 |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2073 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
|
2074 if (NILP (cmd)) |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2075 return; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2076 |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2077 /* Look for and break cycles. */ |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2078 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
|
2079 { |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2080 Lisp_Object prefix = XCAR (tem); |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2081 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
|
2082 if (lim <= XINT (Flength (thisseq))) |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2083 { /* 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
|
2084 int i = 0; |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2085 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
|
2086 Faref (thisseq, make_number (i)))) |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2087 i++; |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2088 if (i >= lim) |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2089 /* `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
|
2090 return; |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2091 } |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2092 /* 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
|
2093 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
|
2094 looking. */ |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2095 maps = XCDR (Fmemq (tem, maps)); |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2096 } |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2097 |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2098 /* 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
|
2099 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
|
2100 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
|
2101 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
|
2102 keymap table. */ |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2103 if (is_metized) |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2104 { |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2105 int meta_bit = meta_modifier; |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2106 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
|
2107 tem = Fcopy_sequence (thisseq); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2108 |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2109 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
|
2110 |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2111 /* 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
|
2112 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
|
2113 after this one. */ |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2114 XSETCDR (tail, |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2115 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
|
2116 } |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2117 else |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2118 { |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2119 tem = append_key (thisseq, key); |
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2120 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
|
2121 } |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2122 } |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2123 |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2124 /* This function cannot GC. */ |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2125 |
250 | 2126 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
|
2127 1, 2, 0, |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
2128 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
|
2129 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
|
2130 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
|
2131 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
|
2132 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
|
2133 then the value includes only maps for prefixes that start with PREFIX. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
2134 (Lisp_Object keymap, Lisp_Object prefix) |
250 | 2135 { |
50190
615d7388f725
(Faccessible_keymaps): Remove unused var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50189
diff
changeset
|
2136 Lisp_Object maps, tail; |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2137 int prefixlen = XINT (Flength (prefix)); |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
2138 |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2139 /* 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
|
2140 |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
2141 if (!NILP (prefix)) |
8431
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
2142 { |
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
2143 /* 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
|
2144 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
|
2145 Lisp_Object tem; |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
2146 tem = Flookup_key (keymap, prefix, Qt); |
8473
c285c3b0ea54
(Faccessible_keymaps): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
8464
diff
changeset
|
2147 /* 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
|
2148 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
|
2149 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
|
2150 tem = get_keymap (tem, 0, 0); |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2151 /* If the keymap is autoloaded `tem' is not a cons-cell, but we still |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2152 want to return it. */ |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2153 if (!NILP (tem)) |
17510
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
2154 { |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
2155 /* 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
|
2156 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
|
2157 if (STRINGP (prefix)) |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
2158 { |
20624
9ac0b485cf60
(describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents:
20576
diff
changeset
|
2159 int i, i_byte, c; |
17510
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
2160 Lisp_Object copy; |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
2161 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
2162 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
|
2163 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
|
2164 { |
20624
9ac0b485cf60
(describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents:
20576
diff
changeset
|
2165 int i_before = i; |
29013
b9565b4bcdf8
(Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents:
26864
diff
changeset
|
2166 |
b9565b4bcdf8
(Fsingle_key_description): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents:
26864
diff
changeset
|
2167 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
|
2168 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
|
2169 c ^= 0200 | meta_modifier; |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2170 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
|
2171 } |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
2172 prefix = copy; |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
2173 } |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
2174 maps = Fcons (Fcons (prefix, tem), Qnil); |
2da99276d613
(Faccessible_keymaps): Convert PREFIX to a vector
Richard M. Stallman <rms@gnu.org>
parents:
17327
diff
changeset
|
2175 } |
8431
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
2176 else |
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
2177 return Qnil; |
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
2178 } |
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
2179 else |
b4138573c00f
(Faccessible_keymaps): Use PREFIX to set loop starting
Richard M. Stallman <rms@gnu.org>
parents:
7998
diff
changeset
|
2180 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
|
2181 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
|
2182 Qnil); |
250 | 2183 |
2184 /* For each map in the list maps, | |
2185 look at any other maps it points to, | |
2186 and stick them at the end if they are not already in the list. | |
2187 | |
2188 This is a breadth-first traversal, where tail is the queue of | |
2189 nodes, and maps accumulates a list of all nodes visited. */ | |
2190 | |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
2191 for (tail = maps; CONSP (tail); tail = XCDR (tail)) |
250 | 2192 { |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2193 struct accessible_keymaps_data data; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2194 register Lisp_Object thismap = Fcdr (XCAR (tail)); |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
2195 Lisp_Object last; |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2196 |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2197 data.thisseq = Fcar (XCAR (tail)); |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2198 data.maps = maps; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2199 data.tail = tail; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2200 last = make_number (XINT (Flength (data.thisseq)) - 1); |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
2201 /* Does the current sequence end in the meta-prefix-char? */ |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2202 data.is_metized = (XINT (last) >= 0 |
17264
fad065a280dc
(Faccessible_keymaps): When metizing, convert a
Richard M. Stallman <rms@gnu.org>
parents:
17189
diff
changeset
|
2203 /* 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
|
2204 && XINT (last) >= prefixlen |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2205 && EQ (Faref (data.thisseq, last), meta_prefix_char)); |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2206 |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2207 /* Since we can't run lisp code, we can't scan autoloaded maps. */ |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2208 if (CONSP (thismap)) |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2209 map_keymap (thismap, accessible_keymaps_1, Qnil, &data, 0); |
250 | 2210 } |
50189
c7ce12a3b9c2
(accessible_keymaps_1): Break cycles but without preventing
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50141
diff
changeset
|
2211 return maps; |
250 | 2212 } |
2213 Lisp_Object Qsingle_key_description, Qkey_description; | |
2214 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2215 /* This function cannot GC. */ |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2216 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2217 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
|
2218 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
|
2219 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
|
2220 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
|
2221 spaces are put between sequence elements, etc. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
2222 (Lisp_Object keys, Lisp_Object prefix) |
250 | 2223 { |
31829
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31496
diff
changeset
|
2224 int len = 0; |
20624
9ac0b485cf60
(describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents:
20576
diff
changeset
|
2225 int i, i_byte; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2226 Lisp_Object *args; |
55006
5429150a04f3
(Fkey_description): Fix the usual int/Lisp_Object mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54925
diff
changeset
|
2227 int size = XINT (Flength (keys)); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2228 Lisp_Object list; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2229 Lisp_Object sep = build_string (" "); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2230 Lisp_Object key; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2231 int add_meta = 0; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2232 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2233 if (!NILP (prefix)) |
55006
5429150a04f3
(Fkey_description): Fix the usual int/Lisp_Object mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54925
diff
changeset
|
2234 size += XINT (Flength (prefix)); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2235 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2236 /* 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
|
2237 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
|
2238 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2239 /* In effect, this computes |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2240 (mapconcat 'single-key-description keys " ") |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2241 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
|
2242 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2243 next_list: |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2244 if (!NILP (prefix)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2245 list = prefix, prefix = Qnil; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2246 else if (!NILP (keys)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2247 list = keys, keys = Qnil; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2248 else |
2059 | 2249 { |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2250 if (add_meta) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2251 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2252 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
|
2253 len += 2; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2254 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2255 else if (len == 0) |
81281
323c37a99c44
(Fkey_description): Use empty_unibyte_string.
Juanma Barranquero <lekktu@gmail.com>
parents:
80871
diff
changeset
|
2256 return empty_unibyte_string; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2257 return Fconcat (len - 1, args); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2258 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2259 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2260 if (STRINGP (list)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2261 size = SCHARS (list); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2262 else if (VECTORP (list)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2263 size = XVECTOR (list)->size; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2264 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
|
2265 size = XINT (Flength (list)); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2266 else |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2267 wrong_type_argument (Qarrayp, list); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2268 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2269 i = i_byte = 0; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2270 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2271 while (i < size) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2272 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2273 if (STRINGP (list)) |
2059 | 2274 { |
20624
9ac0b485cf60
(describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents:
20576
diff
changeset
|
2275 int c; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2276 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
|
2277 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
|
2278 c ^= 0200 | meta_modifier; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2279 XSETFASTINT (key, c); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2280 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2281 else if (VECTORP (list)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2282 { |
91670
a06d59678f5a
(Fkey_description): Move side effect outside of macro call.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
2283 key = AREF (list, i); i++; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2284 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2285 else |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2286 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2287 key = XCAR (list); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2288 list = XCDR (list); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2289 i++; |
2059 | 2290 } |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2291 |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2292 if (add_meta) |
23953
c8cdb4e487cb
(Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents:
23776
diff
changeset
|
2293 { |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2294 if (!INTEGERP (key) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2295 || EQ (key, meta_prefix_char) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2296 || (XINT (key) & meta_modifier)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2297 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2298 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
|
2299 args[len++] = sep; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2300 if (EQ (key, meta_prefix_char)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2301 continue; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2302 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2303 else |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2304 XSETINT (key, (XINT (key) | meta_modifier) & ~0x80); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2305 add_meta = 0; |
23953
c8cdb4e487cb
(Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents:
23776
diff
changeset
|
2306 } |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2307 else if (EQ (key, meta_prefix_char)) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2308 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2309 add_meta = 1; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2310 continue; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2311 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2312 args[len++] = Fsingle_key_description (key, Qnil); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2313 args[len++] = sep; |
23953
c8cdb4e487cb
(Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents:
23776
diff
changeset
|
2314 } |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2315 goto next_list; |
250 | 2316 } |
2317 | |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
2318 |
250 | 2319 char * |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2320 push_key_description (register unsigned int c, register char *p, int force_multibyte) |
250 | 2321 { |
30780
b4fcea50ee82
(push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents:
30609
diff
changeset
|
2322 unsigned c2; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
2323 |
2343
ddb30eaf2f56
(push_key_description): Ignore bits above meta_modifier.
Richard M. Stallman <rms@gnu.org>
parents:
2093
diff
changeset
|
2324 /* 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
|
2325 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
|
2326 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
|
2327 | 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
|
2328 |
90390
9b61abfe926b
(push_key_description): Fix synching with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90389
diff
changeset
|
2329 if (! CHARACTERP (make_number (c2))) |
70535
8003a30510ee
(push_key_description): Handle invalid character key.
Kenichi Handa <handa@m17n.org>
parents:
70293
diff
changeset
|
2330 { |
8003a30510ee
(push_key_description): Handle invalid character key.
Kenichi Handa <handa@m17n.org>
parents:
70293
diff
changeset
|
2331 /* KEY_DESCRIPTION_SIZE is large enough for this. */ |
8003a30510ee
(push_key_description): Handle invalid character key.
Kenichi Handa <handa@m17n.org>
parents:
70293
diff
changeset
|
2332 p += sprintf (p, "[%d]", c); |
8003a30510ee
(push_key_description): Handle invalid character key.
Kenichi Handa <handa@m17n.org>
parents:
70293
diff
changeset
|
2333 return p; |
8003a30510ee
(push_key_description): Handle invalid character key.
Kenichi Handa <handa@m17n.org>
parents:
70293
diff
changeset
|
2334 } |
8003a30510ee
(push_key_description): Handle invalid character key.
Kenichi Handa <handa@m17n.org>
parents:
70293
diff
changeset
|
2335 |
2059 | 2336 if (c & alt_modifier) |
2337 { | |
2338 *p++ = 'A'; | |
2339 *p++ = '-'; | |
2340 c -= alt_modifier; | |
2341 } | |
30780
b4fcea50ee82
(push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents:
30609
diff
changeset
|
2342 if ((c & ctrl_modifier) != 0 |
b4fcea50ee82
(push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents:
30609
diff
changeset
|
2343 || (c2 < ' ' && c2 != 27 && c2 != '\t' && c2 != Ctl ('M'))) |
2059 | 2344 { |
2345 *p++ = 'C'; | |
2346 *p++ = '-'; | |
30780
b4fcea50ee82
(push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents:
30609
diff
changeset
|
2347 c &= ~ctrl_modifier; |
2059 | 2348 } |
2349 if (c & hyper_modifier) | |
2350 { | |
2351 *p++ = 'H'; | |
2352 *p++ = '-'; | |
2353 c -= hyper_modifier; | |
2354 } | |
2355 if (c & meta_modifier) | |
250 | 2356 { |
2357 *p++ = 'M'; | |
2358 *p++ = '-'; | |
2059 | 2359 c -= meta_modifier; |
2360 } | |
2361 if (c & shift_modifier) | |
2362 { | |
2363 *p++ = 'S'; | |
2364 *p++ = '-'; | |
2365 c -= shift_modifier; | |
2366 } | |
2367 if (c & super_modifier) | |
2368 { | |
2369 *p++ = 's'; | |
2370 *p++ = '-'; | |
2371 c -= super_modifier; | |
250 | 2372 } |
2373 if (c < 040) | |
2374 { | |
2375 if (c == 033) | |
2376 { | |
2377 *p++ = 'E'; | |
2378 *p++ = 'S'; | |
2379 *p++ = 'C'; | |
2380 } | |
2059 | 2381 else if (c == '\t') |
250 | 2382 { |
2383 *p++ = 'T'; | |
2384 *p++ = 'A'; | |
2385 *p++ = 'B'; | |
2386 } | |
16875
d9956cf6699b
(push_key_description): Print C-j, not TAB.
Richard M. Stallman <rms@gnu.org>
parents:
16465
diff
changeset
|
2387 else if (c == Ctl ('M')) |
250 | 2388 { |
2389 *p++ = 'R'; | |
2390 *p++ = 'E'; | |
2391 *p++ = 'T'; | |
2392 } | |
2393 else | |
2394 { | |
30780
b4fcea50ee82
(push_key_description): If C without modifiers is < 32,
Gerd Moellmann <gerd@gnu.org>
parents:
30609
diff
changeset
|
2395 /* `C-' already added above. */ |
250 | 2396 if (c > 0 && c <= Ctl ('Z')) |
2397 *p++ = c + 0140; | |
2398 else | |
2399 *p++ = c + 0100; | |
2400 } | |
2401 } | |
2402 else if (c == 0177) | |
2403 { | |
2404 *p++ = 'D'; | |
2405 *p++ = 'E'; | |
2406 *p++ = 'L'; | |
2407 } | |
2408 else if (c == ' ') | |
24394
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2409 { |
250 | 2410 *p++ = 'S'; |
2411 *p++ = 'P'; | |
2412 *p++ = 'C'; | |
2413 } | |
24396
340189fd508f
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
24394
diff
changeset
|
2414 else if (c < 128 |
340189fd508f
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
24394
diff
changeset
|
2415 || (NILP (current_buffer->enable_multibyte_characters) |
34906
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2416 && SINGLE_BYTE_CHAR_P (c) |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2417 && !force_multibyte)) |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2418 { |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2419 *p++ = c; |
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2420 } |
250 | 2421 else |
2059 | 2422 { |
90390
9b61abfe926b
(push_key_description): Fix synching with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90389
diff
changeset
|
2423 /* Now we are sure that C is a valid character code. */ |
89175
adc5b06c6722
(push_key_description): Pay attention to force_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
88932
diff
changeset
|
2424 if (NILP (current_buffer->enable_multibyte_characters) |
adc5b06c6722
(push_key_description): Pay attention to force_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
88932
diff
changeset
|
2425 && ! force_multibyte) |
88380 | 2426 *p++ = multibyte_char_to_unibyte (c, Qnil); |
24394
8159c8cb33cc
(push_key_description): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
23968
diff
changeset
|
2427 else |
88380 | 2428 p += CHAR_STRING (c, (unsigned char *) p); |
2059 | 2429 } |
250 | 2430 |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
2431 return p; |
250 | 2432 } |
2433 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2434 /* This function cannot GC. */ |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2435 |
30559
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2436 DEFUN ("single-key-description", Fsingle_key_description, |
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2437 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
|
2438 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
|
2439 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
|
2440 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
|
2441 around function keys and event symbols. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
2442 (Lisp_Object key, Lisp_Object no_angles) |
250 | 2443 { |
23953
c8cdb4e487cb
(Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents:
23776
diff
changeset
|
2444 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
|
2445 key = Fevent_convert_list (key); |
c8cdb4e487cb
(Fsingle_key_description): Handle (control ?x) etc.
Richard M. Stallman <rms@gnu.org>
parents:
23776
diff
changeset
|
2446 |
1315
884c3d7e7172
* keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents:
1264
diff
changeset
|
2447 key = EVENT_HEAD (key); |
517 | 2448 |
10008
b83150a8020d
(Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9973
diff
changeset
|
2449 if (INTEGERP (key)) /* Normal character */ |
250 | 2450 { |
88380 | 2451 char tem[KEY_DESCRIPTION_SIZE]; |
2452 | |
2453 *push_key_description (XUINT (key), tem, 1) = 0; | |
2454 return build_string (tem); | |
250 | 2455 } |
10008
b83150a8020d
(Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9973
diff
changeset
|
2456 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
|
2457 { |
30559
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2458 if (NILP (no_angles)) |
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2459 { |
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2460 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
|
2461 = (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
|
2462 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
|
2463 return build_string (buffer); |
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2464 } |
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2465 else |
16a291eedbd8
(Fsingle_key_description): Add parameter NO_ANGLES.
Gerd Moellmann <gerd@gnu.org>
parents:
30134
diff
changeset
|
2466 return Fsymbol_name (key); |
29651
31099bb76b6e
(Fsingle_key_description): Enclose function key and
Gerd Moellmann <gerd@gnu.org>
parents:
29282
diff
changeset
|
2467 } |
10008
b83150a8020d
(Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9973
diff
changeset
|
2468 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
|
2469 return Fcopy_sequence (key); |
b83150a8020d
(Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9973
diff
changeset
|
2470 else |
b83150a8020d
(Fsingle_key_description): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9973
diff
changeset
|
2471 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
|
2472 return Qnil; |
250 | 2473 } |
2474 | |
2475 char * | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2476 push_text_char_description (register unsigned int c, register char *p) |
250 | 2477 { |
2478 if (c >= 0200) | |
2479 { | |
2480 *p++ = 'M'; | |
2481 *p++ = '-'; | |
2482 c -= 0200; | |
2483 } | |
2484 if (c < 040) | |
2485 { | |
2486 *p++ = '^'; | |
2487 *p++ = c + 64; /* 'A' - 1 */ | |
2488 } | |
2489 else if (c == 0177) | |
2490 { | |
2491 *p++ = '^'; | |
2492 *p++ = '?'; | |
2493 } | |
2494 else | |
2495 *p++ = c; | |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
2496 return p; |
250 | 2497 } |
2498 | |
7998
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2499 /* This function cannot GC. */ |
d4b5f4dd9c51
(Flookup_key): Add gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
7894
diff
changeset
|
2500 |
250 | 2501 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
|
2502 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
|
2503 Control characters turn into "^char", etc. This differs from |
dd79816933ec
(Ftext_char_description): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55913
diff
changeset
|
2504 `single-key-description' which turns them into "C-char". |
dd79816933ec
(Ftext_char_description): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55913
diff
changeset
|
2505 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
|
2506 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
|
2507 See Info node `(elisp)Describing Characters' for examples. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
2508 (Lisp_Object character) |
250 | 2509 { |
26864
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2510 /* 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
|
2511 unsigned char str[6]; |
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2512 int c; |
250 | 2513 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40625
diff
changeset
|
2514 CHECK_NUMBER (character); |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
2515 |
26864
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2516 c = XINT (character); |
89212
c5637be14c7f
(Ftext_char_description): Check C by ASCII_CHAR_P, not
Kenichi Handa <handa@m17n.org>
parents:
89175
diff
changeset
|
2517 if (!ASCII_CHAR_P (c)) |
17036 | 2518 { |
26864
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2519 int len = CHAR_STRING (c, str); |
17036 | 2520 |
20624
9ac0b485cf60
(describe_vector): Unconditionally handle multibyte chars.
Richard M. Stallman <rms@gnu.org>
parents:
20576
diff
changeset
|
2521 return make_multibyte_string (str, 1, len); |
17036 | 2522 } |
2523 | |
26864
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2524 *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
|
2525 |
b89eb8bbaff1
(push_key_description): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26481
diff
changeset
|
2526 return build_string (str); |
250 | 2527 } |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2528 |
96747
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2529 static int where_is_preferred_modifier; |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2530 |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2531 /* Return 0 if SEQ uses non-preferred modifiers or non-char events. |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2532 Else, return 2 if SEQ uses the where_is_preferred_modifier, |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2533 and 1 otherwise. */ |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2534 static int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2535 preferred_sequence_p (Lisp_Object seq) |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2536 { |
9312
dfaf1d41e53d
(synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents:
9273
diff
changeset
|
2537 int i; |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2538 int len = XINT (Flength (seq)); |
96747
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2539 int result = 1; |
6008
d3ccce72be00
(get_keyelt): Discard keyboard equivalents
Richard M. Stallman <rms@gnu.org>
parents:
5785
diff
changeset
|
2540 |
9312
dfaf1d41e53d
(synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents:
9273
diff
changeset
|
2541 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
|
2542 { |
9312
dfaf1d41e53d
(synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents:
9273
diff
changeset
|
2543 Lisp_Object ii, elt; |
6008
d3ccce72be00
(get_keyelt): Discard keyboard equivalents
Richard M. Stallman <rms@gnu.org>
parents:
5785
diff
changeset
|
2544 |
9312
dfaf1d41e53d
(synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents:
9273
diff
changeset
|
2545 XSETFASTINT (ii, i); |
dfaf1d41e53d
(synkey, access_keymap, store_in_keymap, Faccessible_keymaps,
Karl Heuer <kwzh@gnu.org>
parents:
9273
diff
changeset
|
2546 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
|
2547 |
96747
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2548 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
|
2549 return 0; |
96747
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2550 else |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2551 { |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2552 int modifiers = XUINT (elt) & (CHAR_MODIFIER_MASK & ~CHAR_META); |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2553 if (modifiers == where_is_preferred_modifier) |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2554 result = 2; |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2555 else if (modifiers) |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2556 return 0; |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2557 } |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2558 } |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2559 |
96747
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2560 return result; |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2561 } |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2562 |
250 | 2563 |
465 | 2564 /* where-is - finding a command in a set of keymaps. */ |
2565 | |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
2566 static void where_is_internal_1 (Lisp_Object key, Lisp_Object binding, |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
108858
diff
changeset
|
2567 Lisp_Object args, void *data); |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2568 |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2569 /* Like Flookup_key, but uses a list of keymaps SHADOW instead of a single map. |
106972
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2570 Returns the first non-nil binding found in any of those maps. |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2571 If REMAP is true, pass the result of the lookup through command |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2572 remapping before returning it. */ |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2573 |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2574 static Lisp_Object |
106972
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2575 shadow_lookup (Lisp_Object shadow, Lisp_Object key, Lisp_Object flag, |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2576 int remap) |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2577 { |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2578 Lisp_Object tail, value; |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2579 |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2580 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
|
2581 { |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2582 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
|
2583 if (NATNUMP (value)) |
3f4ee1926eb1
(shadow_lookup): If Flookup_key returns a number,
Juri Linkov <juri@jurta.org>
parents:
65456
diff
changeset
|
2584 { |
67070
c83903b9e676
(shadow_lookup): Use make_number to pass a number to Fsubstring.
Ken Raeburn <raeburn@raeburn.org>
parents:
66757
diff
changeset
|
2585 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
|
2586 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
|
2587 if (!NILP (value)) |
3f4ee1926eb1
(shadow_lookup): If Flookup_key returns a number,
Juri Linkov <juri@jurta.org>
parents:
65456
diff
changeset
|
2588 return Qnil; |
3f4ee1926eb1
(shadow_lookup): If Flookup_key returns a number,
Juri Linkov <juri@jurta.org>
parents:
65456
diff
changeset
|
2589 } |
3f4ee1926eb1
(shadow_lookup): If Flookup_key returns a number,
Juri Linkov <juri@jurta.org>
parents:
65456
diff
changeset
|
2590 else if (!NILP (value)) |
106972
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2591 { |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2592 Lisp_Object remapping; |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2593 if (remap && SYMBOLP (value) |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2594 && (remapping = Fcommand_remapping (value, Qnil, shadow), |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2595 !NILP (remapping))) |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2596 return remapping; |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2597 else |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2598 return value; |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2599 } |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2600 } |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2601 return Qnil; |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2602 } |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2603 |
53808
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
2604 static Lisp_Object Vmouse_events; |
50141
3770fda038d0
(Vmenu_events): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49912
diff
changeset
|
2605 |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2606 struct where_is_internal_data { |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2607 Lisp_Object definition, this, last; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2608 int last_is_meta, noindirect; |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2609 Lisp_Object sequences; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2610 }; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2611 |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2612 /* This function can't GC, AFAIK. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2613 /* Return the list of bindings found. This list is ordered "longest |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2614 to shortest". It may include bindings that are actually shadowed |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2615 by others, as well as duplicate bindings and remapping bindings. |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2616 The list returned is potentially shared with where_is_cache, so |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2617 be careful not to modify it via side-effects. */ |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2618 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2619 static Lisp_Object |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2620 where_is_internal (Lisp_Object definition, Lisp_Object keymaps, |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2621 int noindirect, int nomenus) |
250 | 2622 { |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2623 Lisp_Object maps = Qnil; |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2624 Lisp_Object found; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2625 struct where_is_internal_data data; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2626 |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2627 /* Only important use of caching is for the menubar |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2628 (i.e. where-is-internal called with (def nil t nil nil)). */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2629 if (nomenus && !noindirect) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2630 { |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2631 /* Check heuristic-consistency of the cache. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2632 if (NILP (Fequal (keymaps, where_is_cache_keymaps))) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2633 where_is_cache = Qnil; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2634 |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2635 if (NILP (where_is_cache)) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2636 { |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2637 /* We need to create the cache. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2638 Lisp_Object args[2]; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2639 where_is_cache = Fmake_hash_table (0, args); |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2640 where_is_cache_keymaps = Qt; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2641 } |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2642 else |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2643 /* We can reuse the cache. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2644 return Fgethash (definition, where_is_cache, Qnil); |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2645 } |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2646 else |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2647 /* Kill the cache so that where_is_internal_1 doesn't think |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2648 we're filling it up. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2649 where_is_cache = Qnil; |
250 | 2650 |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2651 found = keymaps; |
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2652 while (CONSP (found)) |
29282 | 2653 { |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
2654 maps = |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
2655 nconc2 (maps, |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
2656 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
|
2657 found = XCDR (found); |
29282 | 2658 } |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
2659 |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2660 data.sequences = Qnil; |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85106
diff
changeset
|
2661 for (; CONSP (maps); maps = XCDR (maps)) |
250 | 2662 { |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
2663 /* 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
|
2664 register Lisp_Object this, map, tem; |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
2665 |
250 | 2666 /* In order to fold [META-PREFIX-CHAR CHAR] sequences into |
2667 [M-CHAR] sequences, check if last character of the sequence | |
2668 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
|
2669 Lisp_Object last; |
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
2670 int last_is_meta; |
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
2671 |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85106
diff
changeset
|
2672 this = Fcar (XCAR (maps)); |
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85106
diff
changeset
|
2673 map = Fcdr (XCAR (maps)); |
6502
18dfda644bc0
(access_keymap, store_in_keymap, Fcopy_keymap, Fdefine_key,
Karl Heuer <kwzh@gnu.org>
parents:
6475
diff
changeset
|
2674 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
|
2675 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
|
2676 && EQ (Faref (this, last), meta_prefix_char)); |
250 | 2677 |
96747
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2678 /* if (nomenus && !preferred_sequence_p (this)) */ |
36405
7fe1b8d8fc44
*** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36373
diff
changeset
|
2679 if (nomenus && XINT (last) >= 0 |
50141
3770fda038d0
(Vmenu_events): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49912
diff
changeset
|
2680 && 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
|
2681 && !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
|
2682 /* 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
|
2683 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
|
2684 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
|
2685 continue; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
2686 |
1236
5e8c234e5f03
* keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents:
1209
diff
changeset
|
2687 QUIT; |
5e8c234e5f03
* keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents:
1209
diff
changeset
|
2688 |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2689 data.definition = definition; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2690 data.noindirect = noindirect; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2691 data.this = this; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2692 data.last = last; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2693 data.last_is_meta = last_is_meta; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2694 |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2695 if (CONSP (map)) |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2696 map_keymap (map, where_is_internal_1, Qnil, &data, 0); |
250 | 2697 } |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
2698 |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2699 if (nomenus && !noindirect) |
104936
4556ab401b02
(where_is_internal): Don't erroneously return nil right after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104925
diff
changeset
|
2700 { /* Remember for which keymaps this cache was built. |
4556ab401b02
(where_is_internal): Don't erroneously return nil right after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104925
diff
changeset
|
2701 We do it here (late) because we want to keep where_is_cache_keymaps |
4556ab401b02
(where_is_internal): Don't erroneously return nil right after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104925
diff
changeset
|
2702 set to t while the cache isn't fully filled. */ |
4556ab401b02
(where_is_internal): Don't erroneously return nil right after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104925
diff
changeset
|
2703 where_is_cache_keymaps = keymaps; |
4556ab401b02
(where_is_internal): Don't erroneously return nil right after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104925
diff
changeset
|
2704 /* During cache-filling, data.sequences is not filled by |
4556ab401b02
(where_is_internal): Don't erroneously return nil right after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104925
diff
changeset
|
2705 where_is_internal_1. */ |
4556ab401b02
(where_is_internal): Don't erroneously return nil right after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104925
diff
changeset
|
2706 return Fgethash (definition, where_is_cache, Qnil); |
4556ab401b02
(where_is_internal): Don't erroneously return nil right after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104925
diff
changeset
|
2707 } |
4556ab401b02
(where_is_internal): Don't erroneously return nil right after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104925
diff
changeset
|
2708 else |
4556ab401b02
(where_is_internal): Don't erroneously return nil right after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104925
diff
changeset
|
2709 return data.sequences; |
250 | 2710 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2711 |
96747
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2712 static Lisp_Object Vwhere_is_preferred_modifier; |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2713 |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2714 /* This function can GC if Flookup_key autoloads any keymaps. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2715 |
43152
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2716 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
|
2717 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
|
2718 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
|
2719 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
|
2720 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
|
2721 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
2722 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
|
2723 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
|
2724 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
|
2725 no matter what it is. |
96747
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2726 If FIRSTONLY has another non-nil value, prefer bindings |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2727 that use the modifier key specified in `where-is-preferred-modifier' |
56635
a8be0bc345d2
(Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
56618
diff
changeset
|
2728 \(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
|
2729 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
2730 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
|
2731 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
|
2732 indirect definition itself. |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2733 |
0029b0259426
(Fdefine_key): Allow symbol as KEY argument for
Kim F. Storm <storm@cua.dk>
parents:
42510
diff
changeset
|
2734 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
|
2735 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
|
2736 remapped command in the returned list. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
2737 (Lisp_Object definition, Lisp_Object keymap, Lisp_Object firstonly, Lisp_Object noindirect, Lisp_Object no_remap) |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2738 { |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2739 /* The keymaps in which to search. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2740 Lisp_Object keymaps; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2741 /* Potentially relevant bindings in "shortest to longest" order. */ |
104919
ad7987e70109
(Fwhere_is_internal): Last minute typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104918
diff
changeset
|
2742 Lisp_Object sequences = Qnil; |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2743 /* Actually relevant bindings. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2744 Lisp_Object found = Qnil; |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2745 /* 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
|
2746 int nomenus = !NILP (firstonly) && !EQ (firstonly, Qnon_ascii); |
108678
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2747 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6; |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2748 /* List of sequences found via remapping. Keep them in a separate |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2749 variable, so as to push them later, since we prefer |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2750 non-remapped binding. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2751 Lisp_Object remapped_sequences = Qnil; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2752 /* Whether or not we're handling remapped sequences. This is needed |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2753 because remapping is not done recursively by Fcommand_remapping: you |
108678
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2754 can't remap a remapped command. */ |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2755 int remapped = 0; |
108678
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2756 Lisp_Object tem = Qnil; |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2757 |
96747
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2758 /* Refresh the C version of the modifier preference. */ |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2759 where_is_preferred_modifier |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2760 = parse_solitary_modifier (Vwhere_is_preferred_modifier); |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
2761 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2762 /* Find the relevant keymaps. */ |
35258
f585b46c055a
Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents:
34906
diff
changeset
|
2763 if (CONSP (keymap) && KEYMAPP (XCAR (keymap))) |
f585b46c055a
Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents:
34906
diff
changeset
|
2764 keymaps = keymap; |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2765 else if (!NILP (keymap)) |
35258
f585b46c055a
Call get_local_map with new argument list.
Gerd Moellmann <gerd@gnu.org>
parents:
34906
diff
changeset
|
2766 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
|
2767 else |
81609
7e640eac2dcb
* keymaps.texi (Active Keymaps): Document new POSITION argument of
David Kastrup <dak@gnu.org>
parents:
81281
diff
changeset
|
2768 keymaps = Fcurrent_active_maps (Qnil, Qnil); |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2769 |
108678
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2770 GCPRO6 (definition, keymaps, found, sequences, remapped_sequences, tem); |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2771 |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2772 tem = Fcommand_remapping (definition, Qnil, keymaps); |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2773 /* If `definition' is remapped to tem', then OT1H no key will run |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2774 that command (since they will run `tem' instead), so we should |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2775 return nil; but OTOH all keys bound to `definition' (or to `tem') |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2776 will run the same command. |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2777 So for menu-shortcut purposes, we want to find all the keys bound (maybe |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2778 via remapping) to `tem'. But for the purpose of finding the keys that |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2779 run `definition', then we'd want to just return nil. |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2780 We choose to make it work right for menu-shortcuts, since it's the most |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2781 common use. |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2782 Known bugs: if you remap switch-to-buffer to toto, C-h f switch-to-buffer |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2783 will tell you that switch-to-buffer is bound to C-x b even though C-x b |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2784 will run toto instead. And if `toto' is itself remapped to forward-char, |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2785 then C-h f toto will tell you that it's bound to C-f even though C-f does |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2786 not run toto and it won't tell you that C-x b does run toto. */ |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2787 if (NILP (no_remap) && !NILP (tem)) |
46728260f484
* src/keymap.c (Fwhere_is_internal): Fix handling of remapping (in thread
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107332
diff
changeset
|
2788 definition = tem; |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2789 |
104922
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
2790 if (SYMBOLP (definition) |
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
2791 && !NILP (firstonly) |
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
2792 && !NILP (tem = Fget (definition, QCadvertised_binding))) |
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
2793 { |
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
2794 /* We have a list of advertized bindings. */ |
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
2795 while (CONSP (tem)) |
106972
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2796 if (EQ (shadow_lookup (keymaps, XCAR (tem), Qnil, 0), definition)) |
104922
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
2797 return XCAR (tem); |
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
2798 else |
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
2799 tem = XCDR (tem); |
106972
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2800 if (EQ (shadow_lookup (keymaps, tem, Qnil, 0), definition)) |
104922
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
2801 return tem; |
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
2802 } |
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
2803 |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2804 sequences = Freverse (where_is_internal (definition, keymaps, |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2805 !NILP (noindirect), nomenus)); |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2806 |
106972
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2807 while (CONSP (sequences) |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2808 /* If we're at the end of the `sequences' list and we haven't |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2809 considered remapped sequences yet, copy them over and |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2810 process them. */ |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2811 || (!remapped && (sequences = remapped_sequences, |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2812 remapped = 1), |
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2813 CONSP (sequences))) |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2814 { |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2815 Lisp_Object sequence, function; |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
2816 |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2817 sequence = XCAR (sequences); |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2818 sequences = XCDR (sequences); |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2819 |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2820 /* Verify that this key binding is not shadowed by another |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2821 binding for the same key, before we say it exists. |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2822 |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2823 Mechanism: look for local definition of this key and if |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2824 it is defined and does not match what we found then |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2825 ignore this key. |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2826 |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2827 Either nil or number as value from Flookup_key |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2828 means undefined. */ |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
2829 if (NILP (Fequal (shadow_lookup (keymaps, sequence, Qnil, remapped), |
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
2830 definition))) |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2831 continue; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2832 |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2833 /* If the current sequence is a command remapping with |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2834 format [remap COMMAND], find the key sequences |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2835 which run COMMAND, and use those sequences instead. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2836 if (NILP (no_remap) && !remapped |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2837 && VECTORP (sequence) && ASIZE (sequence) == 2 |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2838 && EQ (AREF (sequence, 0), Qremap) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2839 && (function = AREF (sequence, 1), SYMBOLP (function))) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2840 { |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2841 Lisp_Object seqs = where_is_internal (function, keymaps, |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2842 !NILP (noindirect), nomenus); |
104971
32f634736979
(Fwhere_is_internal): Use nconc2.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104936
diff
changeset
|
2843 remapped_sequences = nconc2 (Freverse (seqs), remapped_sequences); |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2844 continue; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2845 } |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2846 |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2847 /* Don't annoy user with strings from a menu such as the |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2848 entries from the "Edit => Paste from Kill Menu". |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2849 Change them all to "(any string)", so that there |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2850 seems to be only one menu item to report. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2851 if (! NILP (sequence)) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2852 { |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2853 Lisp_Object tem; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2854 tem = Faref (sequence, make_number (ASIZE (sequence) - 1)); |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2855 if (STRINGP (tem)) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2856 Faset (sequence, make_number (ASIZE (sequence) - 1), |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2857 build_string ("(any string)")); |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2858 } |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
2859 |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2860 /* It is a true unshadowed match. Record it, unless it's already |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2861 been seen (as could happen when inheriting keymaps). */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2862 if (NILP (Fmember (sequence, found))) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2863 found = Fcons (sequence, found); |
107332
e09a216f2aab
Fix keyboard macro key lookup (Bug#5481).
Chong Yidong <cyd@stupidchicken.com>
parents:
106972
diff
changeset
|
2864 |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2865 /* If firstonly is Qnon_ascii, then we can return the first |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2866 binding we find. If firstonly is not Qnon_ascii but not |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2867 nil, then we should return the first ascii-only binding |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2868 we find. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2869 if (EQ (firstonly, Qnon_ascii)) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2870 RETURN_UNGCPRO (sequence); |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2871 else if (!NILP (firstonly) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2872 && 2 == preferred_sequence_p (sequence)) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2873 RETURN_UNGCPRO (sequence); |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2874 } |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2875 |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2876 UNGCPRO; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2877 |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2878 found = Fnreverse (found); |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2879 |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2880 /* firstonly may have been t, but we may have gone all the way through |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2881 the keymaps without finding an all-ASCII key sequence. So just |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2882 return the best we could find. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2883 if (NILP (firstonly)) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2884 return found; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2885 else if (where_is_preferred_modifier == 0) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2886 return Fcar (found); |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2887 else |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2888 { /* Maybe we did not find a preferred_modifier binding, but we did find |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2889 some ASCII binding. */ |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2890 Lisp_Object bindings = found; |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2891 while (CONSP (bindings)) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2892 if (preferred_sequence_p (XCAR (bindings))) |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2893 return XCAR (bindings); |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2894 else |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2895 bindings = XCDR (bindings); |
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2896 return Fcar (found); |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2897 } |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2898 } |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2899 |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2900 /* This function can GC because get_keyelt can. */ |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2901 |
20319
81424cf4d446
(copy_keymap_1): Fix return type.
Andreas Schwab <schwab@suse.de>
parents:
20076
diff
changeset
|
2902 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2903 where_is_internal_1 (Lisp_Object key, Lisp_Object binding, Lisp_Object args, void *data) |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2904 { |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2905 struct where_is_internal_data *d = data; /* Cast! */ |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2906 Lisp_Object definition = d->definition; |
104918
cd8d62c35d57
* keymap.c (where_is_internal_data): Make noindirect a boolean.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104888
diff
changeset
|
2907 int noindirect = d->noindirect; |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2908 Lisp_Object this = d->this; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2909 Lisp_Object last = d->last; |
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2910 int last_is_meta = d->last_is_meta; |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2911 Lisp_Object sequence; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2912 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2913 /* Search through indirections unless that's not wanted. */ |
104936
4556ab401b02
(where_is_internal): Don't erroneously return nil right after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104925
diff
changeset
|
2914 if (!noindirect) |
32145
a48fcf036df1
(Fwhere_is_internal): Ignore `menu-bar' and `tool-bar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32038
diff
changeset
|
2915 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
|
2916 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2917 /* 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
|
2918 the target. */ |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2919 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2920 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
|
2921 || EQ (binding, definition) |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2922 || (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
|
2923 /* Doesn't match. */ |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2924 return; |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2925 |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2926 /* 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
|
2927 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
|
2928 { |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2929 sequence = Fcopy_sequence (this); |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2930 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
|
2931 } |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2932 else |
91037
fd549372af1b
(where_is_internal_1): If key is a cons, store the copy
Kenichi Handa <handa@m17n.org>
parents:
91005
diff
changeset
|
2933 { |
fd549372af1b
(where_is_internal_1): If key is a cons, store the copy
Kenichi Handa <handa@m17n.org>
parents:
91005
diff
changeset
|
2934 if (CONSP (key)) |
fd549372af1b
(where_is_internal_1): If key is a cons, store the copy
Kenichi Handa <handa@m17n.org>
parents:
91005
diff
changeset
|
2935 key = Fcons (XCAR (key), XCDR (key)); |
fd549372af1b
(where_is_internal_1): If key is a cons, store the copy
Kenichi Handa <handa@m17n.org>
parents:
91005
diff
changeset
|
2936 sequence = append_key (this, key); |
fd549372af1b
(where_is_internal_1): If key is a cons, store the copy
Kenichi Handa <handa@m17n.org>
parents:
91005
diff
changeset
|
2937 } |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2938 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2939 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
|
2940 { |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2941 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
|
2942 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
|
2943 } |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
2944 else |
81792
4ee4f467ca51
(struct accessible_keymaps_data, struct where_is_internal_data): New structs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81609
diff
changeset
|
2945 d->sequences = Fcons (sequence, d->sequences); |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
2946 } |
250 | 2947 |
465 | 2948 /* describe-bindings - summarizing all the bindings in a set of keymaps. */ |
2949 | |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2950 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
|
2951 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
|
2952 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
|
2953 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
|
2954 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
|
2955 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
|
2956 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
|
2957 \(Ordinarily these are omitted from the output.) */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
2958 (Lisp_Object buffer, Lisp_Object prefix, Lisp_Object menus) |
250 | 2959 { |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2960 Lisp_Object outbuf, shadow; |
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
2961 int nomenu = NILP (menus); |
7186
092688f7ebbb
(describe_buffer_bindings): gcpro stuff. Delete some unused code.
Karl Heuer <kwzh@gnu.org>
parents:
7184
diff
changeset
|
2962 register Lisp_Object start1; |
092688f7ebbb
(describe_buffer_bindings): gcpro stuff. Delete some unused code.
Karl Heuer <kwzh@gnu.org>
parents:
7184
diff
changeset
|
2963 struct gcpro gcpro1; |
250 | 2964 |
1120
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2965 char *alternate_heading |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2966 = "\ |
20850
ffbaaba0bf76
(Fdescribe_bindings_internal):
Richard M. Stallman <rms@gnu.org>
parents:
20708
diff
changeset
|
2967 Keyboard translations:\n\n\ |
ffbaaba0bf76
(Fdescribe_bindings_internal):
Richard M. Stallman <rms@gnu.org>
parents:
20708
diff
changeset
|
2968 You type Translation\n\ |
ffbaaba0bf76
(Fdescribe_bindings_internal):
Richard M. Stallman <rms@gnu.org>
parents:
20708
diff
changeset
|
2969 -------- -----------\n"; |
250 | 2970 |
76415
a31980a5f310
(Fdescribe_buffer_bindings): Check that BUFFER is valid.
Juanma Barranquero <lekktu@gmail.com>
parents:
76269
diff
changeset
|
2971 CHECK_BUFFER (buffer); |
a31980a5f310
(Fdescribe_buffer_bindings): Check that BUFFER is valid.
Juanma Barranquero <lekktu@gmail.com>
parents:
76269
diff
changeset
|
2972 |
4575
bf0f07186369
(describe_buffer_bindings): Declare shadow just once.
Richard M. Stallman <rms@gnu.org>
parents:
4138
diff
changeset
|
2973 shadow = Qnil; |
7186
092688f7ebbb
(describe_buffer_bindings): gcpro stuff. Delete some unused code.
Karl Heuer <kwzh@gnu.org>
parents:
7184
diff
changeset
|
2974 GCPRO1 (shadow); |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
2975 |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
2976 outbuf = Fcurrent_buffer (); |
250 | 2977 |
1120
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2978 /* Report on alternates for keys. */ |
83391
e99392472e41
Change `keyboard-translate-table' to be terminal-local.
Karoly Lorentey <lorentey@elte.hu>
parents:
83380
diff
changeset
|
2979 if (STRINGP (current_kboard->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
|
2980 { |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2981 int c; |
83391
e99392472e41
Change `keyboard-translate-table' to be terminal-local.
Karoly Lorentey <lorentey@elte.hu>
parents:
83380
diff
changeset
|
2982 const unsigned char *translate = SDATA (current_kboard->Vkeyboard_translate_table); |
e99392472e41
Change `keyboard-translate-table' to be terminal-local.
Karoly Lorentey <lorentey@elte.hu>
parents:
83380
diff
changeset
|
2983 int translate_len = SCHARS (current_kboard->Vkeyboard_translate_table); |
1120
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2984 |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2985 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
|
2986 if (translate[c] != c) |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2987 { |
26481
70d85ae6dfee
(Fsingle_key_description): Use KEY_DESCRIPTION_SIZE to
Kenichi Handa <handa@m17n.org>
parents:
26404
diff
changeset
|
2988 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
|
2989 char *bufend; |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2990 |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2991 if (alternate_heading) |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2992 { |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2993 insert_string (alternate_heading); |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2994 alternate_heading = 0; |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2995 } |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2996 |
34906
333a490b6ebc
(push_key_description): Add parameter FORCE_MULTIBYTE.
Gerd Moellmann <gerd@gnu.org>
parents:
34765
diff
changeset
|
2997 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
|
2998 insert (buf, bufend - buf); |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
2999 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
|
3000 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
|
3001 insert (buf, bufend - buf); |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
3002 |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
3003 insert ("\n", 1); |
65456
d9638b932900
(Fdescribe_buffer_bindings): Reload `translate'
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
3004 |
d9638b932900
(Fdescribe_buffer_bindings): Reload `translate'
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
3005 /* Insert calls signal_after_change which may GC. */ |
83391
e99392472e41
Change `keyboard-translate-table' to be terminal-local.
Karoly Lorentey <lorentey@elte.hu>
parents:
83380
diff
changeset
|
3006 translate = SDATA (current_kboard->Vkeyboard_translate_table); |
1120
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
3007 } |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
3008 |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
3009 insert ("\n", 1); |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
3010 } |
0a486e1a45bc
* keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents:
1095
diff
changeset
|
3011 |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3012 if (!NILP (Vkey_translation_map)) |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3013 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
|
3014 "Key translations", nomenu, 1, 0, 0); |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3015 |
465 | 3016 |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3017 /* Print the (major mode) local map. */ |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3018 start1 = Qnil; |
12262
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
3019 if (!NILP (current_kboard->Voverriding_terminal_local_map)) |
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
3020 start1 = current_kboard->Voverriding_terminal_local_map; |
a7d5578ebb25
(Fkey_binding, describe_buffer_bindings):
Karl Heuer <kwzh@gnu.org>
parents:
12151
diff
changeset
|
3021 else if (!NILP (Voverriding_local_map)) |
5613
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
3022 start1 = Voverriding_local_map; |
cad51b2de6cd
(Fkey_binding): Handle Voverriding_local_map.
Richard M. Stallman <rms@gnu.org>
parents:
5551
diff
changeset
|
3023 |
485 | 3024 if (!NILP (start1)) |
250 | 3025 { |
16465
398e3995162d
(describe_buffer_bindings): Pass 1 for PARTIAL
Richard M. Stallman <rms@gnu.org>
parents:
16227
diff
changeset
|
3026 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
|
3027 "\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
|
3028 shadow = Fcons (start1, shadow); |
250 | 3029 } |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3030 else |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3031 { |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3032 /* 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
|
3033 int i, nmaps; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3034 Lisp_Object *modes, *maps; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3035 |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3036 /* 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
|
3037 minor modes correctly. */ |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3038 Fset_buffer (buffer); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3039 |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3040 nmaps = current_minor_maps (&modes, &maps); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3041 Fset_buffer (outbuf); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3042 |
42510
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
3043 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
|
3044 XBUFFER (buffer), Qkeymap); |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
3045 if (!NILP (start1)) |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
3046 { |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
3047 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
|
3048 "\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
|
3049 0, 0, 0); |
42510
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
3050 shadow = Fcons (start1, shadow); |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
3051 } |
dde71e46eeeb
(Fcurrent_active_maps): Put the `keymap' property map first.
Richard M. Stallman <rms@gnu.org>
parents:
42404
diff
changeset
|
3052 |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3053 /* Print the minor mode maps. */ |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3054 for (i = 0; i < nmaps; i++) |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3055 { |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3056 /* The title for a minor mode keymap |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3057 is constructed at run time. |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3058 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
|
3059 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
|
3060 char *title, *p; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3061 |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3062 if (!SYMBOLP (modes[i])) |
96747
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
3063 abort (); |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3064 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
3065 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
|
3066 *p++ = '\f'; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3067 *p++ = '\n'; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3068 *p++ = '`'; |
109165
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109131
diff
changeset
|
3069 memcpy (p, SDATA (SYMBOL_NAME (modes[i])), |
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109131
diff
changeset
|
3070 SCHARS (SYMBOL_NAME (modes[i]))); |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46310
diff
changeset
|
3071 p += SCHARS (SYMBOL_NAME (modes[i])); |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3072 *p++ = '\''; |
109165
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109131
diff
changeset
|
3073 memcpy (p, " Minor Mode Bindings", strlen (" Minor Mode Bindings")); |
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109131
diff
changeset
|
3074 p += strlen (" Minor Mode Bindings"); |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3075 *p = 0; |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3076 |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3077 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
|
3078 title, nomenu, 0, 0, 0); |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3079 shadow = Fcons (maps[i], shadow); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3080 } |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3081 |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3082 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
|
3083 XBUFFER (buffer), Qlocal_map); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3084 if (!NILP (start1)) |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3085 { |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3086 if (EQ (start1, XBUFFER (buffer)->keymap)) |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3087 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
|
3088 "\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
|
3089 else |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3090 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
|
3091 "\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
|
3092 nomenu, 0, 0, 0); |
40625
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3093 |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3094 shadow = Fcons (start1, shadow); |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3095 } |
1248b61b7baf
(Fdescribe_buffer_bindings): Print character property
Richard M. Stallman <rms@gnu.org>
parents:
40401
diff
changeset
|
3096 } |
250 | 3097 |
16465
398e3995162d
(describe_buffer_bindings): Pass 1 for PARTIAL
Richard M. Stallman <rms@gnu.org>
parents:
16227
diff
changeset
|
3098 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
|
3099 "\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
|
3100 |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3101 /* Print the function-key-map translations under this prefix. */ |
83346
7372c2f9daac
Rename function-key-map to local-function-key-map, and global-function-key-map to function-key-map. Same for key-translation-map.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
3102 if (!NILP (current_kboard->Vlocal_function_key_map)) |
7372c2f9daac
Rename function-key-map to local-function-key-map, and global-function-key-map to function-key-map. Same for key-translation-map.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
3103 describe_map_tree (current_kboard->Vlocal_function_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
|
3104 "\f\nFunction key map translations", nomenu, 1, 0, 0); |
250 | 3105 |
85106
fd282fb888de
Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
3106 /* Print the input-decode-map translations under this prefix. */ |
fd282fb888de
Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
3107 if (!NILP (current_kboard->Vinput_decode_map)) |
fd282fb888de
Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
3108 describe_map_tree (current_kboard->Vinput_decode_map, 0, Qnil, prefix, |
fd282fb888de
Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
3109 "\f\nInput decoding map translations", nomenu, 1, 0, 0); |
fd282fb888de
Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
3110 |
7186
092688f7ebbb
(describe_buffer_bindings): gcpro stuff. Delete some unused code.
Karl Heuer <kwzh@gnu.org>
parents:
7184
diff
changeset
|
3111 UNGCPRO; |
250 | 3112 return Qnil; |
3113 } | |
3114 | |
13947 | 3115 /* Insert a description of the key bindings in STARTMAP, |
250 | 3116 followed by those of all maps reachable through STARTMAP. |
3117 If PARTIAL is nonzero, omit certain "uninteresting" commands | |
3118 (such as `undefined'). | |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3119 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
|
3120 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
|
3121 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
|
3122 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
|
3123 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
|
3124 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
|
3125 |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3126 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
|
3127 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
|
3128 |
2e0c4159e94b
(describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
13201
diff
changeset
|
3129 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
|
3130 to look through. |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3131 |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3132 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
|
3133 don't omit it; instead, mention it but say it is shadowed. */ |
250 | 3134 |
3135 void | |
109364
89a16701cde1
Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents:
109302
diff
changeset
|
3136 describe_map_tree (Lisp_Object startmap, int partial, Lisp_Object shadow, |
89a16701cde1
Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents:
109302
diff
changeset
|
3137 Lisp_Object prefix, char *title, int nomenu, int transl, |
89a16701cde1
Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents:
109302
diff
changeset
|
3138 int always_title, int mention_shadow) |
250 | 3139 { |
20883
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3140 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
|
3141 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
|
3142 int something = 0; |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3143 char *key_heading |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3144 = "\ |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3145 key binding\n\ |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3146 --- -------\n"; |
250 | 3147 |
20883
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3148 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
|
3149 seen = Qnil; |
7184
caac285c072d
(describe_map_tree): gcpro some things.
Karl Heuer <kwzh@gnu.org>
parents:
7183
diff
changeset
|
3150 sub_shadows = Qnil; |
caac285c072d
(describe_map_tree): gcpro some things.
Karl Heuer <kwzh@gnu.org>
parents:
7183
diff
changeset
|
3151 GCPRO3 (maps, seen, sub_shadows); |
250 | 3152 |
5551
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3153 if (nomenu) |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3154 { |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3155 Lisp_Object list; |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3156 |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3157 /* Delete from MAPS each element that is for the menu bar. */ |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85106
diff
changeset
|
3158 for (list = maps; CONSP (list); list = XCDR (list)) |
5551
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3159 { |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3160 Lisp_Object elt, prefix, tem; |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3161 |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85106
diff
changeset
|
3162 elt = XCAR (list); |
5551
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3163 prefix = Fcar (elt); |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3164 if (XVECTOR (prefix)->size >= 1) |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3165 { |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3166 tem = Faref (prefix, make_number (0)); |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3167 if (EQ (tem, Qmenu_bar)) |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3168 maps = Fdelq (elt, maps); |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3169 } |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3170 } |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3171 } |
2b8f405f5103
(describe_map_tree): New arg NOMENU.
Richard M. Stallman <rms@gnu.org>
parents:
5367
diff
changeset
|
3172 |
13245
2e0c4159e94b
(describe_map_tree): New arg always_title. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
13201
diff
changeset
|
3173 if (!NILP (maps) || always_title) |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3174 { |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3175 if (title) |
4023
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3176 { |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3177 insert_string (title); |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3178 if (!NILP (prefix)) |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3179 { |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3180 insert_string (" Starting With "); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3181 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
|
3182 } |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3183 insert_string (":\n"); |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3184 } |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3185 insert_string (key_heading); |
4023
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3186 something = 1; |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3187 } |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3188 |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85106
diff
changeset
|
3189 for (; CONSP (maps); maps = XCDR (maps)) |
250 | 3190 { |
7184
caac285c072d
(describe_map_tree): gcpro some things.
Karl Heuer <kwzh@gnu.org>
parents:
7183
diff
changeset
|
3191 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
|
3192 |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85106
diff
changeset
|
3193 elt = XCAR (maps); |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3194 prefix = Fcar (elt); |
250 | 3195 |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3196 sub_shadows = Qnil; |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3197 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3198 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
|
3199 { |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3200 Lisp_Object shmap; |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3201 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3202 shmap = XCAR (tail); |
250 | 3203 |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3204 /* 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
|
3205 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
|
3206 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
|
3207 || (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
|
3208 ; |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3209 /* 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
|
3210 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
|
3211 what we should use. */ |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3212 else |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3213 { |
6859
f34b91fa388c
(describe_map_tree): Fix call to Flookup_key.
Richard M. Stallman <rms@gnu.org>
parents:
6834
diff
changeset
|
3214 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
|
3215 if (INTEGERP (shmap)) |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3216 shmap = Qnil; |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3217 } |
250 | 3218 |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3219 /* 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
|
3220 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
|
3221 describe this map at all. */ |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3222 if (!NILP (shmap) && !KEYMAPP (shmap)) |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3223 goto skip; |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3224 |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3225 if (!NILP (shmap)) |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3226 sub_shadows = Fcons (shmap, sub_shadows); |
250 | 3227 } |
3228 | |
20883
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3229 /* 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
|
3230 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
|
3231 { |
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3232 Lisp_Object tem; |
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3233 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
|
3234 if (!NILP (tem)) |
20883
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3235 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
|
3236 } |
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3237 |
4aeabf3b8f98
(describe_map_tree): Add the maps we have already
Richard M. Stallman <rms@gnu.org>
parents:
20850
diff
changeset
|
3238 describe_map (Fcdr (elt), prefix, |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3239 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
|
3240 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
|
3241 |
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3242 skip: ; |
250 | 3243 } |
3244 | |
4023
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3245 if (something) |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3246 insert_string ("\n"); |
5e4f918d5d44
(describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents:
3962
diff
changeset
|
3247 |
250 | 3248 UNGCPRO; |
3249 } | |
3250 | |
14304
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3251 static int previous_description_column; |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3252 |
250 | 3253 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3254 describe_command (Lisp_Object definition, Lisp_Object args) |
250 | 3255 { |
3256 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
|
3257 int column = (int) current_column (); /* iftc */ |
14304
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3258 int description_column; |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3259 |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3260 /* If column 16 is no good, go to col 32; |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3261 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
|
3262 if (column > 30) |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3263 { |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3264 insert_char ('\n'); |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3265 description_column = 32; |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3266 } |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3267 else if (column > 14 || (column > 10 && previous_description_column == 32)) |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3268 description_column = 32; |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3269 else |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3270 description_column = 16; |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3271 |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3272 Findent_to (make_number (description_column), make_number (1)); |
57194b6a555d
(Faccessible_keymaps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
3273 previous_description_column = description_column; |
250 | 3274 |
9123
c225137ddefb
(get_keyelt, store_in_keymap, Fcopy_keymap, Fdefine_key, Flookup_key,
Karl Heuer <kwzh@gnu.org>
parents:
8922
diff
changeset
|
3275 if (SYMBOLP (definition)) |
250 | 3276 { |
45404
3885467d7b12
* keymap.c (silly_event_symbol_error, Fsingle_key_description)
Ken Raeburn <raeburn@raeburn.org>
parents:
45279
diff
changeset
|
3277 tem1 = SYMBOL_NAME (definition); |
250 | 3278 insert1 (tem1); |
21539
b9606d56f91f
Revert erroneous 1998-04-08 change.
Dave Love <fx@gnu.org>
parents:
21514
diff
changeset
|
3279 insert_string ("\n"); |
250 | 3280 } |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3281 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
|
3282 insert_string ("Keyboard Macro\n"); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3283 else if (KEYMAPP (definition)) |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3284 insert_string ("Prefix Command\n"); |
250 | 3285 else |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3286 insert_string ("??\n"); |
250 | 3287 } |
3288 | |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3289 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3290 describe_translation (Lisp_Object definition, Lisp_Object args) |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3291 { |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3292 register Lisp_Object tem1; |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3293 |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3294 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
|
3295 |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3296 if (SYMBOLP (definition)) |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3297 { |
45404
3885467d7b12
* keymap.c (silly_event_symbol_error, Fsingle_key_description)
Ken Raeburn <raeburn@raeburn.org>
parents:
45279
diff
changeset
|
3298 tem1 = SYMBOL_NAME (definition); |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3299 insert1 (tem1); |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3300 insert_string ("\n"); |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3301 } |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3302 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
|
3303 { |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3304 insert1 (Fkey_description (definition, Qnil)); |
13343
cc0f24bdfab1
(describe_translation): Insert newline after key description.
Richard M. Stallman <rms@gnu.org>
parents:
13245
diff
changeset
|
3305 insert_string ("\n"); |
cc0f24bdfab1
(describe_translation): Insert newline after key description.
Richard M. Stallman <rms@gnu.org>
parents:
13245
diff
changeset
|
3306 } |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3307 else if (KEYMAPP (definition)) |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3308 insert_string ("Prefix Command\n"); |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3309 else |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32889
diff
changeset
|
3310 insert_string ("??\n"); |
12710
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3311 } |
26c09987d2f3
(describe_buffer_bindings): Print bindings from
Richard M. Stallman <rms@gnu.org>
parents:
12542
diff
changeset
|
3312 |
67904
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3313 /* describe_map puts all the usable elements of a sparse keymap |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3314 into an array of `struct describe_map_elt', |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3315 then sorts them by the events. */ |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3316 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3317 struct describe_map_elt { Lisp_Object event; Lisp_Object definition; int shadowed; }; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3318 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3319 /* qsort comparison function for sorting `struct describe_map_elt' by |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3320 the event field. */ |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3321 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3322 static int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3323 describe_map_compare (const void *aa, const void *bb) |
67904
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3324 { |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3325 const struct describe_map_elt *a = aa, *b = bb; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3326 if (INTEGERP (a->event) && INTEGERP (b->event)) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3327 return ((XINT (a->event) > XINT (b->event)) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3328 - (XINT (a->event) < XINT (b->event))); |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3329 if (!INTEGERP (a->event) && INTEGERP (b->event)) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3330 return 1; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3331 if (INTEGERP (a->event) && !INTEGERP (b->event)) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3332 return -1; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3333 if (SYMBOLP (a->event) && SYMBOLP (b->event)) |
67994
2e977adcc0e5
(describe_map_compare): Yet another int/Lisp_Object mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67904
diff
changeset
|
3334 return (!NILP (Fstring_lessp (a->event, b->event)) ? -1 |
2e977adcc0e5
(describe_map_compare): Yet another int/Lisp_Object mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67904
diff
changeset
|
3335 : !NILP (Fstring_lessp (b->event, a->event)) ? 1 |
67904
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3336 : 0); |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3337 return 0; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3338 } |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3339 |
6974
ab22b527d380
(describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents:
6859
diff
changeset
|
3340 /* 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
|
3341 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
|
3342 PARTIAL, SHADOW, NOMENU are as in `describe_map_tree' above. */ |
250 | 3343 |
3344 static void | |
109364
89a16701cde1
Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents:
109302
diff
changeset
|
3345 describe_map (Lisp_Object map, Lisp_Object prefix, |
89a16701cde1
Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents:
109302
diff
changeset
|
3346 void (*elt_describer) (Lisp_Object, Lisp_Object), |
89a16701cde1
Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents:
109302
diff
changeset
|
3347 int partial, Lisp_Object shadow, |
89a16701cde1
Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents:
109302
diff
changeset
|
3348 Lisp_Object *seen, int nomenu, int mention_shadow) |
250 | 3349 { |
3952
f9dfc2872fb0
(describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents:
3908
diff
changeset
|
3350 Lisp_Object tail, definition, event; |
3908
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3351 Lisp_Object tem; |
250 | 3352 Lisp_Object suppress; |
3353 Lisp_Object kludge; | |
3354 int first = 1; | |
3355 struct gcpro gcpro1, gcpro2, gcpro3; | |
3356 | |
67904
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3357 /* These accumulate the values from sparse keymap bindings, |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3358 so we can sort them and handle them in order. */ |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3359 int length_needed = 0; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3360 struct describe_map_elt *vect; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3361 int slots_used = 0; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3362 int i; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3363 |
31829
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31496
diff
changeset
|
3364 suppress = Qnil; |
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31496
diff
changeset
|
3365 |
250 | 3366 if (partial) |
3367 suppress = intern ("suppress-keymap"); | |
3368 | |
3369 /* 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
|
3370 that is done once per keymap element, we don't want to cons up a |
250 | 3371 fresh vector every time. */ |
3372 kludge = Fmake_vector (make_number (1), Qnil); | |
3908
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3373 definition = Qnil; |
250 | 3374 |
93664
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
3375 GCPRO3 (prefix, definition, kludge); |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
3376 |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
3377 map = call1 (Qkeymap_canonicalize, map); |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
3378 |
67904
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3379 for (tail = map; CONSP (tail); tail = XCDR (tail)) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3380 length_needed++; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3381 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3382 vect = ((struct describe_map_elt *) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3383 alloca (sizeof (struct describe_map_elt) * length_needed)); |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3384 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3385 for (tail = map; CONSP (tail); tail = XCDR (tail)) |
250 | 3386 { |
3387 QUIT; | |
3388 | |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3389 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
|
3390 || 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
|
3391 describe_vector (XCAR (tail), |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3392 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
|
3393 (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
|
3394 else if (CONSP (XCAR (tail))) |
250 | 3395 { |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3396 int this_shadowed = 0; |
67904
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3397 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3398 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
|
3399 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3400 /* 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
|
3401 (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
|
3402 if (!(SYMBOLP (event) || INTEGERP (event))) |
7191
bd2f9c5ee54e
(Fsingle_key_description): Undo previous change.
Karl Heuer <kwzh@gnu.org>
parents:
7186
diff
changeset
|
3403 continue; |
7341
516dd16e2017
(describe_map): Ignore bindings for all except symbols and integers.
Richard M. Stallman <rms@gnu.org>
parents:
7191
diff
changeset
|
3404 |
14129
d0b95da4f1f2
(describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents:
14099
diff
changeset
|
3405 if (nomenu && EQ (event, Qmenu_bar)) |
d0b95da4f1f2
(describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents:
14099
diff
changeset
|
3406 continue; |
d0b95da4f1f2
(describe_map): New arg nomenu.
Karl Heuer <kwzh@gnu.org>
parents:
14099
diff
changeset
|
3407 |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3408 definition = get_keyelt (XCDR (XCAR (tail)), 0); |
250 | 3409 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3410 /* Don't show undefined commands or suppressed commands. */ |
3908
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3411 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
|
3412 if (SYMBOLP (definition) && partial) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3413 { |
3908
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3414 tem = Fget (definition, suppress); |
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3415 if (!NILP (tem)) |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3416 continue; |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3417 } |
250 | 3418 |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3419 /* 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
|
3420 because a local definition of the same key shadows it. */ |
250 | 3421 |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
3422 ASET (kludge, 0, event); |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3423 if (!NILP (shadow)) |
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3424 { |
106972
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
3425 tem = shadow_lookup (shadow, kludge, Qt, 0); |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3426 if (!NILP (tem)) |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3427 { |
75393
42d89518722a
(describe_map): Don't consider prefix keys to be shadowed.
Kim F. Storm <storm@cua.dk>
parents:
75348
diff
changeset
|
3428 /* If both bindings are keymaps, this key is a prefix key, |
42d89518722a
(describe_map): Don't consider prefix keys to be shadowed.
Kim F. Storm <storm@cua.dk>
parents:
75348
diff
changeset
|
3429 so don't say it is shadowed. */ |
42d89518722a
(describe_map): Don't consider prefix keys to be shadowed.
Kim F. Storm <storm@cua.dk>
parents:
75348
diff
changeset
|
3430 if (KEYMAPP (definition) && KEYMAPP (tem)) |
42d89518722a
(describe_map): Don't consider prefix keys to be shadowed.
Kim F. Storm <storm@cua.dk>
parents:
75348
diff
changeset
|
3431 ; |
70554
e1a064810f6f
* keymap.c (describe_map): Avoid generating duplicate entries if
Chong Yidong <cyd@stupidchicken.com>
parents:
70536
diff
changeset
|
3432 /* Avoid generating duplicate entries if the |
75393
42d89518722a
(describe_map): Don't consider prefix keys to be shadowed.
Kim F. Storm <storm@cua.dk>
parents:
75348
diff
changeset
|
3433 shadowed binding has the same definition. */ |
42d89518722a
(describe_map): Don't consider prefix keys to be shadowed.
Kim F. Storm <storm@cua.dk>
parents:
75348
diff
changeset
|
3434 else if (mention_shadow && !EQ (tem, definition)) |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3435 this_shadowed = 1; |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3436 else |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3437 continue; |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3438 } |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3439 } |
250 | 3440 |
6974
ab22b527d380
(describe_map): Merge with describe_map_2.
Karl Heuer <kwzh@gnu.org>
parents:
6859
diff
changeset
|
3441 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
|
3442 if (!EQ (tem, definition)) continue; |
3908
a148b4ff79c6
(describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents:
3735
diff
changeset
|
3443 |
67904
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3444 vect[slots_used].event = event; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3445 vect[slots_used].definition = definition; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3446 vect[slots_used].shadowed = this_shadowed; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3447 slots_used++; |
1209
1aa2cd425737
* keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
1160
diff
changeset
|
3448 } |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25600
diff
changeset
|
3449 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
|
3450 { |
4d540eeb2dd5
(describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents:
6974
diff
changeset
|
3451 /* 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
|
3452 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
|
3453 encountered. */ |
4d540eeb2dd5
(describe_map_tree, describe_map): Skip keymaps we've seen before.
Karl Heuer <kwzh@gnu.org>
parents:
6974
diff
changeset
|
3454 tem = Fassq (tail, *seen); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3455 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
|
3456 break; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3457 *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
|
3458 } |
250 | 3459 } |
3460 | |
67904
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3461 /* If we found some sparse map events, sort them. */ |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3462 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3463 qsort (vect, slots_used, sizeof (struct describe_map_elt), |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3464 describe_map_compare); |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3465 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3466 /* Now output them in sorted order. */ |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3467 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3468 for (i = 0; i < slots_used; i++) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3469 { |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3470 Lisp_Object start, end; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3471 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3472 if (first) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3473 { |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3474 previous_description_column = 0; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3475 insert ("\n", 1); |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3476 first = 0; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3477 } |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3478 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3479 ASET (kludge, 0, vect[i].event); |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3480 start = vect[i].event; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3481 end = start; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3482 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3483 definition = vect[i].definition; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3484 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3485 /* Find consecutive chars that are identically defined. */ |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3486 if (INTEGERP (vect[i].event)) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3487 { |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3488 while (i + 1 < slots_used |
69870
bc9116711ea3
(describe_map): Don't use XINT if we haven't checked INTEGERP.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69596
diff
changeset
|
3489 && EQ (vect[i+1].event, make_number (XINT (vect[i].event) + 1)) |
67904
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3490 && !NILP (Fequal (vect[i + 1].definition, definition)) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3491 && vect[i].shadowed == vect[i + 1].shadowed) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3492 i++; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3493 end = vect[i].event; |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3494 } |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3495 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3496 /* Now START .. END is the range to describe next. */ |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3497 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3498 /* Insert the string to describe the event START. */ |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3499 insert1 (Fkey_description (kludge, prefix)); |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3500 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3501 if (!EQ (start, end)) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3502 { |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3503 insert (" .. ", 4); |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3504 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3505 ASET (kludge, 0, end); |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3506 /* Insert the string to describe the character END. */ |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3507 insert1 (Fkey_description (kludge, prefix)); |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3508 } |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3509 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3510 /* Print a description of the definition of this character. |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3511 elt_describer will take care of spacing out far enough |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3512 for alignment purposes. */ |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3513 (*elt_describer) (vect[i].definition, Qnil); |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3514 |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3515 if (vect[i].shadowed) |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3516 { |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3517 SET_PT (PT - 1); |
70083
61d8c79b3c79
(describe_map): Make "shadowed" warning more verbose.
Richard M. Stallman <rms@gnu.org>
parents:
69870
diff
changeset
|
3518 insert_string ("\n (that binding is currently shadowed by another mode)"); |
67904
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3519 SET_PT (PT + 1); |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3520 } |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3521 } |
d2dff317d618
(describe_map): Put sparse map elements into an array,
Richard M. Stallman <rms@gnu.org>
parents:
67674
diff
changeset
|
3522 |
250 | 3523 UNGCPRO; |
3524 } | |
3525 | |
20319
81424cf4d446
(copy_keymap_1): Fix return type.
Andreas Schwab <schwab@suse.de>
parents:
20076
diff
changeset
|
3526 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3527 describe_vector_princ (Lisp_Object elt, Lisp_Object fun) |
250 | 3528 { |
3691
49ce2242f5c1
(get_keymap_1): Add missing semicolon.
Richard M. Stallman <rms@gnu.org>
parents:
3674
diff
changeset
|
3529 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
|
3530 call1 (fun, elt); |
3632
72cfde0cd8cd
(Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents:
3542
diff
changeset
|
3531 Fterpri (Qnil); |
250 | 3532 } |
3533 | |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3534 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
|
3535 doc: /* Insert a description of contents of VECTOR. |
55913
c663e2e97168
(Fdescribe_vector): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
55722
diff
changeset
|
3536 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
|
3537 DESCRIBER is the output function used; nil means use `princ'. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
3538 (Lisp_Object vector, Lisp_Object describer) |
250 | 3539 { |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
46142
diff
changeset
|
3540 int count = SPECPDL_INDEX (); |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3541 if (NILP (describer)) |
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3542 describer = intern ("princ"); |
3632
72cfde0cd8cd
(Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents:
3542
diff
changeset
|
3543 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
|
3544 CHECK_VECTOR_OR_CHAR_TABLE (vector); |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3545 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
|
3546 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
|
3547 |
72cfde0cd8cd
(Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents:
3542
diff
changeset
|
3548 return unbind_to (count, Qnil); |
250 | 3549 } |
3550 | |
13201
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3551 /* 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
|
3552 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
|
3553 in VECTOR. |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3554 |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3555 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
|
3556 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
|
3557 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
|
3558 |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3559 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
|
3560 leads to this keymap. |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3561 |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3562 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
|
3563 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
|
3564 set described by this chartable. |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3565 |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3566 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
|
3567 (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
|
3568 |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3569 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
|
3570 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
|
3571 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
|
3572 |
e9007fec678e
(describe_vector): Support nested char-tables.
Richard M. Stallman <rms@gnu.org>
parents:
13145
diff
changeset
|
3573 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
|
3574 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
|
3575 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
|
3576 |
88380 | 3577 ARGS is simply passed as the second argument to ELT_DESCRIBER. |
3578 | |
3579 INDICES and CHAR_TABLE_DEPTH are ignored. They will be removed in | |
89943
4c90ffeb71c5
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-15
Miles Bader <miles@gnu.org>
diff
changeset
|
3580 the near future. |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3581 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3582 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
|
3583 |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3584 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
|
3585 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3586 static void |
109364
89a16701cde1
Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents:
109302
diff
changeset
|
3587 describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, |
89a16701cde1
Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents:
109302
diff
changeset
|
3588 void (*elt_describer) (Lisp_Object, Lisp_Object), |
89a16701cde1
Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents:
109302
diff
changeset
|
3589 int partial, Lisp_Object shadow, Lisp_Object entire_map, |
89a16701cde1
Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents:
109302
diff
changeset
|
3590 int *indices, int char_table_depth, int keymap_p, |
89a16701cde1
Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents:
109302
diff
changeset
|
3591 int mention_shadow) |
250 | 3592 { |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3593 Lisp_Object definition; |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3594 Lisp_Object tem2; |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3595 Lisp_Object elt_prefix = Qnil; |
88747
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3596 int i; |
250 | 3597 Lisp_Object suppress; |
3598 Lisp_Object kludge; | |
3599 int first = 1; | |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3600 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
17036 | 3601 /* Range of elements to be handled. */ |
99981
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3602 int from, to, stop; |
88380 | 3603 Lisp_Object character; |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3604 int starting_i; |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3605 |
31829
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31496
diff
changeset
|
3606 suppress = Qnil; |
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31496
diff
changeset
|
3607 |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3608 definition = Qnil; |
250 | 3609 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3610 if (!keymap_p) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3611 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3612 /* 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
|
3613 if (!NILP (prefix) && XFASTINT (Flength (prefix)) > 0) |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3614 { |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3615 Lisp_Object tem; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3616 tem = Fkey_description (prefix, Qnil); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3617 elt_prefix = concat2 (tem, build_string (" ")); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3618 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3619 prefix = Qnil; |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3620 } |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3621 |
250 | 3622 /* This vector gets used to present single keys to Flookup_key. Since |
3623 that is done once per vector element, we don't want to cons up a | |
3624 fresh vector every time. */ | |
3625 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
|
3626 GCPRO4 (elt_prefix, prefix, definition, kludge); |
250 | 3627 |
3628 if (partial) | |
3629 suppress = intern ("suppress-keymap"); | |
3630 | |
88380 | 3631 from = 0; |
99981
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3632 if (CHAR_TABLE_P (vector)) |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3633 stop = MAX_5_BYTE_CHAR + 1, to = MAX_CHAR + 1; |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3634 else |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3635 stop = to = XVECTOR (vector)->size; |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3636 |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3637 for (i = from; ; i++) |
250 | 3638 { |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3639 int this_shadowed = 0; |
88747
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3640 int range_beg, range_end; |
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3641 Lisp_Object val; |
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3642 |
250 | 3643 QUIT; |
17189
7c008ec99e97
(describe_vector): Adjusted for the change of CHAR_TABLE_ORDINARY_SLOTS.
Kenichi Handa <handa@m17n.org>
parents:
17111
diff
changeset
|
3644 |
99981
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3645 if (i == stop) |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3646 { |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3647 if (i == to) |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3648 break; |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3649 stop = to; |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3650 } |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3651 |
88747
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3652 starting_i = i; |
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3653 |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3654 if (CHAR_TABLE_P (vector)) |
99981
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3655 { |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3656 range_beg = i; |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3657 i = stop - 1; |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3658 val = char_table_ref_and_range (vector, range_beg, &range_beg, &i); |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3659 } |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3660 else |
88747
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3661 val = AREF (vector, i); |
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3662 definition = get_keyelt (val, 0); |
250 | 3663 |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3664 if (NILP (definition)) continue; |
17511
10ead0052174
(describe_vector): Test for suppressed commands in
Richard M. Stallman <rms@gnu.org>
parents:
17510
diff
changeset
|
3665 |
250 | 3666 /* Don't mention suppressed commands. */ |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3667 if (SYMBOLP (definition) && partial) |
250 | 3668 { |
17036 | 3669 Lisp_Object tem; |
3670 | |
3671 tem = Fget (definition, suppress); | |
3672 | |
3673 if (!NILP (tem)) continue; | |
250 | 3674 } |
3675 | |
88747
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3676 character = make_number (starting_i); |
89943
4c90ffeb71c5
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-15
Miles Bader <miles@gnu.org>
diff
changeset
|
3677 ASET (kludge, 0, character); |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3678 |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3679 /* If this binding is shadowed by some other map, ignore it. */ |
88380 | 3680 if (!NILP (shadow)) |
250 | 3681 { |
3682 Lisp_Object tem; | |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
3683 |
106972
d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
3684 tem = shadow_lookup (shadow, kludge, Qt, 0); |
250 | 3685 |
60066
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3686 if (!NILP (tem)) |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3687 { |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3688 if (mention_shadow) |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3689 this_shadowed = 1; |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3690 else |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3691 continue; |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3692 } |
250 | 3693 } |
3694 | |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3695 /* 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
|
3696 one in the same keymap. */ |
88380 | 3697 if (!NILP (entire_map)) |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3698 { |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3699 Lisp_Object tem; |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3700 |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3701 tem = Flookup_key (entire_map, kludge, Qt); |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3702 |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
3703 if (!EQ (tem, definition)) |
11973
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3704 continue; |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3705 } |
4e0f3e3b4cc7
(describe_vector): New arg entire_map.
Karl Heuer <kwzh@gnu.org>
parents:
11924
diff
changeset
|
3706 |
250 | 3707 if (first) |
3708 { | |
88747
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3709 insert ("\n", 1); |
250 | 3710 first = 0; |
3711 } | |
3712 | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3713 /* 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
|
3714 if (!NILP (elt_prefix)) |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3715 insert1 (elt_prefix); |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3716 |
89943
4c90ffeb71c5
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-15
Miles Bader <miles@gnu.org>
diff
changeset
|
3717 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
|
3718 |
17795
41b7d56b62fb
(describe_vector): Identify charset row numbers clearly.
Richard M. Stallman <rms@gnu.org>
parents:
17788
diff
changeset
|
3719 /* Find all consecutive characters or rows that have the same |
99981
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3720 definition. But, VECTOR is a char-table, we had better put a |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3721 boundary between normal characters (-#x3FFF7F) and 8-bit |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3722 characters (#x3FFF80-). */ |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3723 if (CHAR_TABLE_P (vector)) |
99981
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3724 { |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3725 while (i + 1 < stop |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3726 && (range_beg = i + 1, range_end = stop - 1, |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3727 val = char_table_ref_and_range (vector, range_beg, |
88747
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3728 &range_beg, &range_end), |
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3729 tem2 = get_keyelt (val, 0), |
f35665df510f
(describe_vector): Handle a char-table directly here.
Kenichi Handa <handa@m17n.org>
parents:
88380
diff
changeset
|
3730 !NILP (tem2)) |
99981
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3731 && !NILP (Fequal (tem2, definition))) |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3732 i = range_end; |
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3733 } |
17327
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3734 else |
99981
ec7ddeda2233
(describe_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
96747
diff
changeset
|
3735 while (i + 1 < stop |
32846
c1b3ab2a1ccc
Use AREF, ASET and ASIZE macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32844
diff
changeset
|
3736 && (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
|
3737 !NILP (tem2)) |
0cb065f8702e
(describe_vector): Adjusted for the new structure of Lisp_Char_Table.
Kenichi Handa <handa@m17n.org>
parents:
17264
diff
changeset
|
3738 && !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
|
3739 i++; |
45279
220c13a65624
(keymap_parent): New fun, extracted from Fkeymap_parent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45235
diff
changeset
|
3740 |
250 | 3741 /* If we have a range of more than one character, |
3742 print where the range reaches to. */ | |
3743 | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3744 if (i != starting_i) |
250 | 3745 { |
3746 insert (" .. ", 4); | |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3747 |
54925
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3748 ASET (kludge, 0, make_number (i)); |
f0a7441d22f6
(Fkey_description): Add optional PREFIX arg.
Kim F. Storm <storm@cua.dk>
parents:
53808
diff
changeset
|
3749 |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3750 if (!NILP (elt_prefix)) |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3751 insert1 (elt_prefix); |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3752 |
89943
4c90ffeb71c5
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-15
Miles Bader <miles@gnu.org>
diff
changeset
|
3753 insert1 (Fkey_description (kludge, prefix)); |
250 | 3754 } |
3755 | |
3756 /* Print a description of the definition of this character. | |
3757 elt_describer will take care of spacing out far enough | |
3758 for alignment purposes. */ | |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3759 (*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
|
3760 |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3761 if (this_shadowed) |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3762 { |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3763 SET_PT (PT - 1); |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3764 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
|
3765 SET_PT (PT + 1); |
eca75f16d020
(describe_map_tree): New arg MENTION_SHADOW. Calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
59754
diff
changeset
|
3766 } |
250 | 3767 } |
3768 | |
89810
743cb02a49dd
(describe_vector): Handle default value of a char table.
Kenichi Handa <handa@m17n.org>
parents:
89655
diff
changeset
|
3769 if (CHAR_TABLE_P (vector) && ! NILP (XCHAR_TABLE (vector)->defalt)) |
17036 | 3770 { |
89810
743cb02a49dd
(describe_vector): Handle default value of a char table.
Kenichi Handa <handa@m17n.org>
parents:
89655
diff
changeset
|
3771 if (!NILP (elt_prefix)) |
743cb02a49dd
(describe_vector): Handle default value of a char table.
Kenichi Handa <handa@m17n.org>
parents:
89655
diff
changeset
|
3772 insert1 (elt_prefix); |
743cb02a49dd
(describe_vector): Handle default value of a char table.
Kenichi Handa <handa@m17n.org>
parents:
89655
diff
changeset
|
3773 insert ("default", 7); |
41293
3db86c7bf56f
(Fdescribe_vector): Add `describer' parameter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41001
diff
changeset
|
3774 (*elt_describer) (XCHAR_TABLE (vector)->defalt, args); |
17036 | 3775 } |
3776 | |
250 | 3777 UNGCPRO; |
3778 } | |
3779 | |
465 | 3780 /* 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
|
3781 static Lisp_Object apropos_predicate; |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3782 static Lisp_Object apropos_accumulate; |
250 | 3783 |
3784 static void | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3785 apropos_accum (Lisp_Object symbol, Lisp_Object string) |
250 | 3786 { |
3787 register Lisp_Object tem; | |
3788 | |
3789 tem = Fstring_match (string, Fsymbol_name (symbol), Qnil); | |
485 | 3790 if (!NILP (tem) && !NILP (apropos_predicate)) |
250 | 3791 tem = call1 (apropos_predicate, symbol); |
485 | 3792 if (!NILP (tem)) |
250 | 3793 apropos_accumulate = Fcons (symbol, apropos_accumulate); |
3794 } | |
3795 | |
45619
dbd65bd8bb4f
(describe_command): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
45404
diff
changeset
|
3796 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
|
3797 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
|
3798 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
|
3799 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
|
3800 Return list of symbols found. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
3801 (Lisp_Object regexp, Lisp_Object predicate) |
250 | 3802 { |
49059
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3803 Lisp_Object tem; |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40625
diff
changeset
|
3804 CHECK_STRING (regexp); |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
3805 apropos_predicate = predicate; |
250 | 3806 apropos_accumulate = Qnil; |
14080
439185f0ef37
(Fkeymapp, Fdefine_prefix_command, Faccessible_keymaps,
Erik Naggum <erik@naggum.no>
parents:
13947
diff
changeset
|
3807 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
|
3808 tem = Fsort (apropos_accumulate, Qstring_lessp); |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3809 apropos_accumulate = Qnil; |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3810 apropos_predicate = Qnil; |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3811 return tem; |
250 | 3812 } |
3813 | |
21514 | 3814 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3815 syms_of_keymap (void) |
250 | 3816 { |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3817 Qkeymap = intern_c_string ("keymap"); |
250 | 3818 staticpro (&Qkeymap); |
49059
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3819 staticpro (&apropos_predicate); |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3820 staticpro (&apropos_accumulate); |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3821 apropos_predicate = Qnil; |
435da46787dd
(apropos_predicate, apropos_accumulate): Make them static.
Richard M. Stallman <rms@gnu.org>
parents:
46470
diff
changeset
|
3822 apropos_accumulate = Qnil; |
250 | 3823 |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3824 Qkeymap_canonicalize = intern_c_string ("keymap-canonicalize"); |
93664
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
3825 staticpro (&Qkeymap_canonicalize); |
c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93205
diff
changeset
|
3826 |
17788
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3827 /* 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
|
3828 create char tables. */ |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3829 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
|
3830 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3831 /* 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
|
3832 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
|
3833 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
|
3834 |
208d71ea3a4f
(get_keyelt): Handle an indirect entry with meta char.
Richard M. Stallman <rms@gnu.org>
parents:
17511
diff
changeset
|
3835 global_map = Fmake_keymap (Qnil); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3836 Fset (intern_c_string ("global-map"), global_map); |
250 | 3837 |
16125
2e0a45264368
(syms_of_keymap): staticpro current_global_map;
Richard M. Stallman <rms@gnu.org>
parents:
15422
diff
changeset
|
3838 current_global_map = global_map; |
16227
6acf08913847
(syms_of_keymap): staticpro global_map.
Erik Naggum <erik@naggum.no>
parents:
16125
diff
changeset
|
3839 staticpro (&global_map); |
16125
2e0a45264368
(syms_of_keymap): staticpro current_global_map;
Richard M. Stallman <rms@gnu.org>
parents:
15422
diff
changeset
|
3840 staticpro (¤t_global_map); |
2e0a45264368
(syms_of_keymap): staticpro current_global_map;
Richard M. Stallman <rms@gnu.org>
parents:
15422
diff
changeset
|
3841 |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
3842 meta_map = Fmake_keymap (Qnil); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3843 Fset (intern_c_string ("esc-map"), meta_map); |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3844 Ffset (intern_c_string ("ESC-prefix"), meta_map); |
250 | 3845 |
1095
6578f07e9eb8
(Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
647
diff
changeset
|
3846 control_x_map = Fmake_keymap (Qnil); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3847 Fset (intern_c_string ("ctl-x-map"), control_x_map); |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3848 Ffset (intern_c_string ("Control-X-prefix"), control_x_map); |
250 | 3849 |
42378
9f96219e833e
(Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents:
42206
diff
changeset
|
3850 exclude_keys |
105878
0b36e1e1cf47
* keymap.c (syms_of_keymap): Construct exclude_keys in pure memory.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105877
diff
changeset
|
3851 = pure_cons (pure_cons (make_pure_c_string ("DEL"), make_pure_c_string ("\\d")), |
0b36e1e1cf47
* keymap.c (syms_of_keymap): Construct exclude_keys in pure memory.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105877
diff
changeset
|
3852 pure_cons (pure_cons (make_pure_c_string ("TAB"), make_pure_c_string ("\\t")), |
0b36e1e1cf47
* keymap.c (syms_of_keymap): Construct exclude_keys in pure memory.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105877
diff
changeset
|
3853 pure_cons (pure_cons (make_pure_c_string ("RET"), make_pure_c_string ("\\r")), |
0b36e1e1cf47
* keymap.c (syms_of_keymap): Construct exclude_keys in pure memory.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105877
diff
changeset
|
3854 pure_cons (pure_cons (make_pure_c_string ("ESC"), make_pure_c_string ("\\e")), |
0b36e1e1cf47
* keymap.c (syms_of_keymap): Construct exclude_keys in pure memory.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105877
diff
changeset
|
3855 pure_cons (pure_cons (make_pure_c_string ("SPC"), make_pure_c_string (" ")), |
42378
9f96219e833e
(Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents:
42206
diff
changeset
|
3856 Qnil))))); |
9f96219e833e
(Flookup_key): Add error message for trying to bind [DEL], [RET], etc.
Richard M. Stallman <rms@gnu.org>
parents:
42206
diff
changeset
|
3857 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
|
3858 |
12297
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
3859 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
|
3860 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
|
3861 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
|
3862 don't alter it yourself. */); |
12297
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
3863 Vdefine_key_rebound_commands = Qt; |
fe458a8ecfa2
(Vdefine_key_rebound_commands): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12262
diff
changeset
|
3864 |
250 | 3865 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
|
3866 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
|
3867 Vminibuffer_local_map = Fmake_sparse_keymap (Qnil); |
250 | 3868 |
3869 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
|
3870 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
|
3871 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
|
3872 Fset_keymap_parent (Vminibuffer_local_ns_map, Vminibuffer_local_map); |
250 | 3873 |
3874 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
|
3875 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
|
3876 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
|
3877 Fset_keymap_parent (Vminibuffer_local_completion_map, Vminibuffer_local_map); |
250 | 3878 |
68758
13c1b7c5f555
* data.c (Findirect_function): Add NOERROR arg. All callers changed
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
3879 DEFVAR_LISP ("minibuffer-local-filename-completion-map", |
67259
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3880 &Vminibuffer_local_filename_completion_map, |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3881 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
|
3882 Vminibuffer_local_filename_completion_map = Fmake_sparse_keymap (Qnil); |
68758
13c1b7c5f555
* data.c (Findirect_function): Add NOERROR arg. All callers changed
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
3883 Fset_keymap_parent (Vminibuffer_local_filename_completion_map, |
67259
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3884 Vminibuffer_local_completion_map); |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3885 |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3886 |
250 | 3887 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
|
3888 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
|
3889 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
|
3890 Fset_keymap_parent (Vminibuffer_local_must_match_map, |
ccaa40660e40
(Fkey_description): Use empty_string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39702
diff
changeset
|
3891 Vminibuffer_local_completion_map); |
250 | 3892 |
95575
d34a432d5863
* keymap.c (Vminibuffer_local_filename_must_match_map):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94963
diff
changeset
|
3893 DEFVAR_LISP ("minibuffer-local-filename-must-match-map", |
d34a432d5863
* keymap.c (Vminibuffer_local_filename_must_match_map):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94963
diff
changeset
|
3894 &Vminibuffer_local_filename_must_match_map, |
67259
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3895 doc: /* Local keymap for minibuffer input with completion for filenames with exact match. */); |
95575
d34a432d5863
* keymap.c (Vminibuffer_local_filename_must_match_map):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94963
diff
changeset
|
3896 Vminibuffer_local_filename_must_match_map = Fmake_sparse_keymap (Qnil); |
d34a432d5863
* keymap.c (Vminibuffer_local_filename_must_match_map):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94963
diff
changeset
|
3897 Fset_keymap_parent (Vminibuffer_local_filename_must_match_map, |
67259
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3898 Vminibuffer_local_must_match_map); |
134dc8d03e55
(Vminibuffer_local_filename_completion_map)
Eli Zaretskii <eliz@gnu.org>
parents:
67070
diff
changeset
|
3899 |
465 | 3900 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
|
3901 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
|
3902 Each element looks like (VARIABLE . KEYMAP); KEYMAP is used to read |
78501 | 3903 key sequences and look up bindings if VARIABLE's value is non-nil. |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40804
diff
changeset
|
3904 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
|
3905 in the list takes precedence. */); |
465 | 3906 Vminor_mode_map_alist = Qnil; |
3907 | |
20517
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
3908 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
|
3909 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
|
3910 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
|
3911 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
|
3912 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
|
3913 Vminor_mode_overriding_map_alist = Qnil; |
40bfe766d355
(Vminor_mode_overriding_map_alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20381
diff
changeset
|
3914 |
45222
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
3915 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
|
3916 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
|
3917 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
|
3918 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
|
3919 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
|
3920 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
|
3921 `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
|
3922 Vemulation_mode_map_alists = Qnil; |
c525c7445e1b
(Vemulation_mode_map_alists): New variable.
Kim F. Storm <storm@cua.dk>
parents:
43504
diff
changeset
|
3923 |
96747
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
3924 DEFVAR_LISP ("where-is-preferred-modifier", &Vwhere_is_preferred_modifier, |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
3925 doc: /* Preferred modifier to use for `where-is'. |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
3926 When a single binding is requested, `where-is' will return one that |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
3927 uses this modifier if possible. If nil, or if no such binding exists, |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
3928 bindings using keys without modifiers (or only with meta) will be |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
3929 preferred. */); |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
3930 Vwhere_is_preferred_modifier = Qnil; |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
3931 where_is_preferred_modifier = 0; |
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
3932 |
53808
aa6be081315b
(Vmouse_events): Rename from Vmenu_events.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52740
diff
changeset
|
3933 staticpro (&Vmouse_events); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3934 Vmouse_events = pure_cons (intern_c_string ("menu-bar"), |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3935 pure_cons (intern_c_string ("tool-bar"), |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3936 pure_cons (intern_c_string ("header-line"), |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3937 pure_cons (intern_c_string ("mode-line"), |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3938 pure_cons (intern_c_string ("mouse-1"), |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3939 pure_cons (intern_c_string ("mouse-2"), |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3940 pure_cons (intern_c_string ("mouse-3"), |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3941 pure_cons (intern_c_string ("mouse-4"), |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3942 pure_cons (intern_c_string ("mouse-5"), |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3943 Qnil))))))))); |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3944 |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3945 |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3946 Qsingle_key_description = intern_c_string ("single-key-description"); |
250 | 3947 staticpro (&Qsingle_key_description); |
3948 | |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3949 Qkey_description = intern_c_string ("key-description"); |
250 | 3950 staticpro (&Qkey_description); |
3951 | |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3952 Qkeymapp = intern_c_string ("keymapp"); |
250 | 3953 staticpro (&Qkeymapp); |
3954 | |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3955 Qnon_ascii = intern_c_string ("non-ascii"); |
2727
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
3956 staticpro (&Qnon_ascii); |
b8911c8b9700
* keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents:
2652
diff
changeset
|
3957 |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3958 Qmenu_item = intern_c_string ("menu-item"); |
21241
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
3959 staticpro (&Qmenu_item); |
31bd04a792c2
(fix_submap_inheritance, get_keyelt, store_in_keymap,
Richard M. Stallman <rms@gnu.org>
parents:
20883
diff
changeset
|
3960 |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3961 Qremap = intern_c_string ("remap"); |
43494
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
3962 staticpro (&Qremap); |
b5b76b498398
The following changes rework my patch of 2002-02-06 which
Kim F. Storm <storm@cua.dk>
parents:
43164
diff
changeset
|
3963 |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105744
diff
changeset
|
3964 QCadvertised_binding = intern_c_string (":advertised-binding"); |
104922
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
3965 staticpro (&QCadvertised_binding); |
c603ee2aac17
* keymap.c (QCadvertised_binding): New constant.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104919
diff
changeset
|
3966 |
49757
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
3967 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
|
3968 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
|
3969 |
32889
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
3970 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
|
3971 where_is_cache = Qnil; |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
3972 staticpro (&where_is_cache); |
673e3ef1f7f6
(where_is_cache, where_is_cache_keymaps): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32846
diff
changeset
|
3973 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
|
3974 |
250 | 3975 defsubr (&Skeymapp); |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
3976 defsubr (&Skeymap_parent); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
3977 defsubr (&Skeymap_prompt); |
15344
82615c826910
(Fkeymap_parent, Fset_keymap_parent): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
14738
diff
changeset
|
3978 defsubr (&Sset_keymap_parent); |
250 | 3979 defsubr (&Smake_keymap); |
3980 defsubr (&Smake_sparse_keymap); | |
93205
29c57be95740
(map_keymap_internal): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93204
diff
changeset
|
3981 defsubr (&Smap_keymap_internal); |
50798
2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50190
diff
changeset
|
3982 defsubr (&Smap_keymap); |
250 | 3983 defsubr (&Scopy_keymap); |
49757
9fe119b14379
Renamed remap-command to command-remapping. All uses changed.
Kim F. Storm <storm@cua.dk>
parents:
49720
diff
changeset
|
3984 defsubr (&Scommand_remapping); |
250 | 3985 defsubr (&Skey_binding); |
3986 defsubr (&Slocal_key_binding); | |
3987 defsubr (&Sglobal_key_binding); | |
465 | 3988 defsubr (&Sminor_mode_key_binding); |
250 | 3989 defsubr (&Sdefine_key); |
3990 defsubr (&Slookup_key); | |
3991 defsubr (&Sdefine_prefix_command); | |
3992 defsubr (&Suse_global_map); | |
3993 defsubr (&Suse_local_map); | |
3994 defsubr (&Scurrent_local_map); | |
3995 defsubr (&Scurrent_global_map); | |
465 | 3996 defsubr (&Scurrent_minor_mode_maps); |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
3997 defsubr (&Scurrent_active_maps); |
250 | 3998 defsubr (&Saccessible_keymaps); |
3999 defsubr (&Skey_description); | |
4000 defsubr (&Sdescribe_vector); | |
4001 defsubr (&Ssingle_key_description); | |
4002 defsubr (&Stext_char_description); | |
4003 defsubr (&Swhere_is_internal); | |
39689
0572449a62be
(Fkeymap_prompt, Fcurrent_active_maps): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
4004 defsubr (&Sdescribe_buffer_bindings); |
250 | 4005 defsubr (&Sapropos_internal); |
4006 } | |
4007 | |
21514 | 4008 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
4009 keys_of_keymap (void) |
250 | 4010 { |
4011 initial_define_key (global_map, 033, "ESC-prefix"); | |
96747
ebf3bd5f0017
* keymap.c: Remove all NS-specific code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96675
diff
changeset
|
4012 initial_define_key (global_map, Ctl ('X'), "Control-X-prefix"); |
250 | 4013 } |
52401 | 4014 |
4015 /* arch-tag: 6dd15c26-7cf1-41c4-b904-f42f7ddda463 | |
4016 (do not change this comment) */ |