annotate src/keymap.c @ 4890:dab300dfe449

(comint-scroll-to-bottom-on-input): Default to nil. (comint-mode): Use pre-command-hook, not before-change-function. (comint-preinput-scroll-to-bottom): Take no arguments. (comint-output-filter-functions): Renamed from comint-output-filter-hook. (comint-output-filter): Pass STRING as arg to output hook functions. (comint-preinput-scroll-to-bottom): Take an arg. Move point to new process mark if it was at the old one. Scroll so only if point is at or after the process mark. When scrolling, put end of text on bottom line, regardless of point.
author Richard M. Stallman <rms@gnu.org>
date Mon, 25 Oct 1993 20:01:29 +0000
parents 1fc792473491
children bbe5bba17b10
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Manipulation of keymaps
2961
e94a593c3952 Updated copyright years.
Jim Blandy <jimb@redhat.com>
parents: 2886
diff changeset
2 Copyright (C) 1985, 1986, 1987, 1988, 1993 Free Software Foundation, Inc.
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 517
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4575
diff changeset
21 #include <config.h>
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 #include <stdio.h>
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #undef NULL
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include "lisp.h"
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include "commands.h"
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 #include "buffer.h"
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
27 #include "keyboard.h"
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
28 #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
29 #include "blockinput.h"
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 #define min(a, b) ((a) < (b) ? (a) : (b))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
33 /* The number of elements in keymap vectors. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 #define DENSE_TABLE_SIZE (0200)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 /* Actually allocate storage for these variables */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 Lisp_Object current_global_map; /* Current global keymap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 Lisp_Object global_map; /* default global key bindings */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 Lisp_Object meta_map; /* The keymap used for globally bound
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 ESC-prefixed default commands */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 Lisp_Object control_x_map; /* The keymap used for globally bound
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 C-x-prefixed default commands */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 /* was MinibufLocalMap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 Lisp_Object Vminibuffer_local_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 /* The keymap used by the minibuf for local
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 bindings when spaces are allowed in the
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 minibuf */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 /* was MinibufLocalNSMap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 Lisp_Object Vminibuffer_local_ns_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 /* The keymap used by the minibuf for local
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 bindings when spaces are not encouraged
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 in the minibuf */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 /* keymap used for minibuffers when doing completion */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 /* was MinibufLocalCompletionMap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 Lisp_Object Vminibuffer_local_completion_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 /* keymap used for minibuffers when doing completion and require a match */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 /* was MinibufLocalMustMatchMap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 Lisp_Object Vminibuffer_local_must_match_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
68 /* Alist of minor mode variables and keymaps. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
69 Lisp_Object Vminor_mode_map_alist;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
70
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
71 /* Keymap mapping ASCII function key sequences onto their preferred forms.
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
72 Initialized by the terminal-specific lisp files. See DEFVAR for more
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
73 documentation. */
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
74 Lisp_Object Vfunction_key_map;
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
75
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
76 Lisp_Object Qkeymapp, Qkeymap, Qnon_ascii;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77
2886
ad36d1481295 Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2790
diff changeset
78 /* A char with the CHAR_META bit set in a vector or the 0200 bit set
ad36d1481295 Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2790
diff changeset
79 in a string key sequence is equivalent to prefixing with this
ad36d1481295 Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2790
diff changeset
80 character. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 extern Lisp_Object meta_prefix_char;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 void describe_map_tree ();
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
84 static Lisp_Object define_as_prefix ();
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 static Lisp_Object describe_buffer_bindings ();
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 static void describe_command ();
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 static void describe_map ();
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
88 static void describe_map_2 ();
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
90 /* Keymap object support - constructors and predicates. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
91
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
92 DEFUN ("make-keymap", Fmake_keymap, Smake_keymap, 0, 1, 0,
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 "Construct and return a new keymap, of the form (keymap VECTOR . ALIST).\n\
2790
cf431814ce6a (access_keymap): Handle any length vector.
Richard M. Stallman <rms@gnu.org>
parents: 2755
diff changeset
94 VECTOR is a vector which holds the bindings for the ASCII\n\
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 characters. ALIST is an assoc-list which holds bindings for function keys,\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 mouse events, and any other things that appear in the input stream.\n\
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
97 All entries in it are initially nil, meaning \"command undefined\".\n\n\
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
98 The optional arg STRING supplies a menu name for the keymap\n\
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
99 in case you use it as a menu with `x-popup-menu'.")
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
100 (string)
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
101 Lisp_Object string;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 {
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
103 Lisp_Object tail;
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
104 if (!NILP (string))
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
105 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
106 else
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
107 tail = Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 return Fcons (Qkeymap,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 Fcons (Fmake_vector (make_number (DENSE_TABLE_SIZE), Qnil),
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
110 tail));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
113 DEFUN ("make-sparse-keymap", Fmake_sparse_keymap, Smake_sparse_keymap, 0, 1, 0,
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 "Construct and return a new sparse-keymap list.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 Its car is `keymap' and its cdr is an alist of (CHAR . DEFINITION),\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 which binds the character CHAR to DEFINITION, or (SYMBOL . DEFINITION),\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 which binds the function key or mouse event SYMBOL to DEFINITION.\n\
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
118 Initially the alist is nil.\n\n\
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
119 The optional arg STRING supplies a menu name for the keymap\n\
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
120 in case you use it as a menu with `x-popup-menu'.")
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
121 (string)
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
122 Lisp_Object string;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 {
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
124 if (!NILP (string))
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
125 return Fcons (Qkeymap, Fcons (string, Qnil));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 return Fcons (Qkeymap, Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 /* This function is used for installing the standard key bindings
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 at initialization time.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 For example:
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
134 initial_define_key (control_x_map, Ctl('X'), "exchange-point-and-mark"); */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 initial_define_key (keymap, key, defname)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 int key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 char *defname;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 store_in_keymap (keymap, make_number (key), intern (defname));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
145 void
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
146 initial_define_lispy_key (keymap, keyname, defname)
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
147 Lisp_Object keymap;
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
148 char *keyname;
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
149 char *defname;
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
150 {
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
151 store_in_keymap (keymap, intern (keyname), intern (defname));
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
152 }
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
153
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 /* Define character fromchar in map frommap as an alias for character
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 tochar in map tomap. Subsequent redefinitions of the latter WILL
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 affect the former. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 #if 0
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 synkey (frommap, fromchar, tomap, tochar)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 struct Lisp_Vector *frommap, *tomap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 int fromchar, tochar;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 Lisp_Object v, c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 XSET (v, Lisp_Vector, tomap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 XFASTINT (c) = tochar;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 frommap->contents[fromchar] = Fcons (v, c);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 #endif /* 0 */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 DEFUN ("keymapp", Fkeymapp, Skeymapp, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 "Return t if ARG is a keymap.\n\
362
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
173 \n\
2790
cf431814ce6a (access_keymap): Handle any length vector.
Richard M. Stallman <rms@gnu.org>
parents: 2755
diff changeset
174 A keymap is a list (keymap . ALIST),\n\
362
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
175 or a symbol whose function definition is a keymap is itself a keymap.\n\
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
176 ALIST elements look like (CHAR . DEFN) or (SYMBOL . DEFN);\n\
2790
cf431814ce6a (access_keymap): Handle any length vector.
Richard M. Stallman <rms@gnu.org>
parents: 2755
diff changeset
177 a vector of densely packed bindings for small character codes\n\
cf431814ce6a (access_keymap): Handle any length vector.
Richard M. Stallman <rms@gnu.org>
parents: 2755
diff changeset
178 is also allowed as an element.")
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 (object)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 Lisp_Object object;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 {
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
182 return (NILP (get_keymap_1 (object, 0, 0)) ? Qnil : Qt);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 /* 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
186 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
187
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
188 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
189 is an autoload form, do the autoload and try again.
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
190
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
191 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
192 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
193
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
194 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
195 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
196 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
197 but it seems to me that only read_key_sequence, Flookup_key, and
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
198 Fdefine_key should cause keymaps to be autoloaded. */
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
199
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 Lisp_Object
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
201 get_keymap_1 (object, error, autoload)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 Lisp_Object object;
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
203 int error, autoload;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 {
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
205 Lisp_Object tem;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
207 autoload_retry:
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 517
diff changeset
208 tem = indirect_function (object);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 if (CONSP (tem) && EQ (XCONS (tem)->car, Qkeymap))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 return tem;
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
211
1566
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
212 /* Should we do an autoload? Autoload forms for keymaps have
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
213 Qkeymap as their fifth element. */
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
214 if (autoload
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
215 && XTYPE (object) == Lisp_Symbol
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
216 && CONSP (tem)
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
217 && EQ (XCONS (tem)->car, Qautoload))
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
218 {
1566
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
219 Lisp_Object tail;
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
220
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
221 tail = Fnth (make_number (4), tem);
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
222 if (EQ (tail, Qkeymap))
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
223 {
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
224 struct gcpro gcpro1, gcpro2;
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
225
3691
49ce2242f5c1 (get_keymap_1): Add missing semicolon.
Richard M. Stallman <rms@gnu.org>
parents: 3674
diff changeset
226 GCPRO2 (tem, object);
49ce2242f5c1 (get_keymap_1): Add missing semicolon.
Richard M. Stallman <rms@gnu.org>
parents: 3674
diff changeset
227 do_autoload (tem, 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
228 UNGCPRO;
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
229
1566
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
230 goto autoload_retry;
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
231 }
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
232 }
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
233
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 if (error)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 wrong_type_argument (Qkeymapp, object);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
236 else
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
237 return Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
240
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
241 /* Follow any symbol chaining, and return the keymap denoted by OBJECT.
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
242 If OBJECT doesn't denote a keymap at all, signal an error. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 Lisp_Object
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 get_keymap (object)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 Lisp_Object object;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 {
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
247 return get_keymap_1 (object, 0, 0);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
251 /* 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
252 Note that this does only one level of lookup; IDX must be a single
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
253 event, not a sequence.
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
254
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
255 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
256 bindings; any key left unmentioned by other tables and bindings is
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
257 given the binding of Qt.
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
258
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
259 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
260
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
261 If NOINHERIT, don't accept a subkeymap found in an inherited keymap. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 Lisp_Object
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
264 access_keymap (map, idx, t_ok, noinherit)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 Lisp_Object map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 Lisp_Object idx;
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
267 int t_ok;
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
268 int noinherit;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 {
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
270 int noprefix = 0;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
271 Lisp_Object val;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
272
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 /* If idx is a list (some sort of mouse click, perhaps?),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 the index we want to use is the car of the list, which
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 ought to be a symbol. */
1315
884c3d7e7172 * keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents: 1264
diff changeset
276 idx = EVENT_HEAD (idx);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
278 /* 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
279 be put in the canonical order. */
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
280 if (XTYPE (idx) == Lisp_Symbol)
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
281 idx = reorder_modifiers (idx);
3515
9d0af0f2dc0d (access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents: 3425
diff changeset
282 else if (INTEGERP (idx))
9d0af0f2dc0d (access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents: 3425
diff changeset
283 /* 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
284 with more than 24 bits of integer. */
3632
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
285 XFASTINT (idx) = XINT (idx) & (CHAR_META | (CHAR_META - 1));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
288 Lisp_Object tail;
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
289 Lisp_Object t_binding = Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
291 for (tail = map; CONSP (tail); tail = XCONS (tail)->cdr)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
292 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
293 Lisp_Object binding = XCONS (tail)->car;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
295 switch (XTYPE (binding))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
296 {
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
297 case Lisp_Symbol:
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
298 /* If NOINHERIT, stop finding prefix definitions
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
299 after we pass a second occurrence of the `keymap' symbol. */
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
300 if (noinherit && EQ (binding, Qkeymap) && ! EQ (tail, map))
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
301 noprefix = 1;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
302 break;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
303
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
304 case Lisp_Cons:
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
305 if (EQ (XCONS (binding)->car, idx))
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
306 {
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
307 val = XCONS (binding)->cdr;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
308 if (noprefix && CONSP (val) && EQ (XCONS (val)->car, Qkeymap))
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
309 return Qnil;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
310 return val;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
311 }
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
312 if (t_ok && EQ (XCONS (binding)->car, Qt))
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
313 t_binding = XCONS (binding)->cdr;
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
314 break;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
315
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
316 case Lisp_Vector:
2790
cf431814ce6a (access_keymap): Handle any length vector.
Richard M. Stallman <rms@gnu.org>
parents: 2755
diff changeset
317 if (XTYPE (idx) == Lisp_Int
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
318 && XINT (idx) >= 0
2790
cf431814ce6a (access_keymap): Handle any length vector.
Richard M. Stallman <rms@gnu.org>
parents: 2755
diff changeset
319 && XINT (idx) < XVECTOR (binding)->size)
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
320 {
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
321 val = XVECTOR (binding)->contents[XINT (idx)];
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
322 if (noprefix && CONSP (val) && EQ (XCONS (val)->car, Qkeymap))
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
323 return Qnil;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
324 return val;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
325 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
326 break;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
327 }
1264
6ba9d5aaace6 * keymap.c (access_keymap): Don't forget to QUIT while scanning
Jim Blandy <jimb@redhat.com>
parents: 1236
diff changeset
328
6ba9d5aaace6 * keymap.c (access_keymap): Don't forget to QUIT while scanning
Jim Blandy <jimb@redhat.com>
parents: 1236
diff changeset
329 QUIT;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 }
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
331
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
332 return t_binding;
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
333 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 /* Given OBJECT which was found in a slot in a keymap,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 trace indirect definitions to get the actual definition of that slot.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 An indirect definition is a list of the form
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 (KEYMAP . INDEX), where KEYMAP is a keymap or a symbol defined as one
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 and INDEX is the object to look up in KEYMAP to yield the definition.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 Also if OBJECT has a menu string as the first element,
1160
f7b55bfe1c05 (get_keyelt): Skip menu help string after menu item name.
Richard M. Stallman <rms@gnu.org>
parents: 1120
diff changeset
343 remove that. Also remove a menu help string as second element. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 Lisp_Object
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 get_keyelt (object)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 register Lisp_Object object;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 while (1)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 register Lisp_Object map, tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
353 /* If the contents are (KEYMAP . ELEMENT), go indirect. */
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
354 map = get_keymap_1 (Fcar_safe (object), 0, 0);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 tem = Fkeymapp (map);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
356 if (!NILP (tem))
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
357 object = access_keymap (map, Fcdr (object), 0, 0);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359 /* If the keymap contents looks like (STRING . DEFN),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 use DEFN.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 Keymap alist elements like (CHAR MENUSTRING . DEFN)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 will be used by HierarKey menus. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 else if (XTYPE (object) == Lisp_Cons
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 && XTYPE (XCONS (object)->car) == Lisp_String)
1160
f7b55bfe1c05 (get_keyelt): Skip menu help string after menu item name.
Richard M. Stallman <rms@gnu.org>
parents: 1120
diff changeset
365 {
f7b55bfe1c05 (get_keyelt): Skip menu help string after menu item name.
Richard M. Stallman <rms@gnu.org>
parents: 1120
diff changeset
366 object = XCONS (object)->cdr;
f7b55bfe1c05 (get_keyelt): Skip menu help string after menu item name.
Richard M. Stallman <rms@gnu.org>
parents: 1120
diff changeset
367 /* Also remove a menu help string, if any,
f7b55bfe1c05 (get_keyelt): Skip menu help string after menu item name.
Richard M. Stallman <rms@gnu.org>
parents: 1120
diff changeset
368 following the menu item name. */
f7b55bfe1c05 (get_keyelt): Skip menu help string after menu item name.
Richard M. Stallman <rms@gnu.org>
parents: 1120
diff changeset
369 if (XTYPE (object) == Lisp_Cons
f7b55bfe1c05 (get_keyelt): Skip menu help string after menu item name.
Richard M. Stallman <rms@gnu.org>
parents: 1120
diff changeset
370 && XTYPE (XCONS (object)->car) == Lisp_String)
f7b55bfe1c05 (get_keyelt): Skip menu help string after menu item name.
Richard M. Stallman <rms@gnu.org>
parents: 1120
diff changeset
371 object = XCONS (object)->cdr;
f7b55bfe1c05 (get_keyelt): Skip menu help string after menu item name.
Richard M. Stallman <rms@gnu.org>
parents: 1120
diff changeset
372 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375 /* Anything else is really the value. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 return object;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 Lisp_Object
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 store_in_keymap (keymap, idx, def)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 register Lisp_Object idx;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 register Lisp_Object def;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
386 if (XTYPE (keymap) != Lisp_Cons
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
387 || ! EQ (XCONS (keymap)->car, Qkeymap))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
388 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
389
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 /* If idx is a list (some sort of mouse click, perhaps?),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 the index we want to use is the car of the list, which
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 ought to be a symbol. */
1315
884c3d7e7172 * keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents: 1264
diff changeset
393 idx = EVENT_HEAD (idx);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
395 /* 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
396 be put in the canonical order. */
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
397 if (XTYPE (idx) == Lisp_Symbol)
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
398 idx = reorder_modifiers (idx);
3515
9d0af0f2dc0d (access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents: 3425
diff changeset
399 else if (INTEGERP (idx))
9d0af0f2dc0d (access_keymap, store_in_keymap): Discard meaningless
Richard M. Stallman <rms@gnu.org>
parents: 3425
diff changeset
400 /* 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
401 with more than 24 bits of integer. */
3632
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
402 XFASTINT (idx) = XINT (idx) & (CHAR_META | (CHAR_META - 1));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
404 /* 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
405 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
406 Lisp_Object tail;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
408 /* 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
409 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
410 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
411 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
412 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
413 front of the keymap. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
414 Lisp_Object insertion_point = keymap;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
415
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
416 for (tail = XCONS (keymap)->cdr; CONSP (tail); tail = XCONS (tail)->cdr)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
418 Lisp_Object elt = XCONS (tail)->car;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
419
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
420 switch (XTYPE (elt))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
421 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
422 case Lisp_Vector:
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
423 if (XTYPE (idx) == Lisp_Int
2790
cf431814ce6a (access_keymap): Handle any length vector.
Richard M. Stallman <rms@gnu.org>
parents: 2755
diff changeset
424 && XINT (idx) >= 0 && XINT (idx) < XVECTOR (elt)->size)
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
425 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
426 XVECTOR (elt)->contents[XFASTINT (idx)] = def;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
427 return def;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
428 }
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
429 insertion_point = tail;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
430 break;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
432 case Lisp_Cons:
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
433 if (EQ (idx, XCONS (elt)->car))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
434 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
435 XCONS (elt)->cdr = def;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
436 return def;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
437 }
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
438 break;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
440 case Lisp_Symbol:
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
441 /* If we find a 'keymap' symbol in the spine of KEYMAP,
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
442 then we must have found the start of a second keymap
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
443 being used as the tail of KEYMAP, and a binding for IDX
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
444 should be inserted before it. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
445 if (EQ (elt, Qkeymap))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
446 goto keymap_end;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
447 break;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
448 }
1441
929409595312 * keymap.c (store_in_keymap): Don't forget to QUIT in the
Jim Blandy <jimb@redhat.com>
parents: 1388
diff changeset
449
929409595312 * keymap.c (store_in_keymap): Don't forget to QUIT in the
Jim Blandy <jimb@redhat.com>
parents: 1388
diff changeset
450 QUIT;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
452
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
453 keymap_end:
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
454 /* 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
455 IDX. Let's add one. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
456 XCONS (insertion_point)->cdr =
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
457 Fcons (Fcons (idx, def), XCONS (insertion_point)->cdr);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
459
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 return def;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
463
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 DEFUN ("copy-keymap", Fcopy_keymap, Scopy_keymap, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 "Return a copy of the keymap KEYMAP.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 The copy starts out with the same definitions of KEYMAP,\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 but changing either the copy or KEYMAP does not affect the other.\n\
362
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
468 Any key definitions that are subkeymaps are recursively copied.\n\
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
469 However, a key definition which is a symbol whose definition is a keymap\n\
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
470 is not copied.")
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 (keymap)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 register Lisp_Object copy, tail;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 copy = Fcopy_alist (get_keymap (keymap));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
478 for (tail = copy; CONSP (tail); tail = XCONS (tail)->cdr)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
480 Lisp_Object elt = XCONS (tail)->car;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481
2790
cf431814ce6a (access_keymap): Handle any length vector.
Richard M. Stallman <rms@gnu.org>
parents: 2755
diff changeset
482 if (XTYPE (elt) == Lisp_Vector)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
484 int i;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
486 elt = Fcopy_sequence (elt);
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
487 XCONS (tail)->car = elt;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488
2790
cf431814ce6a (access_keymap): Handle any length vector.
Richard M. Stallman <rms@gnu.org>
parents: 2755
diff changeset
489 for (i = 0; i < XVECTOR (elt)->size; i++)
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
490 if (XTYPE (XVECTOR (elt)->contents[i]) != Lisp_Symbol
3674
cfa45731460e (Fcopy_keymap): Check Fkeymapp value with NILP.
Richard M. Stallman <rms@gnu.org>
parents: 3632
diff changeset
491 && ! NILP (Fkeymapp (XVECTOR (elt)->contents[i])))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
492 XVECTOR (elt)->contents[i] =
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
493 Fcopy_keymap (XVECTOR (elt)->contents[i]);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
495 else if (CONSP (elt)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
496 && XTYPE (XCONS (elt)->cdr) != Lisp_Symbol
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
497 && ! NILP (Fkeymapp (XCONS (elt)->cdr)))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 XCONS (elt)->cdr = Fcopy_keymap (XCONS (elt)->cdr);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 return copy;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
504 /* Simple Keymap mutators and accessors. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
505
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 DEFUN ("define-key", Fdefine_key, Sdefine_key, 3, 3, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 "Args KEYMAP, KEY, DEF. Define key sequence KEY, in KEYMAP, as DEF.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 KEYMAP is a keymap. KEY is a string or a vector of symbols and characters\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 meaning a sequence of keystrokes and events.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 DEF is anything that can be a key's definition:\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 nil (means key is undefined in this keymap),\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 a command (a Lisp function suitable for interactive calling)\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 a string (treated as a keyboard macro),\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 a keymap (to define a prefix key),\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 a symbol. When the key is looked up, the symbol will stand for its\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 function definition, which should at that time be one of the above,\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 or another symbol whose function definition is used, etc.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 a cons (STRING . DEFN), meaning that DEFN is the definition\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 (DEFN should be a valid definition in its own right),\n\
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
520 or a cons (KEYMAP . CHAR), meaning use definition of CHAR in map KEYMAP.\n\
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
521 \n\
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
522 If KEYMAP is a sparse keymap, the pair binding KEY to DEF is added at\n\
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
523 the front of KEYMAP.")
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 (keymap, key, def)
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
525 Lisp_Object keymap;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 Lisp_Object key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 Lisp_Object def;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 register int idx;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 register Lisp_Object c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 register Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 register Lisp_Object cmd;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 int metized = 0;
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
534 int meta_bit;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 int length;
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
536 struct gcpro gcpro1, gcpro2, gcpro3;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 keymap = get_keymap (keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 if (XTYPE (key) != Lisp_Vector
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 && XTYPE (key) != Lisp_String)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 key = wrong_type_argument (Qarrayp, key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
544 length = XFASTINT (Flength (key));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 if (length == 0)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
548 GCPRO3 (keymap, key, def);
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
549
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
550 if (XTYPE (key) == Lisp_Vector)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
551 meta_bit = meta_modifier;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
552 else
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
553 meta_bit = 0x80;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
554
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 idx = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 while (1)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 c = Faref (key, make_number (idx));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 if (XTYPE (c) == Lisp_Int
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
561 && (XINT (c) & meta_bit)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 && !metized)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 c = meta_prefix_char;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 metized = 1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569 if (XTYPE (c) == Lisp_Int)
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
570 XSETINT (c, XINT (c) & ~meta_bit);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 metized = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 idx++;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 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
577 RETURN_UNGCPRO (store_in_keymap (keymap, c, def));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
579 cmd = get_keyelt (access_keymap (keymap, c, 0, 1));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
581 /* If this key is undefined, make it a prefix. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
582 if (NILP (cmd))
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
583 cmd = define_as_prefix (keymap, c);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
585 keymap = get_keymap_1 (cmd, 0, 1);
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
586 if (NILP (keymap))
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1566
diff changeset
587 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1566
diff changeset
588 /* We must use Fkey_description rather than just passing key to
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1566
diff changeset
589 error; key might be a vector, not a string. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1566
diff changeset
590 Lisp_Object description = Fkey_description (key);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1566
diff changeset
591
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1566
diff changeset
592 error ("Key sequence %s uses invalid prefix characters",
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1566
diff changeset
593 XSTRING (description)->data);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1566
diff changeset
594 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 /* Value is number if KEY is too long; NIL if valid but has no definition. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
600 DEFUN ("lookup-key", Flookup_key, Slookup_key, 2, 3, 0,
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 "In keymap KEYMAP, look up key sequence KEY. Return the definition.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 nil means undefined. See doc of `define-key' for kinds of definitions.\n\
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
603 \n\
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 A number as value means KEY is \"too long\";\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 that is, characters or symbols in it except for the last one\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606 fail to be a valid sequence of prefix characters in KEYMAP.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 The number is how many characters at the front of KEY\n\
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
608 it takes to reach a non-prefix command.\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
609 \n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
610 Normally, `lookup-key' ignores bindings for t, which act as default\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
611 bindings, used when nothing else in the keymap applies; this makes it\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
612 useable as a general function for probing keymaps. However, if the\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
613 third optional argument ACCEPT-DEFAULT is non-nil, `lookup-key' will\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
614 recognize the default bindings, just as `read-key-sequence' does.")
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
615 (keymap, key, accept_default)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 register Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 Lisp_Object key;
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
618 Lisp_Object accept_default;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 register int idx;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 register Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 register Lisp_Object cmd;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 register Lisp_Object c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 int metized = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625 int length;
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
626 int t_ok = ! NILP (accept_default);
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
627 int meta_bit;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 keymap = get_keymap (keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 if (XTYPE (key) != Lisp_Vector
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 && XTYPE (key) != Lisp_String)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633 key = wrong_type_argument (Qarrayp, key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
635 length = XFASTINT (Flength (key));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 if (length == 0)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 return keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
639 if (XTYPE (key) == Lisp_Vector)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
640 meta_bit = meta_modifier;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
641 else
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
642 meta_bit = 0x80;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
643
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 idx = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 while (1)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 c = Faref (key, make_number (idx));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 if (XTYPE (c) == Lisp_Int
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
650 && (XINT (c) & meta_bit)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
651 && !metized)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653 c = meta_prefix_char;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 metized = 1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 if (XTYPE (c) == Lisp_Int)
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
659 XSETINT (c, XINT (c) & ~meta_bit);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 metized = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 idx++;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
665 cmd = get_keyelt (access_keymap (keymap, c, t_ok, 0));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 if (idx == length)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667 return cmd;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
669 keymap = get_keymap_1 (cmd, 0, 0);
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
670 if (NILP (keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 return make_number (idx);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 QUIT;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676
3735
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
677 /* 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
678 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
679 Return the keymap. */
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
680
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
681 static Lisp_Object
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
682 define_as_prefix (keymap, c)
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
683 Lisp_Object keymap, c;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
684 {
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
685 Lisp_Object inherit, cmd;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
686
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
687 cmd = Fmake_sparse_keymap (Qnil);
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
688 /* 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
689 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
690 inherit the other prefix definition. */
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
691 inherit = access_keymap (keymap, c, 0, 0);
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
692 if (NILP (inherit))
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
693 {
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
694 /* If there's an inherited keymap
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
695 and it doesn't define this key,
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
696 make it define this key. */
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
697 Lisp_Object tail;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
698
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
699 for (tail = Fcdr (keymap); CONSP (tail); tail = XCONS (tail)->cdr)
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
700 if (EQ (XCONS (tail)->car, Qkeymap))
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
701 break;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
702
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
703 if (!NILP (tail))
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
704 inherit = define_as_prefix (tail, c);
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
705 }
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
706
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
707 cmd = nconc2 (cmd, inherit);
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
708 store_in_keymap (keymap, c, cmd);
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
709
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
710 return cmd;
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
711 }
7193a99a87c1 Make prefix keys work with keymap inheritance
Richard M. Stallman <rms@gnu.org>
parents: 3691
diff changeset
712
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
713 /* 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
714
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 Lisp_Object
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 append_key (key_sequence, key)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 Lisp_Object key_sequence, key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 Lisp_Object args[2];
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 args[0] = key_sequence;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
723 args[1] = Fcons (key, Qnil);
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
724 return Fvconcat (2, args);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
728 /* Global, local, and minor mode keymap stuff. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
729
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
730 /* We can't put these variables inside current_minor_maps, since under
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
731 some systems, static gets macro-defined to be the empty string.
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
732 Ickypoo. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
733 static Lisp_Object *cmm_modes, *cmm_maps;
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
734 static int cmm_size;
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
735
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
736 /* Store a pointer to an array of the keymaps of the currently active
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
737 minor modes in *buf, and return the number of maps it contains.
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
738
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
739 This function always returns a pointer to the same buffer, and may
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
740 free or reallocate it, so if you want to keep it for a long time or
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
741 hand it out to lisp code, copy it. This procedure will be called
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
742 for every key sequence read, so the nice lispy approach (return a
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
743 new assoclist, list, what have you) for each invocation would
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
744 result in a lot of consing over time.
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
745
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
746 If we used xrealloc/xmalloc and ran out of memory, they would throw
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
747 back to the command loop, which would try to read a key sequence,
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
748 which would call this function again, resulting in an infinite
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
749 loop. Instead, we'll use realloc/malloc and silently truncate the
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
750 list, let the key sequence be read, and hope some other piece of
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
751 code signals the error. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
752 int
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
753 current_minor_maps (modeptr, mapptr)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
754 Lisp_Object **modeptr, **mapptr;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
755 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
756 int i = 0;
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
757 Lisp_Object alist, assoc, var, val;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
758
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
759 for (alist = Vminor_mode_map_alist;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
760 CONSP (alist);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
761 alist = XCONS (alist)->cdr)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
762 if (CONSP (assoc = XCONS (alist)->car)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
763 && XTYPE (var = XCONS (assoc)->car) == Lisp_Symbol
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
764 && ! EQ ((val = find_symbol_value (var)), Qunbound)
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
765 && ! NILP (val))
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
766 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
767 if (i >= cmm_size)
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
768 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
769 Lisp_Object *newmodes, *newmaps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
770
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
771 if (cmm_maps)
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
772 {
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2358
diff changeset
773 BLOCK_INPUT;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
774 newmodes = (Lisp_Object *) realloc (cmm_modes, cmm_size *= 2);
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
775 newmaps = (Lisp_Object *) realloc (cmm_maps, cmm_size);
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2358
diff changeset
776 UNBLOCK_INPUT;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
777 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
778 else
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
779 {
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2358
diff changeset
780 BLOCK_INPUT;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
781 newmodes = (Lisp_Object *) malloc (cmm_size = 30);
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
782 newmaps = (Lisp_Object *) malloc (cmm_size);
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2358
diff changeset
783 UNBLOCK_INPUT;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
784 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
785
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
786 if (newmaps && newmodes)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
787 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
788 cmm_modes = newmodes;
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
789 cmm_maps = newmaps;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
790 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
791 else
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
792 break;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
793 }
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
794 cmm_modes[i] = var;
2755
ed10207955a4 (current_minor_maps): Call Findirect_function, so symbols
Richard M. Stallman <rms@gnu.org>
parents: 2752
diff changeset
795 cmm_maps [i] = Findirect_function (XCONS (assoc)->cdr);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
796 i++;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
797 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
798
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
799 if (modeptr) *modeptr = cmm_modes;
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
800 if (mapptr) *mapptr = cmm_maps;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
801 return i;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
802 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
803
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
804 DEFUN ("key-binding", Fkey_binding, Skey_binding, 1, 2, 0,
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805 "Return the binding for command KEY in current keymaps.\n\
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
806 KEY is a string or vector, a sequence of keystrokes.\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
807 The binding is probably a symbol with a function definition.\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
808 \n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
809 Normally, `key-binding' ignores bindings for t, which act as default\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
810 bindings, used when nothing else in the keymap applies; this makes it\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
811 useable as a general function for probing keymaps. However, if the\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
812 third optional argument ACCEPT-DEFAULT is non-nil, `key-binding' will\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
813 recognize the default bindings, just as `read-key-sequence' does.")
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
814 (key, accept_default)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815 Lisp_Object key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816 {
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
817 Lisp_Object *maps, value;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
818 int nmaps, i;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
819
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
820 nmaps = current_minor_maps (0, &maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
821 for (i = 0; i < nmaps; i++)
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
822 if (! NILP (maps[i]))
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
823 {
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
824 value = Flookup_key (maps[i], key, accept_default);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
825 if (! NILP (value) && XTYPE (value) != Lisp_Int)
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
826 return value;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
827 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
828
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
829 if (! NILP (current_buffer->keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830 {
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
831 value = Flookup_key (current_buffer->keymap, key, accept_default);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
832 if (! NILP (value) && XTYPE (value) != Lisp_Int)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 return value;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834 }
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
835
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
836 value = Flookup_key (current_global_map, key, accept_default);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
837 if (! NILP (value) && XTYPE (value) != Lisp_Int)
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
838 return value;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
839
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
840 return Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
843 DEFUN ("local-key-binding", Flocal_key_binding, Slocal_key_binding, 1, 2, 0,
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 "Return the binding for command KEYS in current local keymap only.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 KEYS is a string, a sequence of keystrokes.\n\
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
846 The binding is probably a symbol with a function definition.\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
847 \n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
848 If optional argument ACCEPT-DEFAULT is non-nil, recognize default\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
849 bindings; see the description of `lookup-key' for more details about this.")
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
850 (keys, accept_default)
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
851 Lisp_Object keys, accept_default;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 register Lisp_Object map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854 map = current_buffer->keymap;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
855 if (NILP (map))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856 return Qnil;
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
857 return Flookup_key (map, keys, accept_default);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
860 DEFUN ("global-key-binding", Fglobal_key_binding, Sglobal_key_binding, 1, 2, 0,
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861 "Return the binding for command KEYS in current global keymap only.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 KEYS is a string, a sequence of keystrokes.\n\
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
863 The binding is probably a symbol with a function definition.\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
864 This function's return values are the same as those of lookup-key\n\
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
865 (which see).\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
866 \n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
867 If optional argument ACCEPT-DEFAULT is non-nil, recognize default\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
868 bindings; see the description of `lookup-key' for more details about this.")
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
869 (keys, accept_default)
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
870 Lisp_Object keys, accept_default;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871 {
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
872 return Flookup_key (current_global_map, keys, accept_default);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
875 DEFUN ("minor-mode-key-binding", Fminor_mode_key_binding, Sminor_mode_key_binding, 1, 2, 0,
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
876 "Find the visible minor mode bindings of KEY.\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
877 Return an alist of pairs (MODENAME . BINDING), where MODENAME is the\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
878 the symbol which names the minor mode binding KEY, and BINDING is\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
879 KEY's definition in that mode. In particular, if KEY has no\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
880 minor-mode bindings, return nil. If the first binding is a\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
881 non-prefix, all subsequent bindings will be omitted, since they would\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
882 be ignored. Similarly, the list doesn't include non-prefix bindings\n\
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
883 that come after prefix bindings.\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
884 \n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
885 If optional argument ACCEPT-DEFAULT is non-nil, recognize default\n\
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
886 bindings; see the description of `lookup-key' for more details about this.")
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
887 (key, accept_default)
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
888 Lisp_Object key, accept_default;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
889 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
890 Lisp_Object *modes, *maps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
891 int nmaps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
892 Lisp_Object binding;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
893 int i, j;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
894
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
895 nmaps = current_minor_maps (&modes, &maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
896
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
897 for (i = j = 0; i < nmaps; i++)
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
898 if (! NILP (maps[i])
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
899 && ! NILP (binding = Flookup_key (maps[i], key, accept_default))
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
900 && XTYPE (binding) != Lisp_Int)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
901 {
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
902 if (! NILP (get_keymap (binding)))
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
903 maps[j++] = Fcons (modes[i], binding);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
904 else if (j == 0)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
905 return Fcons (Fcons (modes[i], binding), Qnil);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
906 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
907
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
908 return Flist (j, maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
909 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
910
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 DEFUN ("global-set-key", Fglobal_set_key, Sglobal_set_key, 2, 2,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
912 "kSet key globally: \nCSet key %s to command: ",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
913 "Give KEY a global binding as COMMAND.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
914 COMMAND is a symbol naming an interactively-callable function.\n\
3542
f183be0dc237 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3515
diff changeset
915 KEY is a key sequence (a string or vector of characters or event types).\n\
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
916 Note that if KEY has a local binding in the current buffer\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
917 that local binding will continue to shadow any global binding.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
918 (keys, function)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
919 Lisp_Object keys, function;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
920 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
921 if (XTYPE (keys) != Lisp_Vector
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
922 && XTYPE (keys) != Lisp_String)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
923 keys = wrong_type_argument (Qarrayp, keys);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
924
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
925 Fdefine_key (current_global_map, keys, function);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
926 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
927 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
928
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
929 DEFUN ("local-set-key", Flocal_set_key, Slocal_set_key, 2, 2,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
930 "kSet key locally: \nCSet key %s locally to command: ",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
931 "Give KEY a local binding as COMMAND.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
932 COMMAND is a symbol naming an interactively-callable function.\n\
3542
f183be0dc237 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3515
diff changeset
933 KEY is a key sequence (a string or vector of characters or event types).\n\
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 The binding goes in the current buffer's local map,\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935 which is shared with other buffers in the same major mode.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 (keys, function)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937 Lisp_Object keys, function;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
938 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939 register Lisp_Object map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 map = current_buffer->keymap;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
941 if (NILP (map))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 {
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
943 map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944 current_buffer->keymap = map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
945 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947 if (XTYPE (keys) != Lisp_Vector
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 && XTYPE (keys) != Lisp_String)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
949 keys = wrong_type_argument (Qarrayp, keys);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 Fdefine_key (map, keys, function);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
953 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
954
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955 DEFUN ("global-unset-key", Fglobal_unset_key, Sglobal_unset_key,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 1, 1, "kUnset key globally: ",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957 "Remove global binding of KEY.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 KEY is a string representing a sequence of keystrokes.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
959 (keys)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
960 Lisp_Object keys;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
962 return Fglobal_set_key (keys, Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
963 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
964
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
965 DEFUN ("local-unset-key", Flocal_unset_key, Slocal_unset_key, 1, 1,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
966 "kUnset key locally: ",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
967 "Remove local binding of KEY.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
968 KEY is a string representing a sequence of keystrokes.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
969 (keys)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
970 Lisp_Object keys;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
971 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
972 if (!NILP (current_buffer->keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
973 Flocal_set_key (keys, Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
974 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
975 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
976
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
977 DEFUN ("define-prefix-command", Fdefine_prefix_command, Sdefine_prefix_command, 1, 2, 0,
2652
90485f37bfc3 * keymap.c (Fdefine_prefix_command): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2439
diff changeset
978 "Define COMMAND as a prefix command. COMMAND should be a symbol.\n\
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979 A new sparse keymap is stored as COMMAND's function definition and its value.\n\
362
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
980 If a second optional argument MAPVAR is given, the map is stored as\n\
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
981 its value instead of as COMMAND's value; but COMMAND is still defined\n\
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
982 as a function.")
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983 (name, mapvar)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 Lisp_Object name, mapvar;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986 Lisp_Object map;
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
987 map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 Ffset (name, map);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
989 if (!NILP (mapvar))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 Fset (mapvar, map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992 Fset (name, map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 return name;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996 DEFUN ("use-global-map", Fuse_global_map, Suse_global_map, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997 "Select KEYMAP as the global keymap.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998 (keymap)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 keymap = get_keymap (keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 current_global_map = keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 DEFUN ("use-local-map", Fuse_local_map, Suse_local_map, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 "Select KEYMAP as the local keymap.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 If KEYMAP is nil, that means no local keymap.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 (keymap)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1012 if (!NILP (keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 keymap = get_keymap (keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 current_buffer->keymap = keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 DEFUN ("current-local-map", Fcurrent_local_map, Scurrent_local_map, 0, 0, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 "Return current buffer's local keymap, or nil if it has none.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 ()
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024 return current_buffer->keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 DEFUN ("current-global-map", Fcurrent_global_map, Scurrent_global_map, 0, 0, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 "Return the current global keymap.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 ()
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 return current_global_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 }
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1033
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1034 DEFUN ("current-minor-mode-maps", Fcurrent_minor_mode_maps, Scurrent_minor_mode_maps, 0, 0, 0,
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1035 "Return a list of keymaps for the minor modes of the current buffer.")
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1036 ()
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1037 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1038 Lisp_Object *maps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1039 int nmaps = current_minor_maps (0, &maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1040
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1041 return Flist (nmaps, maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1042 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1044 /* Help functions for describing and documenting keymaps. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1045
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1046 DEFUN ("accessible-keymaps", Faccessible_keymaps, Saccessible_keymaps,
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1047 1, 2, 0,
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1048 "Find all keymaps accessible via prefix characters from KEYMAP.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1049 Returns a list of elements of the form (KEYS . MAP), where the sequence\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050 KEYS starting from KEYMAP gets you to MAP. These elements are ordered\n\
3962
38041a5069a8 (Faccessible_keymaps): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3952
diff changeset
1051 so that the KEYS increase in length. The first element is (\"\" . KEYMAP).\n\
38041a5069a8 (Faccessible_keymaps): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3952
diff changeset
1052 An optional argument PREFIX, if non-nil, should be a key sequence;\n\
38041a5069a8 (Faccessible_keymaps): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3952
diff changeset
1053 then the value includes only maps for prefixes that start with PREFIX.")
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1054 (startmap, prefix)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1055 Lisp_Object startmap, prefix;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1056 {
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1057 Lisp_Object maps, good_maps, tail;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1058 int prefixlen = 0;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1059
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1060 if (!NILP (prefix))
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1061 prefixlen = XINT (Flength (prefix));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1063 maps = Fcons (Fcons (Fmake_vector (make_number (0), Qnil),
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1064 get_keymap (startmap)),
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1065 Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 /* For each map in the list maps,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068 look at any other maps it points to,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 and stick them at the end if they are not already in the list.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 This is a breadth-first traversal, where tail is the queue of
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 nodes, and maps accumulates a list of all nodes visited. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1074 for (tail = maps; CONSP (tail); tail = XCONS (tail)->cdr)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 register Lisp_Object thisseq = Fcar (Fcar (tail));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 register Lisp_Object thismap = Fcdr (Fcar (tail));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078 Lisp_Object last = make_number (XINT (Flength (thisseq)) - 1);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080 /* Does the current sequence end in the meta-prefix-char? */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 int is_metized = (XINT (last) >= 0
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082 && EQ (Faref (thisseq, last), meta_prefix_char));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1084 for (; CONSP (thismap); thismap = XCONS (thismap)->cdr)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1085 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1086 Lisp_Object elt = XCONS (thismap)->car;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1088 QUIT;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1090 if (XTYPE (elt) == Lisp_Vector)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 register int i;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094 /* Vector keymap. Scan all the elements. */
2752
93eda5bbc4df (Faccessible_keymaps): Use whatever size the vector has.
Richard M. Stallman <rms@gnu.org>
parents: 2727
diff changeset
1095 for (i = 0; i < XVECTOR (elt)->size; i++)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1096 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097 register Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 register Lisp_Object cmd;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1100 cmd = get_keyelt (XVECTOR (elt)->contents[i]);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1101 if (NILP (cmd)) continue;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 tem = Fkeymapp (cmd);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1103 if (!NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 cmd = get_keymap (cmd);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106 /* Ignore keymaps that are already added to maps. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 tem = Frassq (cmd, maps);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1108 if (NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 /* If the last key in thisseq is meta-prefix-char,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 turn it into a meta-ized keystroke. We know
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 that the event we're about to append is an
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1113 ascii keystroke since we're processing a
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1114 keymap table. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 if (is_metized)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 {
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1117 int meta_bit = meta_modifier;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118 tem = Fcopy_sequence (thisseq);
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1119
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1120 Faset (tem, last, make_number (i | meta_bit));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122 /* This new sequence is the same length as
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 thisseq, so stick it in the list right
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 after this one. */
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1125 XCONS (tail)->cdr
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1126 = Fcons (Fcons (tem, cmd), XCONS (tail)->cdr);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 tem = append_key (thisseq, make_number (i));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 nconc2 (tail, Fcons (Fcons (tem, cmd), Qnil));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1136 }
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1137 else if (CONSP (elt))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139 register Lisp_Object cmd = get_keyelt (XCONS (elt)->cdr);
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1140 register Lisp_Object tem, filter;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142 /* Ignore definitions that aren't keymaps themselves. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1143 tem = Fkeymapp (cmd);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1144 if (!NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1145 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1146 /* Ignore keymaps that have been seen already. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1147 cmd = get_keymap (cmd);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148 tem = Frassq (cmd, maps);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1149 if (NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 {
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1151 /* Let elt be the event defined by this map entry. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 elt = XCONS (elt)->car;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154 /* If the last key in thisseq is meta-prefix-char, and
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 this entry is a binding for an ascii keystroke,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 turn it into a meta-ized keystroke. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1157 if (is_metized && XTYPE (elt) == Lisp_Int)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1158 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159 tem = Fcopy_sequence (thisseq);
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1160 Faset (tem, last,
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1161 make_number (XINT (elt) | meta_modifier));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1162
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 /* This new sequence is the same length as
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164 thisseq, so stick it in the list right
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 after this one. */
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1166 XCONS (tail)->cdr
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1167 = Fcons (Fcons (tem, cmd), XCONS (tail)->cdr);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 nconc2 (tail,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171 Fcons (Fcons (append_key (thisseq, elt), cmd),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172 Qnil));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1175 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1176 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1177 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1178
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1179 if (NILP (prefix))
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1180 return maps;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1181
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1182 /* Now find just the maps whose access prefixes start with PREFIX. */
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1183
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1184 good_maps = Qnil;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1185 for (; CONSP (maps); maps = XCONS (maps)->cdr)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1186 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1187 Lisp_Object elt, thisseq;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1188 elt = XCONS (maps)->car;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1189 thisseq = XCONS (elt)->car;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1190 /* The access prefix must be at least as long as PREFIX,
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1191 and the first elements must match those of PREFIX. */
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1192 if (XINT (Flength (thisseq)) >= prefixlen)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1193 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1194 int i;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1195 for (i = 0; i < prefixlen; i++)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1196 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1197 Lisp_Object i1;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1198 XFASTINT (i1) = i;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1199 if (!EQ (Faref (thisseq, i1), Faref (prefix, i1)))
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1200 break;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1201 }
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1202 if (i == prefixlen)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1203 good_maps = Fcons (elt, good_maps);
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1204 }
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1205 }
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1206
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1207 return Fnreverse (good_maps);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1208 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1209
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1210 Lisp_Object Qsingle_key_description, Qkey_description;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1212 DEFUN ("key-description", Fkey_description, Skey_description, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1213 "Return a pretty description of key-sequence KEYS.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1214 Control characters turn into \"C-foo\" sequences, meta into \"M-foo\"\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1215 spaces are put between sequence elements, etc.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 (keys)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1217 Lisp_Object keys;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1218 {
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1219 if (XTYPE (keys) == Lisp_String)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1220 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1221 Lisp_Object vector;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1222 int i;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1223 vector = Fmake_vector (Flength (keys), Qnil);
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1224 for (i = 0; i < XSTRING (keys)->size; i++)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1225 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1226 if (XSTRING (keys)->data[i] & 0x80)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1227 XFASTINT (XVECTOR (vector)->contents[i])
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1228 = meta_modifier | (XSTRING (keys)->data[i] & ~0x80);
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1229 else
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1230 XFASTINT (XVECTOR (vector)->contents[i])
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1231 = XSTRING (keys)->data[i];
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1232 }
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1233 keys = vector;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1234 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1235 return Fmapconcat (Qsingle_key_description, keys, build_string (" "));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1236 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 char *
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 push_key_description (c, p)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240 register unsigned int c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1241 register char *p;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242 {
2343
ddb30eaf2f56 (push_key_description): Ignore bits above meta_modifier.
Richard M. Stallman <rms@gnu.org>
parents: 2093
diff changeset
1243 /* 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
1244 c &= meta_modifier | ~ - meta_modifier;
ddb30eaf2f56 (push_key_description): Ignore bits above meta_modifier.
Richard M. Stallman <rms@gnu.org>
parents: 2093
diff changeset
1245
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1246 if (c & alt_modifier)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1247 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1248 *p++ = 'A';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1249 *p++ = '-';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1250 c -= alt_modifier;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1251 }
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1252 if (c & ctrl_modifier)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1253 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1254 *p++ = 'C';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1255 *p++ = '-';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1256 c -= ctrl_modifier;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1257 }
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1258 if (c & hyper_modifier)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1259 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1260 *p++ = 'H';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1261 *p++ = '-';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1262 c -= hyper_modifier;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1263 }
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1264 if (c & meta_modifier)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266 *p++ = 'M';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1267 *p++ = '-';
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1268 c -= meta_modifier;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1269 }
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1270 if (c & shift_modifier)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1271 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1272 *p++ = 'S';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1273 *p++ = '-';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1274 c -= shift_modifier;
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1275 }
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1276 if (c & super_modifier)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1277 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1278 *p++ = 's';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1279 *p++ = '-';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1280 c -= super_modifier;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 if (c < 040)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284 if (c == 033)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1285 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286 *p++ = 'E';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1287 *p++ = 'S';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 *p++ = 'C';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1289 }
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1290 else if (c == '\t')
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1291 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1292 *p++ = 'T';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1293 *p++ = 'A';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1294 *p++ = 'B';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1295 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1296 else if (c == Ctl('J'))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1297 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1298 *p++ = 'L';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1299 *p++ = 'F';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1300 *p++ = 'D';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1301 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1302 else if (c == Ctl('M'))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1303 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1304 *p++ = 'R';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1305 *p++ = 'E';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306 *p++ = 'T';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1307 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1309 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1310 *p++ = 'C';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1311 *p++ = '-';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1312 if (c > 0 && c <= Ctl ('Z'))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1313 *p++ = c + 0140;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1314 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1315 *p++ = c + 0100;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1317 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1318 else if (c == 0177)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1319 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1320 *p++ = 'D';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1321 *p++ = 'E';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1322 *p++ = 'L';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1323 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324 else if (c == ' ')
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1325 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1326 *p++ = 'S';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1327 *p++ = 'P';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1328 *p++ = 'C';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 }
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1330 else if (c < 256)
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1331 *p++ = c;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1332 else
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1333 {
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1334 *p++ = '\\';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1335 *p++ = (7 & (c >> 15)) + '0';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1336 *p++ = (7 & (c >> 12)) + '0';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1337 *p++ = (7 & (c >> 9)) + '0';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1338 *p++ = (7 & (c >> 6)) + '0';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1339 *p++ = (7 & (c >> 3)) + '0';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1340 *p++ = (7 & (c >> 0)) + '0';
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1341 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1342
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1343 return p;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1345
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1346 DEFUN ("single-key-description", Fsingle_key_description, Ssingle_key_description, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1347 "Return a pretty description of command character KEY.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1348 Control characters turn into C-whatever, etc.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349 (key)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350 Lisp_Object key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351 {
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1352 char tem[20];
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353
1315
884c3d7e7172 * keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents: 1264
diff changeset
1354 key = EVENT_HEAD (key);
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1355
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356 switch (XTYPE (key))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1357 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358 case Lisp_Int: /* Normal character */
2059
3eaba0d9797c Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 1922
diff changeset
1359 *push_key_description (XUINT (key), tem) = 0;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360 return build_string (tem);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 case Lisp_Symbol: /* Function key or event-symbol */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 return Fsymbol_name (key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 default:
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1366 error ("KEY must be an integer, cons, or symbol.");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 char *
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 push_text_char_description (c, p)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 register unsigned int c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373 register char *p;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1375 if (c >= 0200)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1376 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1377 *p++ = 'M';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378 *p++ = '-';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 c -= 0200;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 if (c < 040)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383 *p++ = '^';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 *p++ = c + 64; /* 'A' - 1 */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1386 else if (c == 0177)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1387 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 *p++ = '^';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1389 *p++ = '?';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1390 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1391 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1392 *p++ = c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1393 return p;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1394 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1395
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1396 DEFUN ("text-char-description", Ftext_char_description, Stext_char_description, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397 "Return a pretty description of file-character CHAR.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1398 Control characters turn into \"^char\", etc.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1399 (chr)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1400 Lisp_Object chr;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1401 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1402 char tem[6];
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1403
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1404 CHECK_NUMBER (chr, 0);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1405
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1406 *push_text_char_description (XINT (chr) & 0377, tem) = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1407
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1408 return build_string (tem);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1409 }
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1410
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1411 /* Return non-zero if SEQ contains only ASCII characters, perhaps with
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1412 a meta bit. */
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1413 static int
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1414 ascii_sequence_p (seq)
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1415 Lisp_Object seq;
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1416 {
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1417 Lisp_Object i;
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1418 int len = XINT (Flength (seq));
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1419
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1420 for (XFASTINT (i) = 0; XFASTINT (i) < len; XFASTINT (i)++)
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1421 {
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1422 Lisp_Object elt = Faref (seq, i);
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1423
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1424 if (XTYPE (elt) != Lisp_Int
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1425 || (XUINT (elt) & ~CHAR_META) >= 0x80)
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1426 return 0;
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1427 }
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1428
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1429 return 1;
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1430 }
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1431
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1433 /* where-is - finding a command in a set of keymaps. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1434
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1435 DEFUN ("where-is-internal", Fwhere_is_internal, Swhere_is_internal, 1, 5, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1436 "Return list of keys that invoke DEFINITION in KEYMAP or KEYMAP1.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437 If KEYMAP is nil, search only KEYMAP1.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1438 If KEYMAP1 is nil, use the current global map.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1439 \n\
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1440 If optional 4th arg FIRSTONLY is non-nil, return a string representing\n\
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1441 the first key sequence found, rather than a list of all possible key\n\
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1442 sequences. If FIRSTONLY is t, avoid key sequences which use non-ASCII\n\
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1443 keys and therefore may not be usable on ASCII terminals. If FIRSTONLY\n\
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1444 is the symbol `non-ascii', return the first binding found, no matter\n\
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1445 what its components.\n\
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1446 \n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1447 If optional 5th arg NOINDIRECT is non-nil, don't follow indirections\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1448 to other keymaps or slots. This makes it possible to search for an\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449 indirect definition itself.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450 (definition, local_keymap, global_keymap, firstonly, noindirect)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451 Lisp_Object definition, local_keymap, global_keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1452 Lisp_Object firstonly, noindirect;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1453 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1454 register Lisp_Object maps;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455 Lisp_Object found;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1456
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1457 if (NILP (global_keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 global_keymap = current_global_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1460 if (!NILP (local_keymap))
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1461 maps = nconc2 (Faccessible_keymaps (get_keymap (local_keymap), Qnil),
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1462 Faccessible_keymaps (get_keymap (global_keymap), Qnil));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463 else
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1464 maps = Faccessible_keymaps (get_keymap (global_keymap), Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1465
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466 found = Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1467
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1468 for (; !NILP (maps); maps = Fcdr (maps))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1469 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1470 /* Key sequence to reach map */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1471 register Lisp_Object this = Fcar (Fcar (maps));
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1472
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1473 /* The map that it reaches */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1474 register Lisp_Object map = Fcdr (Fcar (maps));
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1475
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1476 /* If Fcar (map) is a VECTOR, the current element within that vector. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1477 int i = 0;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1478
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1479 /* In order to fold [META-PREFIX-CHAR CHAR] sequences into
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1480 [M-CHAR] sequences, check if last character of the sequence
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1481 is the meta-prefix char. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1482 Lisp_Object last = make_number (XINT (Flength (this)) - 1);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1483 int last_is_meta = (XINT (last) >= 0
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1484 && EQ (Faref (this, last), meta_prefix_char));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1485
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1486 QUIT;
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1487
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1488 while (CONSP (map))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1489 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1490 /* Because the code we want to run on each binding is rather
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1491 large, we don't want to have two separate loop bodies for
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1492 sparse keymap bindings and tables; we want to iterate one
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1493 loop body over both keymap and vector bindings.
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1494
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1495 For this reason, if Fcar (map) is a vector, we don't
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1496 advance map to the next element until i indicates that we
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1497 have finished off the vector. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1498
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1499 Lisp_Object elt = XCONS (map)->car;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1500 Lisp_Object key, binding, sequence;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1501
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1502 QUIT;
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1503
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1504 /* Set key and binding to the current key and binding, and
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1505 advance map and i to the next binding. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1506 if (XTYPE (elt) == Lisp_Vector)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1507 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1508 /* In a vector, look at each element. */
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1509 binding = XVECTOR (elt)->contents[i];
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1510 XFASTINT (key) = i;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1511 i++;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1512
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1513 /* If we've just finished scanning a vector, advance map
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1514 to the next element, and reset i in anticipation of the
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1515 next vector we may find. */
2752
93eda5bbc4df (Faccessible_keymaps): Use whatever size the vector has.
Richard M. Stallman <rms@gnu.org>
parents: 2727
diff changeset
1516 if (i >= XVECTOR (elt)->size)
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1517 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1518 map = XCONS (map)->cdr;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1519 i = 0;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1520 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1521 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1522 else if (CONSP (elt))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1523 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1524 key = Fcar (Fcar (map));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525 binding = Fcdr (Fcar (map));
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1526
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1527 map = XCONS (map)->cdr;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1528 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1529 else
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1530 /* We want to ignore keymap elements that are neither
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1531 vectors nor conses. */
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1532 {
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1533 map = XCONS (map)->cdr;
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1534 continue;
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1535 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1536
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 /* Search through indirections unless that's not wanted. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1538 if (NILP (noindirect))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1539 binding = get_keyelt (binding);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1540
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1541 /* End this iteration if this element does not match
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1542 the target. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1543
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1544 if (XTYPE (definition) == Lisp_Cons)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1545 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546 Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1547 tem = Fequal (binding, definition);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1548 if (NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1549 continue;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1551 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1552 if (!EQ (binding, definition))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 continue;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1554
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1555 /* We have found a match.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1556 Construct the key sequence where we found it. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1557 if (XTYPE (key) == Lisp_Int && last_is_meta)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1558 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1559 sequence = Fcopy_sequence (this);
2093
ce8bad247b1a (Fdefine_key): Use proper meta-bit to clear.
Richard M. Stallman <rms@gnu.org>
parents: 2059
diff changeset
1560 Faset (sequence, last, make_number (XINT (key) | meta_modifier));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1561 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1562 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1563 sequence = append_key (this, key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1564
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1565 /* Verify that this key binding is not shadowed by another
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1566 binding for the same key, before we say it exists.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1567
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1568 Mechanism: look for local definition of this key and if
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1569 it is defined and does not match what we found then
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1570 ignore this key.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1571
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1572 Either nil or number as value from Flookup_key
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1573 means undefined. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1574 if (!NILP (local_keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1575 {
1871
00bee181f7ed * keymap.c (Flookup_key, Fkey_binding, Flocal_key_binding,
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1576 binding = Flookup_key (local_keymap, sequence, Qnil);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1577 if (!NILP (binding) && XTYPE (binding) != Lisp_Int)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1579 if (XTYPE (definition) == Lisp_Cons)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1580 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581 Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582 tem = Fequal (binding, definition);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1583 if (NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 continue;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587 if (!EQ (binding, definition))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1588 continue;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1589 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1590 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592 /* It is a true unshadowed match. Record it. */
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1593 found = Fcons (sequence, found);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1594
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1595 /* If firstonly is Qnon_ascii, then we can return the first
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1596 binding we find. If firstonly is not Qnon_ascii but not
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1597 nil, then we should return the first ascii-only binding
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1598 we find. */
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1599 if (EQ (firstonly, Qnon_ascii))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600 return sequence;
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1601 else if (! NILP (firstonly) && ascii_sequence_p (sequence))
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1602 return sequence;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1603 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1604 }
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1605
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1606 found = Fnreverse (found);
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1607
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1608 /* firstonly may have been t, but we may have gone all the way through
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1609 the keymaps without finding an all-ASCII key sequence. So just
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1610 return the best we could find. */
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1611 if (! NILP (firstonly))
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1612 return Fcar (found);
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1613
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
1614 return found;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1615 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617 /* Return a string listing the keys and buttons that run DEFINITION. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1618
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1619 static Lisp_Object
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 where_is_string (definition)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1621 Lisp_Object definition;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1622 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1623 register Lisp_Object keys, keys1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1624
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1625 keys = Fwhere_is_internal (definition,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 current_buffer->keymap, Qnil, Qnil, Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1627 keys1 = Fmapconcat (Qkey_description, keys, build_string (", "));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1629 return keys1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1630 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1631
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1632 DEFUN ("where-is", Fwhere_is, Swhere_is, 1, 1, "CWhere is command: ",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633 "Print message listing key sequences that invoke specified command.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1634 Argument is a command definition, usually a symbol with a function definition.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1635 (definition)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1636 Lisp_Object definition;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1637 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1638 register Lisp_Object string;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1639
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1640 CHECK_SYMBOL (definition, 0);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1641 string = where_is_string (definition);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1642
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643 if (XSTRING (string)->size)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644 message ("%s is on %s", XSYMBOL (definition)->name->data,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645 XSTRING (string)->data);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1646 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1647 message ("%s is not on any key", XSYMBOL (definition)->name->data);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1648 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1649 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1650
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1651 /* describe-bindings - summarizing all the bindings in a set of keymaps. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1652
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1653 DEFUN ("describe-bindings", Fdescribe_bindings, Sdescribe_bindings, 0, 1, "",
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1654 "Show a list of all defined keys, and their definitions.\n\
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1655 The list is put in a buffer, which is displayed.\n\
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1656 An optional argument PREFIX, if non-nil, should be a key sequence;\n\
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1657 then we display only bindings that start with that prefix.")
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1658 (prefix)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1659 Lisp_Object prefix;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1660 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1661 register Lisp_Object thisbuf;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1662 XSET (thisbuf, Lisp_Buffer, current_buffer);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1663 internal_with_output_to_temp_buffer ("*Help*",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1664 describe_buffer_bindings,
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1665 Fcons (thisbuf, prefix));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1666 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1667 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1668
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1669 /* ARG is (BUFFER . PREFIX). */
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1670
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1671 static Lisp_Object
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1672 describe_buffer_bindings (arg)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1673 Lisp_Object arg;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1674 {
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1675 Lisp_Object descbuf, prefix, shadow;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1676 register Lisp_Object start1, start2;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1677
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1678 char *alternate_heading
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1679 = "\
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1680 Alternate Characters (use anywhere the nominal character is listed):\n\
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1681 nominal alternate\n\
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1682 ------- ---------\n";
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1683
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1684 descbuf = XCONS (arg)->car;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1685 prefix = XCONS (arg)->cdr;
4575
bf0f07186369 (describe_buffer_bindings): Declare shadow just once.
Richard M. Stallman <rms@gnu.org>
parents: 4138
diff changeset
1686 shadow = Qnil;
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1687
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1688 Fset_buffer (Vstandard_output);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1689
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1690 /* Report on alternates for keys. */
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1691 if (XTYPE (Vkeyboard_translate_table) == Lisp_String)
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1692 {
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1693 int c;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1694 unsigned char *translate = XSTRING (Vkeyboard_translate_table)->data;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1695 int translate_len = XSTRING (Vkeyboard_translate_table)->size;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1696
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1697 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
1698 if (translate[c] != c)
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1699 {
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1700 char buf[20];
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1701 char *bufend;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1702
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1703 if (alternate_heading)
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1704 {
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1705 insert_string (alternate_heading);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1706 alternate_heading = 0;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1707 }
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1708
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1709 bufend = push_key_description (translate[c], buf);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1710 insert (buf, bufend - buf);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1711 Findent_to (make_number (16), make_number (1));
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1712 bufend = push_key_description (c, buf);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1713 insert (buf, bufend - buf);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1714
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1715 insert ("\n", 1);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1716 }
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1717
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1718 insert ("\n", 1);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1719 }
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1720
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1721 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1722 int i, nmaps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1723 Lisp_Object *modes, *maps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1724
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1725 /* Temporarily switch to descbuf, so that we can get that buffer's
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1726 minor modes correctly. */
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1727 Fset_buffer (descbuf);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1728 nmaps = current_minor_maps (&modes, &maps);
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1729 Fset_buffer (Vstandard_output);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1730
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1731 /* Print the minor mode maps. */
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1732 for (i = 0; i < nmaps; i++)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1733 {
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1734 /* Tht title for a minor mode keymap
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1735 is constructed at run time.
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1736 We let describe_map_tree do the actual insertion
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1737 because it takes care of other features when doing so. */
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1738 char *title = (char *) alloca (40 + XSYMBOL (modes[i])->name->size);
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1739 char *p = title;
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1740
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1741 if (XTYPE (modes[i]) == Lisp_Symbol)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1742 {
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1743 *p++ = '`';
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1744 bcopy (XSYMBOL (modes[i])->name->data, p,
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1745 XSYMBOL (modes[i])->name->size);
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1746 p += XSYMBOL (modes[i])->name->size;
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1747 *p++ = '\'';
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1748 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1749 else
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1750 {
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1751 bcopy ("Strangely Named", p, sizeof ("Strangely Named"));
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1752 p += sizeof ("Strangely Named");
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1753 }
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1754 bcopy (" Minor Mode Bindings", p, sizeof (" Minor Mode Bindings"));
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1755 p += sizeof (" Minor Mode Bindings");
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1756 *p = 0;
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1757
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1758 describe_map_tree (maps[i], 0, shadow, prefix, title);
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1759 shadow = Fcons (maps[i], shadow);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1760 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1761 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1762
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1763 /* Print the (major mode) local map. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1764 start1 = XBUFFER (descbuf)->keymap;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1765 if (!NILP (start1))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1766 {
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1767 describe_map_tree (start1, 0, shadow, prefix,
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1768 "Major Mode Bindings");
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1769 shadow = Fcons (start1, shadow);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1770 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1771
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1772 describe_map_tree (current_global_map, 0, shadow, prefix,
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1773 "Global Bindings");
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1774
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1775 Fset_buffer (descbuf);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1776 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1777 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1778
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1779 /* Insert a desription of the key bindings in STARTMAP,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1780 followed by those of all maps reachable through STARTMAP.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1781 If PARTIAL is nonzero, omit certain "uninteresting" commands
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1782 (such as `undefined').
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1783 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
1784 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
1785 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
1786 TITLE, if not 0, is a string to insert at the beginning.
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1787 TITLE should not end with a colon or a newline; we supply that. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1788
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789 void
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1790 describe_map_tree (startmap, partial, shadow, prefix, title)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1791 Lisp_Object startmap, shadow, prefix;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1792 int partial;
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1793 char *title;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1794 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1795 Lisp_Object maps;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1796 struct gcpro gcpro1;
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1797 int something = 0;
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1798 char *key_heading
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1799 = "\
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1800 key binding\n\
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1801 --- -------\n";
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1802
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1803 maps = Faccessible_keymaps (startmap, prefix);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1804 GCPRO1 (maps);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1805
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1806 if (!NILP (maps))
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1807 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1808 if (title)
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1809 {
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1810 insert_string (title);
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1811 if (!NILP (prefix))
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1812 {
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1813 insert_string (" Starting With ");
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1814 insert1 (Fkey_description (prefix));
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1815 }
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1816 insert_string (":\n");
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1817 }
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1818 insert_string (key_heading);
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1819 something = 1;
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1820 }
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1821
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1822 for (; !NILP (maps); maps = Fcdr (maps))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1823 {
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1824 register Lisp_Object elt, prefix, sub_shadows, tail;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1825
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1826 elt = Fcar (maps);
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1827 prefix = Fcar (elt);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1828
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1829 sub_shadows = Qnil;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1830
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1831 for (tail = shadow; CONSP (tail); tail = XCONS (tail)->cdr)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1832 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1833 Lisp_Object shmap;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1834
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1835 shmap = XCONS (tail)->car;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1836
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1837 /* 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
1838 then the shadow map for this keymap is just SHADOW. */
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1839 if ((XTYPE (prefix) == Lisp_String
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1840 && XSTRING (prefix)->size == 0)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1841 || (XTYPE (prefix) == Lisp_Vector
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1842 && XVECTOR (prefix)->size == 0))
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1843 ;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1844 /* 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
1845 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
1846 what we should use. */
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1847 else
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1848 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1849 shmap = Flookup_key (shadow, Fcar (elt), Qt);
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1850 if (XTYPE (shmap) == Lisp_Int)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1851 shmap = Qnil;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1852 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1853
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1854 /* 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
1855 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
1856 describe this map at all. */
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1857 if (!NILP (shmap) && NILP (Fkeymapp (shmap)))
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1858 goto skip;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1859
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1860 if (!NILP (shmap))
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1861 sub_shadows = Fcons (shmap, sub_shadows);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1862 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1863
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1864 describe_map (Fcdr (elt), Fcar (elt), partial, sub_shadows);
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1865
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1866 skip: ;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1867 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1868
4023
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1869 if (something)
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1870 insert_string ("\n");
5e4f918d5d44 (describe_map_tree): When inserting TITLE, mention PREFIX.
Richard M. Stallman <rms@gnu.org>
parents: 3962
diff changeset
1871
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1872 UNGCPRO;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1873 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1874
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1875 static void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1876 describe_command (definition)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1877 Lisp_Object definition;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1878 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1879 register Lisp_Object tem1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1880
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1881 Findent_to (make_number (16), make_number (1));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1882
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1883 if (XTYPE (definition) == Lisp_Symbol)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1884 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1885 XSET (tem1, Lisp_String, XSYMBOL (definition)->name);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1886 insert1 (tem1);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1887 insert_string ("\n");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1888 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1889 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1890 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1891 tem1 = Fkeymapp (definition);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1892 if (!NILP (tem1))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1893 insert_string ("Prefix Command\n");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1894 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1895 insert_string ("??\n");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1897 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1898
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1899 /* Describe the contents of map MAP, assuming that this map itself is
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1900 reached by the sequence of prefix keys KEYS (a string or vector).
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1901 PARTIAL, SHADOW is as in `describe_map_tree' above. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1902
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1903 static void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1904 describe_map (map, keys, partial, shadow)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1905 Lisp_Object map, keys;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1906 int partial;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1907 Lisp_Object shadow;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1908 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1909 register Lisp_Object keysdesc;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1910
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
1911 if (!NILP (keys) && XFASTINT (Flength (keys)) > 0)
1890
0ca7640360bd (describe_map): Call Fkey_description before build_string.
Richard M. Stallman <rms@gnu.org>
parents: 1871
diff changeset
1912 {
0ca7640360bd (describe_map): Call Fkey_description before build_string.
Richard M. Stallman <rms@gnu.org>
parents: 1871
diff changeset
1913 Lisp_Object tem;
0ca7640360bd (describe_map): Call Fkey_description before build_string.
Richard M. Stallman <rms@gnu.org>
parents: 1871
diff changeset
1914 /* Call Fkey_description first, to avoid GC bug for the other string. */
0ca7640360bd (describe_map): Call Fkey_description before build_string.
Richard M. Stallman <rms@gnu.org>
parents: 1871
diff changeset
1915 tem = Fkey_description (keys);
0ca7640360bd (describe_map): Call Fkey_description before build_string.
Richard M. Stallman <rms@gnu.org>
parents: 1871
diff changeset
1916 keysdesc = concat2 (tem, build_string (" "));
0ca7640360bd (describe_map): Call Fkey_description before build_string.
Richard M. Stallman <rms@gnu.org>
parents: 1871
diff changeset
1917 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1918 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1919 keysdesc = Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1920
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1921 describe_map_2 (map, keysdesc, describe_command, partial, shadow);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1922 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1923
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1924 /* Like Flookup_key, but uses a list of keymaps SHADOW instead of a single map.
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1925 Returns the first non-nil binding found in any of those maps. */
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1926
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1927 static Lisp_Object
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1928 shadow_lookup (shadow, key, flag)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1929 Lisp_Object shadow, key, flag;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1930 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1931 Lisp_Object tail, value;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1932
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1933 for (tail = shadow; CONSP (tail); tail = XCONS (tail)->cdr)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1934 {
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1935 value = Flookup_key (XCONS (tail)->car, key, flag);
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1936 if (!NILP (value))
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1937 return value;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1938 }
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1939 return Qnil;
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1940 }
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1941
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1942 /* Insert a description of KEYMAP into the current buffer. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1943
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1944 static void
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1945 describe_map_2 (keymap, elt_prefix, elt_describer, partial, shadow)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1946 register Lisp_Object keymap;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1947 Lisp_Object elt_prefix;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1948 int (*elt_describer) ();
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1949 int partial;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1950 Lisp_Object shadow;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1951 {
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1952 Lisp_Object tail, definition, event;
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
1953 Lisp_Object tem;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1954 Lisp_Object suppress;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1955 Lisp_Object kludge;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1956 int first = 1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1957 struct gcpro gcpro1, gcpro2, gcpro3;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1958
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1959 if (partial)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1960 suppress = intern ("suppress-keymap");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1961
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1962 /* 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
1963 that is done once per keymap element, we don't want to cons up a
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1964 fresh vector every time. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1965 kludge = Fmake_vector (make_number (1), Qnil);
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
1966 definition = Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1967
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
1968 GCPRO3 (elt_prefix, definition, kludge);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1969
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1970 for (tail = XCONS (keymap)->cdr; CONSP (tail); tail = Fcdr (tail))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1971 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1972 QUIT;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1973
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1974 if (XTYPE (XCONS (tail)->car) == Lisp_Vector)
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1975 describe_vector (XCONS (tail)->car,
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1976 elt_prefix, elt_describer, partial, shadow);
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1977 else
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1978 {
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1979 event = Fcar_safe (Fcar (tail));
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1980 definition = get_keyelt (Fcdr_safe (Fcar (tail)));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1981
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1982 /* Don't show undefined commands or suppressed commands. */
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
1983 if (NILP (definition)) continue;
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
1984 if (XTYPE (definition) == Lisp_Symbol && partial)
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1985 {
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
1986 tem = Fget (definition, suppress);
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
1987 if (!NILP (tem))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1988 continue;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1989 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1990
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1991 /* 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
1992 because a local definition of the same key shadows it. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1993
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
1994 XVECTOR (kludge)->contents[0] = event;
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1995 if (!NILP (shadow))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1996 {
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
1997 tem = shadow_lookup (shadow, kludge, Qt);
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1998 if (!NILP (tem)) continue;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1999 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2000
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2001 tem = Flookup_key (keymap, kludge, Qt);
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
2002 if (! EQ (tem, definition)) continue;
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
2003
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2004 if (first)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2005 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2006 insert ("\n", 1);
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2007 first = 0;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2008 }
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2009
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2010 if (!NILP (elt_prefix))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2011 insert1 (elt_prefix);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2012
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
2013 /* THIS gets the string to describe the character EVENT. */
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
2014 insert1 (Fsingle_key_description (event));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2015
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2016 /* Print a description of the definition of this character.
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2017 elt_describer will take care of spacing out far enough
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2018 for alignment purposes. */
3908
a148b4ff79c6 (describe_map_2): Cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 3735
diff changeset
2019 (*elt_describer) (definition);
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
2020 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2021 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2022
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2023 UNGCPRO;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2024 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2025
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2026 static int
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2027 describe_vector_princ (elt)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2028 Lisp_Object elt;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2029 {
3691
49ce2242f5c1 (get_keymap_1): Add missing semicolon.
Richard M. Stallman <rms@gnu.org>
parents: 3674
diff changeset
2030 Findent_to (make_number (16), make_number (1));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2031 Fprinc (elt, Qnil);
3632
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
2032 Fterpri (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2033 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2034
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2035 DEFUN ("describe-vector", Fdescribe_vector, Sdescribe_vector, 1, 1, 0,
3632
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
2036 "Insert a description of contents of VECTOR.\n\
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2037 This is text showing the elements of vector matched against indices.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2038 (vector)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2039 Lisp_Object vector;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2040 {
3632
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
2041 int count = specpdl_ptr - specpdl;
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
2042
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
2043 specbind (Qstandard_output, Fcurrent_buffer ());
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2044 CHECK_VECTOR (vector, 0);
1922
648bc44d182a * keymap.c (Fdescribe_vector): Pass the proper number of arguments
Jim Blandy <jimb@redhat.com>
parents: 1890
diff changeset
2045 describe_vector (vector, Qnil, describe_vector_princ, 0, Qnil);
3632
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
2046
72cfde0cd8cd (Fdescribe_vector): Use current buf, not standard-output.
Richard M. Stallman <rms@gnu.org>
parents: 3542
diff changeset
2047 return unbind_to (count, Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2048 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2049
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2050 describe_vector (vector, elt_prefix, elt_describer, partial, shadow)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2051 register Lisp_Object vector;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2052 Lisp_Object elt_prefix;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2053 int (*elt_describer) ();
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2054 int partial;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2055 Lisp_Object shadow;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2056 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2057 Lisp_Object this;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2058 Lisp_Object dummy;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2059 Lisp_Object tem1, tem2;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2060 register int i;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2061 Lisp_Object suppress;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2062 Lisp_Object kludge;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2063 int first = 1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2064 struct gcpro gcpro1, gcpro2, gcpro3;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2065
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2066 tem1 = Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2067
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2068 /* This vector gets used to present single keys to Flookup_key. Since
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2069 that is done once per vector element, we don't want to cons up a
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2070 fresh vector every time. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2071 kludge = Fmake_vector (make_number (1), Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2072 GCPRO3 (elt_prefix, tem1, kludge);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2073
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2074 if (partial)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2075 suppress = intern ("suppress-keymap");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2076
2752
93eda5bbc4df (Faccessible_keymaps): Use whatever size the vector has.
Richard M. Stallman <rms@gnu.org>
parents: 2727
diff changeset
2077 for (i = 0; i < XVECTOR (vector)->size; i++)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2078 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2079 QUIT;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2080 tem1 = get_keyelt (XVECTOR (vector)->contents[i]);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2081
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
2082 if (NILP (tem1)) continue;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2083
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2084 /* Don't mention suppressed commands. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2085 if (XTYPE (tem1) == Lisp_Symbol && partial)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2086 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2087 this = Fget (tem1, suppress);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
2088 if (!NILP (this))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2089 continue;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2090 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2091
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2092 /* If this command in this map is shadowed by some other map,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2093 ignore it. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
2094 if (!NILP (shadow))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2095 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2096 Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2097
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2098 XVECTOR (kludge)->contents[0] = make_number (i);
3952
f9dfc2872fb0 (describe_map_tree): Insert key_heading here.
Richard M. Stallman <rms@gnu.org>
parents: 3908
diff changeset
2099 tem = shadow_lookup (shadow, kludge, Qt);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2100
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
2101 if (!NILP (tem)) continue;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2102 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2103
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2104 if (first)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2105 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2106 insert ("\n", 1);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2107 first = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2108 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2109
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2110 /* Output the prefix that applies to every entry in this map. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
2111 if (!NILP (elt_prefix))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2112 insert1 (elt_prefix);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2113
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2114 /* Get the string to describe the character I, and print it. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2115 XFASTINT (dummy) = i;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2116
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2117 /* THIS gets the string to describe the character DUMMY. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2118 this = Fsingle_key_description (dummy);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2119 insert1 (this);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2120
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2121 /* Find all consecutive characters that have the same definition. */
2752
93eda5bbc4df (Faccessible_keymaps): Use whatever size the vector has.
Richard M. Stallman <rms@gnu.org>
parents: 2727
diff changeset
2122 while (i + 1 < XVECTOR (vector)->size
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2123 && (tem2 = get_keyelt (XVECTOR (vector)->contents[i+1]),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2124 EQ (tem2, tem1)))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2125 i++;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2126
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2127 /* If we have a range of more than one character,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2128 print where the range reaches to. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2129
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2130 if (i != XINT (dummy))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2131 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2132 insert (" .. ", 4);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
2133 if (!NILP (elt_prefix))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2134 insert1 (elt_prefix);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2135
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2136 XFASTINT (dummy) = i;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2137 insert1 (Fsingle_key_description (dummy));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2138 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2139
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2140 /* Print a description of the definition of this character.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2141 elt_describer will take care of spacing out far enough
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2142 for alignment purposes. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2143 (*elt_describer) (tem1);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2144 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2145
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2146 UNGCPRO;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2147 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2148
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2149 /* Apropos - finding all symbols whose names match a regexp. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2150 Lisp_Object apropos_predicate;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2151 Lisp_Object apropos_accumulate;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2152
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2153 static void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2154 apropos_accum (symbol, string)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2155 Lisp_Object symbol, string;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2156 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2157 register Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2158
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2159 tem = Fstring_match (string, Fsymbol_name (symbol), Qnil);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
2160 if (!NILP (tem) && !NILP (apropos_predicate))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2161 tem = call1 (apropos_predicate, symbol);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
2162 if (!NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2163 apropos_accumulate = Fcons (symbol, apropos_accumulate);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2164 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2165
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2166 DEFUN ("apropos-internal", Fapropos_internal, Sapropos_internal, 1, 2, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2167 "Show all symbols whose names contain match for REGEXP.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2168 If optional 2nd arg PRED is non-nil, (funcall PRED SYM) is done\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2169 for each symbol and a symbol is mentioned only if that returns non-nil.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2170 Return list of symbols found.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2171 (string, pred)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2172 Lisp_Object string, pred;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2173 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2174 struct gcpro gcpro1, gcpro2;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2175 CHECK_STRING (string, 0);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2176 apropos_predicate = pred;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2177 GCPRO2 (apropos_predicate, apropos_accumulate);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2178 apropos_accumulate = Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2179 map_obarray (Vobarray, apropos_accum, string);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2180 apropos_accumulate = Fsort (apropos_accumulate, Qstring_lessp);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2181 UNGCPRO;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2182 return apropos_accumulate;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2183 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2184
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2185 syms_of_keymap ()
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2186 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2187 Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2188
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2189 Qkeymap = intern ("keymap");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2190 staticpro (&Qkeymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2191
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2192 /* Initialize the keymaps standardly used.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2193 Each one is the value of a Lisp variable, and is also
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2194 pointed to by a C variable */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2195
3224
6be8f63060b3 (syms_of_keymap): Create global_map 256 slots long.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
2196 global_map = Fcons (Qkeymap,
3425
c513638ee7ed (syms_of_keymap): Add missing 2nd arg to Fcons.
Richard M. Stallman <rms@gnu.org>
parents: 3224
diff changeset
2197 Fcons (Fmake_vector (make_number (0400), Qnil), Qnil));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2198 Fset (intern ("global-map"), global_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2199
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
2200 meta_map = Fmake_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2201 Fset (intern ("esc-map"), meta_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2202 Ffset (intern ("ESC-prefix"), meta_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2203
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
2204 control_x_map = Fmake_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2205 Fset (intern ("ctl-x-map"), control_x_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2206 Ffset (intern ("Control-X-prefix"), control_x_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2207
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2208 DEFVAR_LISP ("minibuffer-local-map", &Vminibuffer_local_map,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2209 "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
2210 Vminibuffer_local_map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2211
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2212 DEFVAR_LISP ("minibuffer-local-ns-map", &Vminibuffer_local_ns_map,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2213 "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
2214 Vminibuffer_local_ns_map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2215
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2216 DEFVAR_LISP ("minibuffer-local-completion-map", &Vminibuffer_local_completion_map,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2217 "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
2218 Vminibuffer_local_completion_map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2219
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2220 DEFVAR_LISP ("minibuffer-local-must-match-map", &Vminibuffer_local_must_match_map,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2221 "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
2222 Vminibuffer_local_must_match_map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2223
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2224 current_global_map = global_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2225
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2226 DEFVAR_LISP ("minor-mode-map-alist", &Vminor_mode_map_alist,
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2227 "Alist of keymaps to use for minor modes.\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2228 Each element looks like (VARIABLE . KEYMAP); KEYMAP is used to read\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2229 key sequences and look up bindings iff VARIABLE's value is non-nil.\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2230 If two active keymaps bind the same key, the keymap appearing earlier\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2231 in the list takes precedence.");
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2232 Vminor_mode_map_alist = Qnil;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2233
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2234 DEFVAR_LISP ("function-key-map", &Vfunction_key_map,
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2235 "Keymap mapping ASCII function key sequences onto their preferred forms.\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2236 This allows Emacs to recognize function keys sent from ASCII\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2237 terminals at any point in a key sequence.\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2238 \n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2239 The read-key-sequence function replaces subsequences bound by\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2240 function-key-map with their bindings. When the current local and global\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2241 keymaps have no binding for the current key sequence but\n\
4138
42faad1466fa * keyboard.c (read_key_sequence): Accept both strings and vectors
Jim Blandy <jimb@redhat.com>
parents: 4023
diff changeset
2242 function-key-map binds a suffix of the sequence to a vector or string,\n\
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2243 read-key-sequence replaces the matching suffix with its binding, and\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2244 continues with the new sequence.\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2245 \n\
4138
42faad1466fa * keyboard.c (read_key_sequence): Accept both strings and vectors
Jim Blandy <jimb@redhat.com>
parents: 4023
diff changeset
2246 For example, suppose function-key-map binds `ESC O P' to [f1].\n\
42faad1466fa * keyboard.c (read_key_sequence): Accept both strings and vectors
Jim Blandy <jimb@redhat.com>
parents: 4023
diff changeset
2247 Typing `ESC O P' to read-key-sequence would return [f1]. Typing\n\
42faad1466fa * keyboard.c (read_key_sequence): Accept both strings and vectors
Jim Blandy <jimb@redhat.com>
parents: 4023
diff changeset
2248 `C-x ESC O P' would return [?\\C-x f1]. If [f1] were a prefix\n\
42faad1466fa * keyboard.c (read_key_sequence): Accept both strings and vectors
Jim Blandy <jimb@redhat.com>
parents: 4023
diff changeset
2249 key, typing `ESC O P x' would return [f1 x].");
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
2250 Vfunction_key_map = Fmake_sparse_keymap (Qnil);
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2251
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2252 Qsingle_key_description = intern ("single-key-description");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2253 staticpro (&Qsingle_key_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2254
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2255 Qkey_description = intern ("key-description");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2256 staticpro (&Qkey_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2257
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2258 Qkeymapp = intern ("keymapp");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2259 staticpro (&Qkeymapp);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2260
2727
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2261 Qnon_ascii = intern ("non-ascii");
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2262 staticpro (&Qnon_ascii);
b8911c8b9700 * keymap.c (Fwhere_is_internal): If FIRSTONLY is non-nil, avoid
Jim Blandy <jimb@redhat.com>
parents: 2652
diff changeset
2263
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2264 defsubr (&Skeymapp);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2265 defsubr (&Smake_keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2266 defsubr (&Smake_sparse_keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2267 defsubr (&Scopy_keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2268 defsubr (&Skey_binding);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2269 defsubr (&Slocal_key_binding);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2270 defsubr (&Sglobal_key_binding);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2271 defsubr (&Sminor_mode_key_binding);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2272 defsubr (&Sglobal_set_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2273 defsubr (&Slocal_set_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2274 defsubr (&Sdefine_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2275 defsubr (&Slookup_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2276 defsubr (&Sglobal_unset_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2277 defsubr (&Slocal_unset_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2278 defsubr (&Sdefine_prefix_command);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2279 defsubr (&Suse_global_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2280 defsubr (&Suse_local_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2281 defsubr (&Scurrent_local_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2282 defsubr (&Scurrent_global_map);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
2283 defsubr (&Scurrent_minor_mode_maps);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2284 defsubr (&Saccessible_keymaps);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2285 defsubr (&Skey_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2286 defsubr (&Sdescribe_vector);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2287 defsubr (&Ssingle_key_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2288 defsubr (&Stext_char_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2289 defsubr (&Swhere_is_internal);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2290 defsubr (&Swhere_is);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2291 defsubr (&Sdescribe_bindings);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2292 defsubr (&Sapropos_internal);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2293 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2294
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2295 keys_of_keymap ()
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2296 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2297 Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2298
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2299 initial_define_key (global_map, 033, "ESC-prefix");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2300 initial_define_key (global_map, Ctl('X'), "Control-X-prefix");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2301 }