annotate src/keymap.c @ 1687:2bee660c3046

* configure: Don't make the top-level Makefile read-only - people may want to edit the values of the path variables. Make path specification conform to GNU coding standards. * configure (long_usage): Remove all traces of old arguments from usage messages, and document the options we do accept in more detail: -with-x... and --srcdir. (options, boolean_opts): Deleted; we don't have enough options to make this worthwhile. (prefix, bindir, lisppath, datadir, libdir, lockdir): Deleted, along with the code which supported them; these should be set as arguments to the top-level make. (config_h_opts): Since this no longer doubles as a list of option names, make them upper case; this simplifies the code which uses them to build the sed command to edit src/config.h. Change the code which sets them. (cc, g, O): Don't allow the user to set these using options; they should be specified using `CC=' and `CFLAGS=' arguments to the top-level make. Just choose reasonable default values for them, and edit them into Makefile.in's default CC and CONFIG_CFLAGS values. (gnu_malloc, rel_alloc): Don't allow the user to set these using options; use them whenever the configuration files say they're possible. Simplify the argument processing loop. Don't accept abbreviations for option names; these might conflict with other configuration options in the future. Add some support for the `--srcdir' option. Check for the sources in . and .. if `--srcdir' is omitted. If the directories we will compile in don't exist yet, create them under the current directory. Note that the rest of the build process doesn't really support this. Edit only the top Makefile. That should edit the others. Edit into the makefile: `version', from lisp/version.el, `configname' and `srcdir' from the configuration arguments, `CC' and `CONFIG_CFLAGS' as guessed from the presence or absence of GCC in the user's path, and LOADLIBES as gleaned from the system description files. Simplify the report generated; it doesn't need to include any description of paths now. Make `config.status' exec configure instead of just calling it, so there's no harm in overwriting `config.status'. * Makefile.in (version, configname): New variables, used to choose the default values for datadir and libdir. Path variables rearranged into two clearer groups: - In the first group are the variables specified by the GNU coding standards (prefix, bindir, datadir, statedir, libdir, mandir, manext, infodir, and srcdir). - In the second are the variables actually used for Emacs's paths (lispdir, locallisppath, lisppath, buildlisppath, etcdir, lockdir, archlibdir), which depend on the first category. datadir and libdir default to directories under ${prefix}/lib/emacs instead of ${prefix}/emacs, by popular demand. etcdir and lispdir default to subdirectories of datadir. archlibdir defaults to libdir. The new installation tree is a bit deeper than it used to be, so use the new make-path program in lib-src to build them all. Always build a new src/paths.h.tmp and then move-if-change it to src/paths.h, to avoid unnecessary rebuilds while responding to the right changes. Remove all mention of arch-lib. Run utility commands from lib-src, and let the executables be copied into archlibdir when Emacs is installed. Add targets for src/Makefile, lib-src/Makefile, and oldXMenu/Makefile, editing the values of the path variables into them. Let lib-src do its own installation. (datadir): Default to putting data files under ${prefix}/lib/emacs/${version}, not /usr/local/emacs. (emacsdir): Variable deleted; it would only be confusing to use. (lispdir, etcdir): Default to ${datadir}/lisp. (mkdir): Use make-path for this. (lockdir): Do this in mkdir. (Makefile): New target. * configure (usage_message): Rename to long_usage.
author Jim Blandy <jimb@redhat.com>
date Sat, 12 Dec 1992 15:42:53 +0000
parents 892c9f61217a
children 04fb1d3d6992
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
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 517
diff changeset
2 Copyright (C) 1985, 1986, 1987, 1988, 1992 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
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 #include "config.h"
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"
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 #define min(a, b) ((a) < (b) ? (a) : (b))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
31 /* The number of elements in keymap vectors. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 #define DENSE_TABLE_SIZE (0200)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 /* Actually allocate storage for these variables */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 Lisp_Object current_global_map; /* Current global keymap */
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 global_map; /* default global key bindings */
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 meta_map; /* The keymap used for globally bound
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 ESC-prefixed default commands */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 Lisp_Object control_x_map; /* The keymap used for globally bound
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 C-x-prefixed default commands */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 /* was MinibufLocalMap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 Lisp_Object Vminibuffer_local_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 /* The keymap used by the minibuf for local
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 bindings when spaces are allowed in the
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 minibuf */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 /* was MinibufLocalNSMap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 Lisp_Object Vminibuffer_local_ns_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 /* The keymap used by the minibuf for local
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 bindings when spaces are not encouraged
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 in the minibuf */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 /* keymap used for minibuffers when doing completion */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 /* was MinibufLocalCompletionMap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 Lisp_Object Vminibuffer_local_completion_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 /* keymap used for minibuffers when doing completion and require a match */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 /* was MinibufLocalMustMatchMap */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 Lisp_Object Vminibuffer_local_must_match_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
66 /* Alist of minor mode variables and keymaps. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
67 Lisp_Object Vminor_mode_map_alist;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
68
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
69 /* Keymap mapping ASCII function key sequences onto their preferred forms.
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
70 Initialized by the terminal-specific lisp files. See DEFVAR for more
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
71 documentation. */
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
72 Lisp_Object Vfunction_key_map;
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
73
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 Lisp_Object Qkeymapp, Qkeymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 /* A char over 0200 in a key sequence
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 is equivalent to prefixing with this character. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 extern Lisp_Object meta_prefix_char;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 void describe_map_tree ();
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 static Lisp_Object describe_buffer_bindings ();
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 static void describe_command ();
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 static void describe_map ();
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
85 static void describe_map_2 ();
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
87 /* Keymap object support - constructors and predicates. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
88
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
89 DEFUN ("make-keymap", Fmake_keymap, Smake_keymap, 0, 1, 0,
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 "Construct and return a new keymap, of the form (keymap VECTOR . ALIST).\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 VECTOR is a 128-element vector which holds the bindings for the ASCII\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 characters. ALIST is an assoc-list which holds bindings for function keys,\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 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
94 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
95 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
96 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
97 (string)
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
98 Lisp_Object string;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 {
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
100 Lisp_Object tail;
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
101 if (!NILP (string))
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
102 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
103 else
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
104 tail = Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 return Fcons (Qkeymap,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 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
107 tail));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
110 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
111 "Construct and return a new sparse-keymap list.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 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
113 which binds the character CHAR to DEFINITION, or (SYMBOL . DEFINITION),\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 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
115 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
116 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
117 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
118 (string)
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
119 Lisp_Object string;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 {
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
121 if (!NILP (string))
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
122 return Fcons (Qkeymap, Fcons (string, Qnil));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 return Fcons (Qkeymap, Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 /* This function is used for installing the standard key bindings
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 at initialization time.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 For example:
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
131 initial_define_key (control_x_map, Ctl('X'), "exchange-point-and-mark"); */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 initial_define_key (keymap, key, defname)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 int key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 char *defname;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 store_in_keymap (keymap, make_number (key), intern (defname));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
142 void
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
143 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
144 Lisp_Object keymap;
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
145 char *keyname;
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
146 char *defname;
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
147 {
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
148 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
149 }
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
150
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 /* Define character fromchar in map frommap as an alias for character
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 tochar in map tomap. Subsequent redefinitions of the latter WILL
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 affect the former. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 #if 0
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 synkey (frommap, fromchar, tomap, tochar)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 struct Lisp_Vector *frommap, *tomap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 int fromchar, tochar;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 Lisp_Object v, c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 XSET (v, Lisp_Vector, tomap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 XFASTINT (c) = tochar;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 frommap->contents[fromchar] = Fcons (v, c);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 #endif /* 0 */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 DEFUN ("keymapp", Fkeymapp, Skeymapp, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 "Return t if ARG is a keymap.\n\
362
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
170 \n\
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
171 A keymap is list (keymap . ALIST), a list (keymap VECTOR . ALIST),\n\
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
172 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
173 ALIST elements look like (CHAR . DEFN) or (SYMBOL . DEFN);\n\
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
174 VECTOR is a 128-element vector of bindings for ASCII characters.")
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 (object)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 Lisp_Object object;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 {
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
178 return (NILP (get_keymap_1 (object, 0, 0)) ? Qnil : Qt);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 /* 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
182 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
183
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
184 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
185 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
186
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
187 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
188 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
189
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
190 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
191 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
192 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
193 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
194 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
195
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 Lisp_Object
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
197 get_keymap_1 (object, error, autoload)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 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
199 int error, autoload;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 {
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
201 Lisp_Object tem;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
203 autoload_retry:
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 517
diff changeset
204 tem = indirect_function (object);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 if (CONSP (tem) && EQ (XCONS (tem)->car, Qkeymap))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 return tem;
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
207
1566
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
208 /* 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
209 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
210 if (autoload
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
211 && 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
212 && CONSP (tem)
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
213 && 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
214 {
1566
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
215 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
216
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
217 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
218 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
219 {
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
220 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
221
1566
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
222 GCPRO2 (tem, object)
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
223 do_autoload (tem, object);
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
224 UNGCPRO;
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
225
1566
892c9f61217a * keymap.c (get_keymap_1): Don't try to autoload OBJECT's function
Jim Blandy <jimb@redhat.com>
parents: 1517
diff changeset
226 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
227 }
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
228 }
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
229
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 if (error)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 wrong_type_argument (Qkeymapp, object);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
232 else
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
233 return Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
236
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
237 /* 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
238 If OBJECT doesn't denote a keymap at all, signal an error. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 Lisp_Object
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 get_keymap (object)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 Lisp_Object object;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 {
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
243 return get_keymap_1 (object, 0, 0);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
247 /* 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
248 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
249 event, not a sequence.
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
250
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
251 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
252 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
253 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
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 zero, bindings for Qt are not treated specially. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 Lisp_Object
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
258 access_keymap (map, idx, t_ok)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 Lisp_Object map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 Lisp_Object idx;
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
261 int t_ok;
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 /* If idx is a list (some sort of mouse click, perhaps?),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 the index we want to use is the car of the list, which
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 ought to be a symbol. */
1315
884c3d7e7172 * keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents: 1264
diff changeset
266 idx = EVENT_HEAD (idx);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 if (XTYPE (idx) == Lisp_Int
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 && (XINT (idx) < 0 || XINT (idx) >= DENSE_TABLE_SIZE))
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
270 error ("only ASCII characters may be looked up in keymaps");
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
271
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
272 /* 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
273 be put in the canonical order. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
274 else if (XTYPE (idx) == Lisp_Symbol)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
275 idx = reorder_modifiers (idx);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276
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 Lisp_Object tail;
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
279 Lisp_Object t_binding = Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
281 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
282 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
283 Lisp_Object binding = XCONS (tail)->car;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
285 switch (XTYPE (binding))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
286 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
287 case Lisp_Cons:
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
288 if (EQ (XCONS (binding)->car, idx))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
289 return XCONS (binding)->cdr;
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
290 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
291 t_binding = XCONS (binding)->cdr;
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
292 break;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
293
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
294 case Lisp_Vector:
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
295 if (XVECTOR (binding)->size == DENSE_TABLE_SIZE
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
296 && XTYPE (idx) == Lisp_Int)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
297 return XVECTOR (binding)->contents[XINT (idx)];
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
298 break;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
299 }
1264
6ba9d5aaace6 * keymap.c (access_keymap): Don't forget to QUIT while scanning
Jim Blandy <jimb@redhat.com>
parents: 1236
diff changeset
300
6ba9d5aaace6 * keymap.c (access_keymap): Don't forget to QUIT while scanning
Jim Blandy <jimb@redhat.com>
parents: 1236
diff changeset
301 QUIT;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 }
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
303
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
304 return t_binding;
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
305 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 /* Given OBJECT which was found in a slot in a keymap,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 trace indirect definitions to get the actual definition of that slot.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 An indirect definition is a list of the form
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 (KEYMAP . INDEX), where KEYMAP is a keymap or a symbol defined as one
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 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
313
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 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
315 remove that. Also remove a menu help string as second element. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 Lisp_Object
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 get_keyelt (object)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 register Lisp_Object object;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 while (1)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 register Lisp_Object map, tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
325 /* 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
326 map = get_keymap_1 (Fcar_safe (object), 0, 0);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 tem = Fkeymapp (map);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
328 if (!NILP (tem))
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
329 object = access_keymap (map, Fcdr (object), 0);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 /* If the keymap contents looks like (STRING . DEFN),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 use DEFN.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 Keymap alist elements like (CHAR MENUSTRING . DEFN)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 will be used by HierarKey menus. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 else if (XTYPE (object) == Lisp_Cons
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 && 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
337 {
f7b55bfe1c05 (get_keyelt): Skip menu help string after menu item name.
Richard M. Stallman <rms@gnu.org>
parents: 1120
diff changeset
338 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
339 /* 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
340 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
341 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
342 && 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
343 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
344 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 /* Anything else is really the value. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348 return object;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 Lisp_Object
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353 store_in_keymap (keymap, idx, def)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 register Lisp_Object idx;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 register Lisp_Object def;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
358 if (XTYPE (keymap) != Lisp_Cons
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
359 || ! EQ (XCONS (keymap)->car, Qkeymap))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
360 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
361
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 /* If idx is a list (some sort of mouse click, perhaps?),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 the index we want to use is the car of the list, which
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 ought to be a symbol. */
1315
884c3d7e7172 * keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents: 1264
diff changeset
365 idx = EVENT_HEAD (idx);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 if (XTYPE (idx) == Lisp_Int
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 && (XINT (idx) < 0 || XINT (idx) >= DENSE_TABLE_SIZE))
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
369 error ("only ASCII characters may be used as keymap indices");
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
370
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
371 /* 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
372 be put in the canonical order. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
373 else if (XTYPE (idx) == Lisp_Symbol)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
374 idx = reorder_modifiers (idx);
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
375
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
377 /* 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
378 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
379 Lisp_Object tail;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
381 /* 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
382 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
383 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
384 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
385 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
386 front of the keymap. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
387 Lisp_Object insertion_point = keymap;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
388
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
389 for (tail = XCONS (keymap)->cdr; CONSP (tail); tail = XCONS (tail)->cdr)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
391 Lisp_Object elt = XCONS (tail)->car;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
392
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
393 switch (XTYPE (elt))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
394 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
395 case Lisp_Vector:
1441
929409595312 * keymap.c (store_in_keymap): Don't forget to QUIT in the
Jim Blandy <jimb@redhat.com>
parents: 1388
diff changeset
396 if (XVECTOR (elt)->size != DENSE_TABLE_SIZE)
929409595312 * keymap.c (store_in_keymap): Don't forget to QUIT in the
Jim Blandy <jimb@redhat.com>
parents: 1388
diff changeset
397 break;
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
398 if (XTYPE (idx) == Lisp_Int)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
399 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
400 XVECTOR (elt)->contents[XFASTINT (idx)] = def;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
401 return def;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
402 }
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
403 insertion_point = tail;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
404 break;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
406 case Lisp_Cons:
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
407 if (EQ (idx, XCONS (elt)->car))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
408 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
409 XCONS (elt)->cdr = def;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
410 return def;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
411 }
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
412 break;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
414 case Lisp_Symbol:
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
415 /* 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
416 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
417 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
418 should be inserted before it. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
419 if (EQ (elt, Qkeymap))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
420 goto keymap_end;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
421 break;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
422 }
1441
929409595312 * keymap.c (store_in_keymap): Don't forget to QUIT in the
Jim Blandy <jimb@redhat.com>
parents: 1388
diff changeset
423
929409595312 * keymap.c (store_in_keymap): Don't forget to QUIT in the
Jim Blandy <jimb@redhat.com>
parents: 1388
diff changeset
424 QUIT;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
426
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
427 keymap_end:
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
428 /* 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
429 IDX. Let's add one. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
430 XCONS (insertion_point)->cdr =
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
431 Fcons (Fcons (idx, def), XCONS (insertion_point)->cdr);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
433
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 return def;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
437
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 DEFUN ("copy-keymap", Fcopy_keymap, Scopy_keymap, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 "Return a copy of the keymap KEYMAP.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440 The copy starts out with the same definitions of KEYMAP,\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 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
442 Any key definitions that are subkeymaps are recursively copied.\n\
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 250
diff changeset
443 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
444 is not copied.")
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 (keymap)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 register Lisp_Object copy, tail;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 copy = Fcopy_alist (get_keymap (keymap));
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 for (tail = copy; CONSP (tail); tail = XCONS (tail)->cdr)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
454 Lisp_Object elt = XCONS (tail)->car;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
456 if (XTYPE (elt) == Lisp_Vector
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
457 && XVECTOR (elt)->size == DENSE_TABLE_SIZE)
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 int i;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
461 elt = Fcopy_sequence (elt);
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
462 XCONS (tail)->car = elt;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 for (i = 0; i < DENSE_TABLE_SIZE; i++)
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
465 if (XTYPE (XVECTOR (elt)->contents[i]) != Lisp_Symbol
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
466 && Fkeymapp (XVECTOR (elt)->contents[i]))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
467 XVECTOR (elt)->contents[i] =
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
468 Fcopy_keymap (XVECTOR (elt)->contents[i]);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
470 else if (CONSP (elt)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
471 && XTYPE (XCONS (elt)->cdr) != Lisp_Symbol
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
472 && ! NILP (Fkeymapp (XCONS (elt)->cdr)))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 XCONS (elt)->cdr = Fcopy_keymap (XCONS (elt)->cdr);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 return copy;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
479 /* Simple Keymap mutators and accessors. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
480
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 DEFUN ("define-key", Fdefine_key, Sdefine_key, 3, 3, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 "Args KEYMAP, KEY, DEF. Define key sequence KEY, in KEYMAP, as DEF.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 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
484 meaning a sequence of keystrokes and events.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 DEF is anything that can be a key's definition:\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 nil (means key is undefined in this keymap),\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 a command (a Lisp function suitable for interactive calling)\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 a string (treated as a keyboard macro),\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 a keymap (to define a prefix key),\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 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
491 function definition, which should at that time be one of the above,\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 or another symbol whose function definition is used, etc.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 a cons (STRING . DEFN), meaning that DEFN is the definition\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 (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
495 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
496 \n\
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
497 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
498 the front of KEYMAP.")
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 (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
500 Lisp_Object keymap;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 Lisp_Object key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 Lisp_Object def;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 register int idx;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 register Lisp_Object c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 register Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 register Lisp_Object cmd;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 int metized = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 int length;
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
510 struct gcpro gcpro1, gcpro2, gcpro3;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 keymap = get_keymap (keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 if (XTYPE (key) != Lisp_Vector
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 && XTYPE (key) != Lisp_String)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 key = wrong_type_argument (Qarrayp, key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
518 length = XFASTINT (Flength (key));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 if (length == 0)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
522 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
523
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 idx = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 while (1)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 c = Faref (key, make_number (idx));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 if (XTYPE (c) == Lisp_Int
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 && XINT (c) >= 0200
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 && !metized)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 c = meta_prefix_char;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 metized = 1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 if (XTYPE (c) == Lisp_Int)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 XSETINT (c, XINT (c) & 0177);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 metized = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 idx++;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 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
546 RETURN_UNGCPRO (store_in_keymap (keymap, c, def));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
548 cmd = get_keyelt (access_keymap (keymap, c, 0));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
550 if (NILP (cmd))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 {
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
552 cmd = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 store_in_keymap (keymap, c, cmd);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
556 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
557 if (NILP (keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 error ("Key sequence %s uses invalid prefix characters",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 XSTRING (key)->data);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 /* 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
564
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 DEFUN ("lookup-key", Flookup_key, Slookup_key, 2, 2, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 "In keymap KEYMAP, look up key sequence KEY. Return the definition.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 nil means undefined. See doc of `define-key' for kinds of definitions.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 A number as value means KEY is \"too long\";\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569 that is, characters or symbols in it except for the last one\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 fail to be a valid sequence of prefix characters in KEYMAP.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 The number is how many characters at the front of KEY\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 it takes to reach a non-prefix command.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 (keymap, key)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 register Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 Lisp_Object key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 register int idx;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 register Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 register Lisp_Object cmd;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 register Lisp_Object c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 int metized = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 int length;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 keymap = get_keymap (keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 if (XTYPE (key) != Lisp_Vector
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 && XTYPE (key) != Lisp_String)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 key = wrong_type_argument (Qarrayp, key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
590 length = XFASTINT (Flength (key));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 if (length == 0)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 return keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 idx = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 while (1)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597 c = Faref (key, make_number (idx));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 if (XTYPE (c) == Lisp_Int
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 && XINT (c) >= 0200
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 && !metized)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 c = meta_prefix_char;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 metized = 1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 if (XTYPE (c) == Lisp_Int)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 XSETINT (c, XINT (c) & 0177);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 metized = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 idx++;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614
1388
02226bff1476 * keymap.c (initial_define_lispy_key): New function, for defining
Jim Blandy <jimb@redhat.com>
parents: 1315
diff changeset
615 cmd = get_keyelt (access_keymap (keymap, c, 0));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 if (idx == length)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 return cmd;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
619 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
620 if (NILP (keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 return make_number (idx);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 QUIT;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 /* Append a key to the end of a key sequence. If key_sequence is a
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 string and key is a character, the result will be another string;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 otherwise, it will be a vector. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 Lisp_Object
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 append_key (key_sequence, key)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 Lisp_Object key_sequence, key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 Lisp_Object args[2];
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 args[0] = key_sequence;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 if (XTYPE (key_sequence) == Lisp_String
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 && XTYPE (key) == Lisp_Int)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 args[1] = Fchar_to_string (key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 return Fconcat (2, args);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 args[1] = Fcons (key, Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 return Fvconcat (2, args);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
650
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
651
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
652 /* Global, local, and minor mode keymap stuff. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
653
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
654 /* 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
655 some systems, static gets macro-defined to be the empty string.
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
656 Ickypoo. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
657 static Lisp_Object *cmm_modes, *cmm_maps;
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
658 static int cmm_size;
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
659
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
660 /* 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
661 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
662
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
663 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
664 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
665 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
666 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
667 new assoclist, list, what have you) for each invocation would
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
668 result in a lot of consing over time.
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
669
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
670 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
671 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
672 which would call this function again, resulting in an infinite
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
673 loop. Instead, we'll use realloc/malloc and silently truncate the
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
674 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
675 code signals the error. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
676 int
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
677 current_minor_maps (modeptr, mapptr)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
678 Lisp_Object **modeptr, **mapptr;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
679 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
680 int i = 0;
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
681 Lisp_Object alist, assoc, var, val;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
682
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
683 for (alist = Vminor_mode_map_alist;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
684 CONSP (alist);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
685 alist = XCONS (alist)->cdr)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
686 if (CONSP (assoc = XCONS (alist)->car)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
687 && XTYPE (var = XCONS (assoc)->car) == Lisp_Symbol
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
688 && ! EQ ((val = find_symbol_value (var)), Qunbound)
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
689 && ! NILP (val))
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
690 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
691 if (i >= cmm_size)
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
692 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
693 Lisp_Object *newmodes, *newmaps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
694
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
695 if (cmm_maps)
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
696 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
697 newmodes = (Lisp_Object *) realloc (cmm_modes, cmm_size *= 2);
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
698 newmaps = (Lisp_Object *) realloc (cmm_maps, cmm_size);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
699 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
700 else
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
701 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
702 newmodes = (Lisp_Object *) malloc (cmm_size = 30);
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
703 newmaps = (Lisp_Object *) malloc (cmm_size);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
704 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
705
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
706 if (newmaps && newmodes)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
707 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
708 cmm_modes = newmodes;
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
709 cmm_maps = newmaps;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
710 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
711 else
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
712 break;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
713 }
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
714 cmm_modes[i] = var;
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
715 cmm_maps [i] = XCONS (assoc)->cdr;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
716 i++;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
717 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
718
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
719 if (modeptr) *modeptr = cmm_modes;
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
720 if (mapptr) *mapptr = cmm_maps;
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
721 return i;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
722 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
723
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 DEFUN ("key-binding", Fkey_binding, Skey_binding, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 "Return the binding for command KEY in current keymaps.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 KEY is a string, a sequence of keystrokes.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 The binding is probably a symbol with a function definition.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 (key)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 Lisp_Object key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 {
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
731 Lisp_Object *maps, value;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
732 int nmaps, i;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
733
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
734 nmaps = current_minor_maps (0, &maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
735 for (i = 0; i < nmaps; i++)
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
736 if (! NILP (maps[i]))
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
737 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
738 value = Flookup_key (maps[i], key);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
739 if (! NILP (value) && XTYPE (value) != Lisp_Int)
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
740 return value;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
741 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
742
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
743 if (! NILP (current_buffer->keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744 {
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
745 value = Flookup_key (current_buffer->keymap, key);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
746 if (! NILP (value) && XTYPE (value) != Lisp_Int)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 return value;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 }
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
749
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
750 value = Flookup_key (current_global_map, key);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
751 if (! NILP (value) && XTYPE (value) != Lisp_Int)
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
752 return value;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
753
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
754 return Qnil;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757 DEFUN ("local-key-binding", Flocal_key_binding, Slocal_key_binding, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
758 "Return the binding for command KEYS in current local keymap only.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
759 KEYS is a string, a sequence of keystrokes.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
760 The binding is probably a symbol with a function definition.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761 (keys)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
762 Lisp_Object keys;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
763 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
764 register Lisp_Object map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
765 map = current_buffer->keymap;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
766 if (NILP (map))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
767 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
768 return Flookup_key (map, keys);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
770
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
771 DEFUN ("global-key-binding", Fglobal_key_binding, Sglobal_key_binding, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772 "Return the binding for command KEYS in current global keymap only.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 KEYS is a string, a sequence of keystrokes.\n\
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
774 The binding is probably a symbol with a function definition.\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
775 This function's return values are the same as those of lookup-key\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
776 (which see).")
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777 (keys)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 Lisp_Object keys;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780 return Flookup_key (current_global_map, keys);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
783 DEFUN ("minor-mode-key-binding", Fminor_mode_key_binding, Sminor_mode_key_binding, 1, 1, 0,
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
784 "Find the visible minor mode bindings of KEY.\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
785 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
786 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
787 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
788 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
789 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
790 be ignored. Similarly, the list doesn't include non-prefix bindings\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
791 that come after prefix bindings.")
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
792 (key)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
793 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
794 Lisp_Object *modes, *maps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
795 int nmaps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
796 Lisp_Object binding;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
797 int i, j;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
798
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
799 nmaps = current_minor_maps (&modes, &maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
800
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
801 for (i = j = 0; i < nmaps; i++)
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
802 if (! NILP (maps[i])
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
803 && ! NILP (binding = Flookup_key (maps[i], key))
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
804 && XTYPE (binding) != Lisp_Int)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
805 {
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
806 if (! NILP (get_keymap (binding)))
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
807 maps[j++] = Fcons (modes[i], binding);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
808 else if (j == 0)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
809 return Fcons (Fcons (modes[i], binding), Qnil);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
810 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
811
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
812 return Flist (j, maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
813 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
814
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815 DEFUN ("global-set-key", Fglobal_set_key, Sglobal_set_key, 2, 2,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816 "kSet key globally: \nCSet key %s to command: ",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
817 "Give KEY a global binding as COMMAND.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818 COMMAND is a symbol naming an interactively-callable function.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
819 KEY is a string representing a sequence of keystrokes.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 Note that if KEY has a local binding in the current buffer\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821 that local binding will continue to shadow any global binding.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822 (keys, function)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 Lisp_Object keys, function;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825 if (XTYPE (keys) != Lisp_Vector
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826 && XTYPE (keys) != Lisp_String)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827 keys = wrong_type_argument (Qarrayp, keys);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
828
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
829 Fdefine_key (current_global_map, keys, function);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
831 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 DEFUN ("local-set-key", Flocal_set_key, Slocal_set_key, 2, 2,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834 "kSet key locally: \nCSet key %s locally to command: ",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 "Give KEY a local binding as COMMAND.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836 COMMAND is a symbol naming an interactively-callable function.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837 KEY is a string representing a sequence of keystrokes.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838 The binding goes in the current buffer's local map,\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839 which is shared with other buffers in the same major mode.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840 (keys, function)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 Lisp_Object keys, function;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843 register Lisp_Object map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 map = current_buffer->keymap;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
845 if (NILP (map))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846 {
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
847 map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 current_buffer->keymap = map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
849 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 if (XTYPE (keys) != Lisp_Vector
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 && XTYPE (keys) != Lisp_String)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 keys = wrong_type_argument (Qarrayp, keys);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855 Fdefine_key (map, keys, function);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 DEFUN ("global-unset-key", Fglobal_unset_key, Sglobal_unset_key,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
860 1, 1, "kUnset key globally: ",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861 "Remove global binding of KEY.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 KEY is a string representing a sequence of keystrokes.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
863 (keys)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 Lisp_Object keys;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
866 return Fglobal_set_key (keys, Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
868
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869 DEFUN ("local-unset-key", Flocal_unset_key, Slocal_unset_key, 1, 1,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
870 "kUnset key locally: ",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871 "Remove local binding of KEY.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872 KEY is a string representing a sequence of keystrokes.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 (keys)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 Lisp_Object keys;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
876 if (!NILP (current_buffer->keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877 Flocal_set_key (keys, Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
880
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881 DEFUN ("define-prefix-command", Fdefine_prefix_command, Sdefine_prefix_command, 1, 2, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
882 "Define COMMAND as a prefix command.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 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
884 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
885 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
886 as a function.")
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
887 (name, mapvar)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 Lisp_Object name, mapvar;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890 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
891 map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892 Ffset (name, map);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
893 if (!NILP (mapvar))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
894 Fset (mapvar, map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896 Fset (name, map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 return name;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
899
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
900 DEFUN ("use-global-map", Fuse_global_map, Suse_global_map, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
901 "Select KEYMAP as the global keymap.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
902 (keymap)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
903 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
904 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
905 keymap = get_keymap (keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
906 current_global_map = keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
907 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 DEFUN ("use-local-map", Fuse_local_map, Suse_local_map, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 "Select KEYMAP as the local keymap.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
912 If KEYMAP is nil, that means no local keymap.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
913 (keymap)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
914 Lisp_Object keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
915 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
916 if (!NILP (keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
917 keymap = get_keymap (keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
918
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
919 current_buffer->keymap = keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
920
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
921 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
922 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
923
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
924 DEFUN ("current-local-map", Fcurrent_local_map, Scurrent_local_map, 0, 0, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
925 "Return current buffer's local keymap, or nil if it has none.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
926 ()
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
927 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
928 return current_buffer->keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
929 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
930
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
931 DEFUN ("current-global-map", Fcurrent_global_map, Scurrent_global_map, 0, 0, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
932 "Return the current global keymap.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
933 ()
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935 return current_global_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 }
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
937
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
938 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
939 "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
940 ()
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
941 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
942 Lisp_Object *maps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
943 int nmaps = current_minor_maps (0, &maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
944
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
945 return Flist (nmaps, maps);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
946 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
948 /* Help functions for describing and documenting keymaps. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
949
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950 DEFUN ("accessible-keymaps", Faccessible_keymaps, Saccessible_keymaps,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 "Find all keymaps accessible via prefix characters from KEYMAP.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
953 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
954 KEYS starting from KEYMAP gets you to MAP. These elements are ordered\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955 so that the KEYS increase in length. The first element is (\"\" . KEYMAP).")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 (startmap)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957 Lisp_Object startmap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
959 Lisp_Object maps, tail;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
960
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961 maps = Fcons (Fcons (build_string (""), get_keymap (startmap)), Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
962
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
963 /* For each map in the list maps,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
964 look at any other maps it points to,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
965 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
966
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
967 This is a breadth-first traversal, where tail is the queue of
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
968 nodes, and maps accumulates a list of all nodes visited. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
969
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
970 for (tail = maps; CONSP (tail); tail = XCONS (tail)->cdr)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
971 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972 register Lisp_Object thisseq = Fcar (Fcar (tail));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
973 register Lisp_Object thismap = Fcdr (Fcar (tail));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
974 Lisp_Object last = make_number (XINT (Flength (thisseq)) - 1);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
975
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
976 /* Does the current sequence end in the meta-prefix-char? */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
977 int is_metized = (XINT (last) >= 0
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
978 && EQ (Faref (thisseq, last), meta_prefix_char));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
980 for (; CONSP (thismap); thismap = XCONS (thismap)->cdr)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
981 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
982 Lisp_Object elt = XCONS (thismap)->car;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
984 QUIT;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
986 if (XTYPE (elt) == Lisp_Vector)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 register int i;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 /* Vector keymap. Scan all the elements. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991 for (i = 0; i < DENSE_TABLE_SIZE; i++)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 register Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994 register Lisp_Object cmd;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
996 cmd = get_keyelt (XVECTOR (elt)->contents[i]);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
997 if (NILP (cmd)) continue;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998 tem = Fkeymapp (cmd);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
999 if (!NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 cmd = get_keymap (cmd);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 /* Ignore keymaps that are already added to maps. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 tem = Frassq (cmd, maps);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1004 if (NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 /* If the last key in thisseq is meta-prefix-char,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 turn it into a meta-ized keystroke. We know
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 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
1009 ascii keystroke since we're processing a
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1010 keymap table. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 if (is_metized)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 tem = Fcopy_sequence (thisseq);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 Faset (tem, last, make_number (i | 0200));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 /* This new sequence is the same length as
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 thisseq, so stick it in the list right
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 after this one. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 XCONS (tail)->cdr =
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 Fcons (Fcons (tem, cmd), XCONS (tail)->cdr);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024 tem = append_key (thisseq, make_number (i));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 nconc2 (tail, Fcons (Fcons (tem, cmd), Qnil));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1030 }
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1031 else if (CONSP (elt))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 register Lisp_Object cmd = get_keyelt (XCONS (elt)->cdr);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 register Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 /* Ignore definitions that aren't keymaps themselves. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 tem = Fkeymapp (cmd);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1038 if (!NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 /* Ignore keymaps that have been seen already. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 cmd = get_keymap (cmd);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 tem = Frassq (cmd, maps);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1043 if (NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 /* let elt be the event defined by this map entry. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1046 elt = XCONS (elt)->car;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1047
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1048 /* If the last key in thisseq is meta-prefix-char, and
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1049 this entry is a binding for an ascii keystroke,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050 turn it into a meta-ized keystroke. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051 if (is_metized && XTYPE (elt) == Lisp_Int)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053 tem = Fcopy_sequence (thisseq);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1054 Faset (tem, last, make_number (XINT (elt) | 0200));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1055
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1056 /* This new sequence is the same length as
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1057 thisseq, so stick it in the list right
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1058 after this one. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1059 XCONS (tail)->cdr =
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 Fcons (Fcons (tem, cmd), XCONS (tail)->cdr);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 nconc2 (tail,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 Fcons (Fcons (append_key (thisseq, elt), cmd),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1065 Qnil));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 return maps;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075 Lisp_Object Qsingle_key_description, Qkey_description;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 DEFUN ("key-description", Fkey_description, Skey_description, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078 "Return a pretty description of key-sequence KEYS.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079 Control characters turn into \"C-foo\" sequences, meta into \"M-foo\"\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080 spaces are put between sequence elements, etc.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 (keys)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082 Lisp_Object keys;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084 return Fmapconcat (Qsingle_key_description, keys, build_string (" "));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1086
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087 char *
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088 push_key_description (c, p)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 register unsigned int c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090 register char *p;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 if (c >= 0200)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094 *p++ = 'M';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 *p++ = '-';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1096 c -= 0200;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 if (c < 040)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 if (c == 033)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 *p++ = 'E';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 *p++ = 'S';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104 *p++ = 'C';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106 else if (c == Ctl('I'))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 *p++ = 'T';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 *p++ = 'A';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 *p++ = 'B';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 else if (c == Ctl('J'))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 *p++ = 'L';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 *p++ = 'F';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 *p++ = 'D';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118 else if (c == Ctl('M'))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 *p++ = 'R';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 *p++ = 'E';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122 *p++ = 'T';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 *p++ = 'C';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127 *p++ = '-';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128 if (c > 0 && c <= Ctl ('Z'))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 *p++ = c + 0140;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 *p++ = c + 0100;
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 else if (c == 0177)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 *p++ = 'D';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 *p++ = 'E';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 *p++ = 'L';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 else if (c == ' ')
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142 *p++ = 'S';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1143 *p++ = 'P';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1144 *p++ = 'C';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1145 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1146 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1147 *p++ = c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1149 return p;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 DEFUN ("single-key-description", Fsingle_key_description, Ssingle_key_description, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153 "Return a pretty description of command character KEY.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154 Control characters turn into C-whatever, etc.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 (key)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 Lisp_Object key;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1157 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1158 register unsigned char c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159 char tem[6];
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160
1315
884c3d7e7172 * keymap.c (access_keymap, store_in_keymap,
Jim Blandy <jimb@redhat.com>
parents: 1264
diff changeset
1161 key = EVENT_HEAD (key);
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1162
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 switch (XTYPE (key))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 case Lisp_Int: /* Normal character */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166 c = XINT (key) & 0377;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167 *push_key_description (c, tem) = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168 return build_string (tem);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 case Lisp_Symbol: /* Function key or event-symbol */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171 return Fsymbol_name (key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 default:
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 error ("KEY must be an integer, cons, or symbol.");
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 char *
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 push_text_char_description (c, p)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180 register unsigned int c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181 register char *p;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183 if (c >= 0200)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 *p++ = 'M';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 *p++ = '-';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187 c -= 0200;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189 if (c < 040)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191 *p++ = '^';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1192 *p++ = c + 64; /* 'A' - 1 */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 else if (c == 0177)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1195 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1196 *p++ = '^';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197 *p++ = '?';
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200 *p++ = c;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 return p;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1202 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1203
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1204 DEFUN ("text-char-description", Ftext_char_description, Stext_char_description, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1205 "Return a pretty description of file-character CHAR.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1206 Control characters turn into \"^char\", etc.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1207 (chr)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1208 Lisp_Object chr;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1209 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1210 char tem[6];
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1212 CHECK_NUMBER (chr, 0);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1213
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1214 *push_text_char_description (XINT (chr) & 0377, tem) = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1215
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 return build_string (tem);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1217 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1218
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1219 /* where-is - finding a command in a set of keymaps. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1220
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1221 DEFUN ("where-is-internal", Fwhere_is_internal, Swhere_is_internal, 1, 5, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1222 "Return list of keys that invoke DEFINITION in KEYMAP or KEYMAP1.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1223 If KEYMAP is nil, search only KEYMAP1.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1224 If KEYMAP1 is nil, use the current global map.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1225 \n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1226 If optional 4th arg FIRSTONLY is non-nil,\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1227 return a string representing the first key sequence found,\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228 rather than a list of all possible key sequences.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1229 \n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230 If optional 5th arg NOINDIRECT is non-nil, don't follow indirections\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231 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
1232 indirect definition itself.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1233 (definition, local_keymap, global_keymap, firstonly, noindirect)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1234 Lisp_Object definition, local_keymap, global_keymap;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1235 Lisp_Object firstonly, noindirect;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1236 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 register Lisp_Object maps;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 Lisp_Object found;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1240 if (NILP (global_keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1241 global_keymap = current_global_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1243 if (!NILP (local_keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1244 maps = nconc2 (Faccessible_keymaps (get_keymap (local_keymap)),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245 Faccessible_keymaps (get_keymap (global_keymap)));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1246 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1247 maps = Faccessible_keymaps (get_keymap (global_keymap));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1248
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249 found = Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1250
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1251 for (; !NILP (maps); maps = Fcdr (maps))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1253 /* Key sequence to reach map */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1254 register Lisp_Object this = Fcar (Fcar (maps));
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1255
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1256 /* The map that it reaches */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1257 register Lisp_Object map = Fcdr (Fcar (maps));
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1258
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1259 /* 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
1260 int i = 0;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1261
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1262 /* In order to fold [META-PREFIX-CHAR CHAR] sequences into
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263 [M-CHAR] sequences, check if last character of the sequence
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1264 is the meta-prefix char. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 Lisp_Object last = make_number (XINT (Flength (this)) - 1);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266 int last_is_meta = (XINT (last) >= 0
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1267 && EQ (Faref (this, last), meta_prefix_char));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1269 QUIT;
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1270
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1271 while (CONSP (map))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1272 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1273 /* 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
1274 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
1275 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
1276 loop body over both keymap and vector bindings.
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1278 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
1279 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
1280 have finished off the vector. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1281
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1282 Lisp_Object elt = XCONS (map)->car;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1283 Lisp_Object key, binding, sequence;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1285 QUIT;
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1286
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1287 /* 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
1288 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
1289 if (XTYPE (elt) == Lisp_Vector)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1290 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1291 /* 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
1292 binding = XVECTOR (elt)->contents[i];
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1293 XFASTINT (key) = i;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1294 i++;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1295
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1296 /* 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
1297 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
1298 next vector we may find. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1299 if (i >= DENSE_TABLE_SIZE)
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1300 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1301 map = XCONS (map)->cdr;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1302 i = 0;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1303 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1304 }
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1305 else if (CONSP (elt))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1307 key = Fcar (Fcar (map));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308 binding = Fcdr (Fcar (map));
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1309
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1310 map = XCONS (map)->cdr;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1311 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1312 else
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1313 /* 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
1314 vectors nor conses. */
1236
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1315 {
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1316 map = XCONS (map)->cdr;
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1317 continue;
5e8c234e5f03 * keymap.c (access_keymap): Remove code to notice bindings for
Jim Blandy <jimb@redhat.com>
parents: 1209
diff changeset
1318 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1319
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1320 /* Search through indirections unless that's not wanted. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1321 if (NILP (noindirect))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1322 binding = get_keyelt (binding);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1323
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324 /* End this iteration if this element does not match
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1325 the target. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1326
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1327 if (XTYPE (definition) == Lisp_Cons)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1328 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330 tem = Fequal (binding, definition);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1331 if (NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1332 continue;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1333 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335 if (!EQ (binding, definition))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1336 continue;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1337
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1338 /* We have found a match.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1339 Construct the key sequence where we found it. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1340 if (XTYPE (key) == Lisp_Int && last_is_meta)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1341 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1342 sequence = Fcopy_sequence (this);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1343 Faset (sequence, last, make_number (XINT (key) | 0200));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1345 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1346 sequence = append_key (this, key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1347
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1348 /* Verify that this key binding is not shadowed by another
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349 binding for the same key, before we say it exists.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351 Mechanism: look for local definition of this key and if
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352 it is defined and does not match what we found then
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353 ignore this key.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1354
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1355 Either nil or number as value from Flookup_key
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356 means undefined. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1357 if (!NILP (local_keymap))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359 binding = Flookup_key (local_keymap, sequence);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1360 if (!NILP (binding) && XTYPE (binding) != Lisp_Int)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 if (XTYPE (definition) == Lisp_Cons)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364 Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 tem = Fequal (binding, definition);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1366 if (NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 continue;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 if (!EQ (binding, definition))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 continue;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1375 /* It is a true unshadowed match. Record it. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1376
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1377 if (!NILP (firstonly))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378 return sequence;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 found = Fcons (sequence, found);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 return Fnreverse (found);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385 /* Return a string listing the keys and buttons that run DEFINITION. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1386
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1387 static Lisp_Object
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 where_is_string (definition)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1389 Lisp_Object definition;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1390 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1391 register Lisp_Object keys, keys1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1392
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1393 keys = Fwhere_is_internal (definition,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1394 current_buffer->keymap, Qnil, Qnil, Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1395 keys1 = Fmapconcat (Qkey_description, keys, build_string (", "));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1396
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397 return keys1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1398 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1399
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1400 DEFUN ("where-is", Fwhere_is, Swhere_is, 1, 1, "CWhere is command: ",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1401 "Print message listing key sequences that invoke specified command.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1402 Argument is a command definition, usually a symbol with a function definition.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1403 (definition)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1404 Lisp_Object definition;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1405 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1406 register Lisp_Object string;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1407
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1408 CHECK_SYMBOL (definition, 0);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1409 string = where_is_string (definition);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1410
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1411 if (XSTRING (string)->size)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1412 message ("%s is on %s", XSYMBOL (definition)->name->data,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1413 XSTRING (string)->data);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1414 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1415 message ("%s is not on any key", XSYMBOL (definition)->name->data);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1416 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1417 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1418
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1419 /* describe-bindings - summarizing all the bindings in a set of keymaps. */
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1420
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1421 DEFUN ("describe-bindings", Fdescribe_bindings, Sdescribe_bindings, 0, 0, "",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1422 "Show a list of all defined keys, and their definitions.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423 The list is put in a buffer, which is displayed.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424 ()
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1425 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1426 register Lisp_Object thisbuf;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427 XSET (thisbuf, Lisp_Buffer, current_buffer);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1428 internal_with_output_to_temp_buffer ("*Help*",
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1429 describe_buffer_bindings,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1430 thisbuf);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1431 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1433
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1434 static Lisp_Object
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1435 describe_buffer_bindings (descbuf)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1436 Lisp_Object descbuf;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1438 register Lisp_Object start1, start2;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1439
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1440 char *key_heading
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1441 = "\
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1442 key binding\n\
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1443 --- -------\n";
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1444 char *alternate_heading
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1445 = "\
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1446 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
1447 nominal alternate\n\
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1448 ------- ---------\n";
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450 Fset_buffer (Vstandard_output);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1452 /* 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
1453 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
1454 {
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1455 int c;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1456 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
1457 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
1458
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1459 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
1460 if (translate[c] != c)
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1461 {
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1462 char buf[20];
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1463 char *bufend;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1464
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1465 if (alternate_heading)
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1466 {
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1467 insert_string (alternate_heading);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1468 alternate_heading = 0;
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1469 }
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1470
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1471 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
1472 insert (buf, bufend - buf);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1473 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
1474 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
1475 insert (buf, bufend - buf);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1476
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1477 insert ("\n", 1);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1478 }
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1479
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1480 insert ("\n", 1);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1481 }
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1482
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1483 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1484 int i, nmaps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1485 Lisp_Object *modes, *maps;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1486
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1487 /* 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
1488 minor modes correctly. */
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1489 Fset_buffer (descbuf);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1490 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
1491 Fset_buffer (Vstandard_output);
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1492
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1493 for (i = 0; i < nmaps; i++)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1494 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1495 if (XTYPE (modes[i]) == Lisp_Symbol)
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1496 {
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1497 insert_char ('`');
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1498 insert_string (XSYMBOL (modes[i])->name->data);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1499 insert_char ('\'');
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1500 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1501 else
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1502 insert_string ("Strangely Named");
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1503 insert_string (" Minor Mode Bindings:\n");
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1504 insert_string (key_heading);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1505 describe_map_tree (maps[i], 0, Qnil);
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1506 insert_char ('\n');
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1507 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1508 }
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1509
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1510 start1 = XBUFFER (descbuf)->keymap;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1511 if (!NILP (start1))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1512 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1513 insert_string ("Local Bindings:\n");
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1514 insert_string (key_heading);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1515 describe_map_tree (start1, 0, Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1516 insert_string ("\n");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1517 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1518
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1519 insert_string ("Global Bindings:\n");
1120
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1520 if (NILP (start1))
0a486e1a45bc * keymap.c (describe_buffer_bindings): Adjust key_heading to match
Jim Blandy <jimb@redhat.com>
parents: 1095
diff changeset
1521 insert_string (key_heading);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1522
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1523 describe_map_tree (current_global_map, 0, XBUFFER (descbuf)->keymap);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1524
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525 Fset_buffer (descbuf);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1526 return Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1527 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1528
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1529 /* Insert a desription of the key bindings in STARTMAP,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1530 followed by those of all maps reachable through STARTMAP.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1531 If PARTIAL is nonzero, omit certain "uninteresting" commands
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1532 (such as `undefined').
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1533 If SHADOW is non-nil, it is another map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1534 don't mention keys which would be shadowed by it. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1536 void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 describe_map_tree (startmap, partial, shadow)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1538 Lisp_Object startmap, shadow;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1539 int partial;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1540 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1541 register Lisp_Object elt, sh;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1542 Lisp_Object maps;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1543 struct gcpro gcpro1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1544
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1545 maps = Faccessible_keymaps (startmap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546 GCPRO1 (maps);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1547
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1548 for (; !NILP (maps); maps = Fcdr (maps))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1549 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550 elt = Fcar (maps);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1551 sh = Fcar (elt);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1552
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 /* If there is no shadow keymap given, don't shadow. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1554 if (NILP (shadow))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1555 sh = Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1556
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1557 /* If the sequence by which we reach this keymap is zero-length,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1558 then the shadow map for this keymap is just SHADOW. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1559 else if ((XTYPE (sh) == Lisp_String
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1560 && XSTRING (sh)->size == 0)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1561 || (XTYPE (sh) == Lisp_Vector
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1562 && XVECTOR (sh)->size == 0))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1563 sh = shadow;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1564
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1565 /* If the sequence by which we reach this keymap actually has
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1566 some elements, then the sequence's definition in SHADOW is
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1567 what we should use. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1568 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1569 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1570 sh = Flookup_key (shadow, Fcar (elt));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1571 if (XTYPE (sh) == Lisp_Int)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1572 sh = Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1573 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1574
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1575 /* If sh is null (meaning that the current map is not shadowed),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1576 or a keymap (meaning that bindings from the current map might
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577 show through), describe the map. Otherwise, sh is a command
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 that completely shadows the current map, and we shouldn't
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1579 bother. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1580 if (NILP (sh) || !NILP (Fkeymapp (sh)))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581 describe_map (Fcdr (elt), Fcar (elt), partial, sh);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1583
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 UNGCPRO;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587 static void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1588 describe_command (definition)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1589 Lisp_Object definition;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1590 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591 register Lisp_Object tem1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1593 Findent_to (make_number (16), make_number (1));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1594
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1595 if (XTYPE (definition) == Lisp_Symbol)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1596 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597 XSET (tem1, Lisp_String, XSYMBOL (definition)->name);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1598 insert1 (tem1);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1599 insert_string ("\n");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1601 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1602 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1603 tem1 = Fkeymapp (definition);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1604 if (!NILP (tem1))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 insert_string ("Prefix Command\n");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1607 insert_string ("??\n");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1610
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1611 /* Describe the contents of map MAP, assuming that this map itself is
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612 reached by the sequence of prefix keys KEYS (a string or vector).
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 PARTIAL, SHADOW is as in `describe_map_tree' above. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1614
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1615 static void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616 describe_map (map, keys, partial, shadow)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617 Lisp_Object map, keys;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1618 int partial;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1619 Lisp_Object shadow;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1621 register Lisp_Object keysdesc;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1622
1517
72b7bbcaf7d8 * keymap.c (Fdefine_key, Flookup_key, describe_map): Don't assume
Jim Blandy <jimb@redhat.com>
parents: 1441
diff changeset
1623 if (!NILP (keys) && XFASTINT (Flength (keys)) > 0)
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1624 keysdesc = concat2 (Fkey_description (keys),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1625 build_string (" "));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 else
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1627 keysdesc = Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1629 describe_map_2 (map, keysdesc, describe_command, partial, shadow);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1630 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1631
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1632 /* Insert a description of KEYMAP into the current buffer. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1634 static void
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1635 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
1636 register Lisp_Object keymap;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1637 Lisp_Object elt_prefix;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1638 int (*elt_describer) ();
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1639 int partial;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1640 Lisp_Object shadow;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1641 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1642 Lisp_Object this;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643 Lisp_Object tem1, tem2 = Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644 Lisp_Object suppress;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645 Lisp_Object kludge;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1646 int first = 1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1647 struct gcpro gcpro1, gcpro2, gcpro3;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1648
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1649 if (partial)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1650 suppress = intern ("suppress-keymap");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1651
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1652 /* 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
1653 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
1654 fresh vector every time. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1655 kludge = Fmake_vector (make_number (1), Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1656
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1657 GCPRO3 (elt_prefix, tem2, kludge);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1658
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1659 for (; CONSP (keymap); keymap = Fcdr (keymap))
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 QUIT;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1662
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1663 if (XTYPE (XCONS (keymap)->car) == Lisp_Vector)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1664 describe_vector (XCONS (keymap)->car,
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1665 elt_prefix, elt_describer, partial, shadow);
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1666 else
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1667 {
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1668 tem1 = Fcar_safe (Fcar (keymap));
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1669 tem2 = get_keyelt (Fcdr_safe (Fcar (keymap)));
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1670
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1671 /* Don't show undefined commands or suppressed commands. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1672 if (NILP (tem2)) continue;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1673 if (XTYPE (tem2) == Lisp_Symbol && partial)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1674 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1675 this = Fget (tem2, suppress);
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1676 if (!NILP (this))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1677 continue;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1678 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1679
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1680 /* 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
1681 because a local definition of the same key shadows it. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1682
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1683 if (!NILP (shadow))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1684 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1685 Lisp_Object tem;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1686
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1687 XVECTOR (kludge)->contents[0] = tem1;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1688 tem = Flookup_key (shadow, kludge);
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1689 if (!NILP (tem)) continue;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1690 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1691
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1692 if (first)
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1693 {
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1694 insert ("\n", 1);
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1695 first = 0;
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1696 }
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1697
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1698 if (!NILP (elt_prefix))
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1699 insert1 (elt_prefix);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1700
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1701 /* THIS gets the string to describe the character TEM1. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1702 this = Fsingle_key_description (tem1);
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1703 insert1 (this);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1704
1209
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1705 /* 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
1706 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
1707 for alignment purposes. */
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1708 (*elt_describer) (tem2);
1aa2cd425737 * keymap.c (DENSE_TABLE_SIZE): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1160
diff changeset
1709 }
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1710 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1712 UNGCPRO;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1713 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1714
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1715 static int
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1716 describe_vector_princ (elt)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1717 Lisp_Object elt;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1718 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1719 Fprinc (elt, Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1720 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1721
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1722 DEFUN ("describe-vector", Fdescribe_vector, Sdescribe_vector, 1, 1, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1723 "Print on `standard-output' a description of contents of VECTOR.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1724 This is text showing the elements of vector matched against indices.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1725 (vector)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1726 Lisp_Object vector;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1728 CHECK_VECTOR (vector, 0);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1729 describe_vector (vector, Qnil, describe_vector_princ, 0, Qnil, Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1730 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1731
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1732 describe_vector (vector, elt_prefix, elt_describer, partial, shadow)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1733 register Lisp_Object vector;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1734 Lisp_Object elt_prefix;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1735 int (*elt_describer) ();
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1736 int partial;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1737 Lisp_Object shadow;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1738 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1739 Lisp_Object this;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1740 Lisp_Object dummy;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1741 Lisp_Object tem1, tem2;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1742 register int i;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1743 Lisp_Object suppress;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1744 Lisp_Object kludge;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1745 int first = 1;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1746 struct gcpro gcpro1, gcpro2, gcpro3;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1747
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1748 tem1 = Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1749
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1750 /* This vector gets used to present single keys to Flookup_key. Since
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1751 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
1752 fresh vector every time. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1753 kludge = Fmake_vector (make_number (1), Qnil);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1754 GCPRO3 (elt_prefix, tem1, kludge);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1755
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1756 if (partial)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 suppress = intern ("suppress-keymap");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1758
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759 for (i = 0; i < DENSE_TABLE_SIZE; i++)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1760 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1761 QUIT;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1762 tem1 = get_keyelt (XVECTOR (vector)->contents[i]);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1763
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1764 if (NILP (tem1)) continue;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1766 /* Don't mention suppressed commands. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1767 if (XTYPE (tem1) == Lisp_Symbol && partial)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1768 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1769 this = Fget (tem1, suppress);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1770 if (!NILP (this))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1771 continue;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1772 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1773
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1774 /* If this command in this map is shadowed by some other map,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1775 ignore it. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1776 if (!NILP (shadow))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1777 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1778 Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1779
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1780 XVECTOR (kludge)->contents[0] = make_number (i);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1781 tem = Flookup_key (shadow, kludge);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1782
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1783 if (!NILP (tem)) continue;
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1785
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1786 if (first)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1787 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1788 insert ("\n", 1);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789 first = 0;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1791
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1792 /* 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
1793 if (!NILP (elt_prefix))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1794 insert1 (elt_prefix);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1795
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1796 /* Get the string to describe the character I, and print it. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1797 XFASTINT (dummy) = i;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1798
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1799 /* THIS gets the string to describe the character DUMMY. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1800 this = Fsingle_key_description (dummy);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1801 insert1 (this);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1802
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1803 /* Find all consecutive characters that have the same definition. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1804 while (i + 1 < DENSE_TABLE_SIZE
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1805 && (tem2 = get_keyelt (XVECTOR (vector)->contents[i+1]),
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1806 EQ (tem2, tem1)))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1807 i++;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1808
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1809 /* If we have a range of more than one character,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1810 print where the range reaches to. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1811
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1812 if (i != XINT (dummy))
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1813 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1814 insert (" .. ", 4);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1815 if (!NILP (elt_prefix))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1816 insert1 (elt_prefix);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1817
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1818 XFASTINT (dummy) = i;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1819 insert1 (Fsingle_key_description (dummy));
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1820 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1821
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1822 /* Print a description of the definition of this character.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1823 elt_describer will take care of spacing out far enough
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1824 for alignment purposes. */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1825 (*elt_describer) (tem1);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1826 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1827
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1828 UNGCPRO;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1829 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1830
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1831 /* Apropos - finding all symbols whose names match a regexp. */
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1832 Lisp_Object apropos_predicate;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1833 Lisp_Object apropos_accumulate;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1834
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1835 static void
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1836 apropos_accum (symbol, string)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1837 Lisp_Object symbol, string;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1838 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1839 register Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1840
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1841 tem = Fstring_match (string, Fsymbol_name (symbol), Qnil);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1842 if (!NILP (tem) && !NILP (apropos_predicate))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1843 tem = call1 (apropos_predicate, symbol);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 465
diff changeset
1844 if (!NILP (tem))
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1845 apropos_accumulate = Fcons (symbol, apropos_accumulate);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1846 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1847
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1848 DEFUN ("apropos-internal", Fapropos_internal, Sapropos_internal, 1, 2, 0,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1849 "Show all symbols whose names contain match for REGEXP.\n\
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1850 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
1851 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
1852 Return list of symbols found.")
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1853 (string, pred)
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1854 Lisp_Object string, pred;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1856 struct gcpro gcpro1, gcpro2;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 CHECK_STRING (string, 0);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1858 apropos_predicate = pred;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1859 GCPRO2 (apropos_predicate, apropos_accumulate);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1860 apropos_accumulate = Qnil;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1861 map_obarray (Vobarray, apropos_accum, string);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1862 apropos_accumulate = Fsort (apropos_accumulate, Qstring_lessp);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1863 UNGCPRO;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1864 return apropos_accumulate;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1865 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1867 syms_of_keymap ()
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1868 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1869 Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1870
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1871 Qkeymap = intern ("keymap");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1872 staticpro (&Qkeymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1873
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1874 /* Initialize the keymaps standardly used.
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1875 Each one is the value of a Lisp variable, and is also
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1876 pointed to by a C variable */
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1877
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
1878 global_map = Fmake_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1879 Fset (intern ("global-map"), global_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1880
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
1881 meta_map = Fmake_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1882 Fset (intern ("esc-map"), meta_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1883 Ffset (intern ("ESC-prefix"), meta_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1884
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
1885 control_x_map = Fmake_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1886 Fset (intern ("ctl-x-map"), control_x_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1887 Ffset (intern ("Control-X-prefix"), control_x_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1888
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1889 DEFVAR_LISP ("minibuffer-local-map", &Vminibuffer_local_map,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1890 "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
1891 Vminibuffer_local_map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1892
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1893 DEFVAR_LISP ("minibuffer-local-ns-map", &Vminibuffer_local_ns_map,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1894 "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
1895 Vminibuffer_local_ns_map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1897 DEFVAR_LISP ("minibuffer-local-completion-map", &Vminibuffer_local_completion_map,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1898 "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
1899 Vminibuffer_local_completion_map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1900
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1901 DEFVAR_LISP ("minibuffer-local-must-match-map", &Vminibuffer_local_must_match_map,
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1902 "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
1903 Vminibuffer_local_must_match_map = Fmake_sparse_keymap (Qnil);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1904
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1905 current_global_map = global_map;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1906
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1907 DEFVAR_LISP ("minor-mode-map-alist", &Vminor_mode_map_alist,
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1908 "Alist of keymaps to use for minor modes.\n\
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1909 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
1910 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
1911 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
1912 in the list takes precedence.");
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1913 Vminor_mode_map_alist = Qnil;
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1914
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1915 DEFVAR_LISP ("function-key-map", &Vfunction_key_map,
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1916 "Keymap mapping ASCII function key sequences onto their preferred forms.\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1917 This allows Emacs to recognize function keys sent from ASCII\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1918 terminals at any point in a key sequence.\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1919 \n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1920 The read-key-sequence function replaces subsequences bound by\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1921 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
1922 keymaps have no binding for the current key sequence but\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1923 function-key-map binds a suffix of the sequence to a vector,\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1924 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
1925 continues with the new sequence.\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1926 \n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1927 For example, suppose function-key-map binds `ESC O P' to [pf1].\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1928 Typing `ESC O P' to read-key-sequence would return [pf1]. Typing\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1929 `C-x ESC O P' would return [?\C-x pf1]. If [pf1] were a prefix\n\
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1930 key, typing `ESC O P x' would return [pf1 x].");
1095
6578f07e9eb8 (Fmake_sparse_keymap, Fmake_keymap): New optional arg. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 647
diff changeset
1931 Vfunction_key_map = Fmake_sparse_keymap (Qnil);
517
2f2206ac3dba *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1932
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1933 Qsingle_key_description = intern ("single-key-description");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1934 staticpro (&Qsingle_key_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1935
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1936 Qkey_description = intern ("key-description");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1937 staticpro (&Qkey_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1938
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1939 Qkeymapp = intern ("keymapp");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1940 staticpro (&Qkeymapp);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1941
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1942 defsubr (&Skeymapp);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1943 defsubr (&Smake_keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1944 defsubr (&Smake_sparse_keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1945 defsubr (&Scopy_keymap);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1946 defsubr (&Skey_binding);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1947 defsubr (&Slocal_key_binding);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1948 defsubr (&Sglobal_key_binding);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1949 defsubr (&Sminor_mode_key_binding);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1950 defsubr (&Sglobal_set_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1951 defsubr (&Slocal_set_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1952 defsubr (&Sdefine_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1953 defsubr (&Slookup_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1954 defsubr (&Sglobal_unset_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1955 defsubr (&Slocal_unset_key);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1956 defsubr (&Sdefine_prefix_command);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1957 defsubr (&Suse_global_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1958 defsubr (&Suse_local_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1959 defsubr (&Scurrent_local_map);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1960 defsubr (&Scurrent_global_map);
465
36359663b6d8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1961 defsubr (&Scurrent_minor_mode_maps);
250
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1962 defsubr (&Saccessible_keymaps);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1963 defsubr (&Skey_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1964 defsubr (&Sdescribe_vector);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1965 defsubr (&Ssingle_key_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1966 defsubr (&Stext_char_description);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1967 defsubr (&Swhere_is_internal);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1968 defsubr (&Swhere_is);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1969 defsubr (&Sdescribe_bindings);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1970 defsubr (&Sapropos_internal);
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1971 }
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1972
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1973 keys_of_keymap ()
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1974 {
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1975 Lisp_Object tem;
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1976
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1977 initial_define_key (global_map, 033, "ESC-prefix");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1978 initial_define_key (global_map, Ctl('X'), "Control-X-prefix");
7e94ea5958e0 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1979 }