1 /* Functions to manipulate keymaps. 2 Copyright (C) 2001-2023 Free Software Foundation, Inc. 3 4 This file is part of GNU Emacs. 5 6 GNU Emacs is free software: you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or (at 9 your option) any later version. 10 11 GNU Emacs is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ 18 19 #ifndef KEYMAP_H 20 #define KEYMAP_H 21 22 #include "lisp.h" 23 24 /* The maximum byte size consumed by push_key_description. 25 All callers should assure that at least this size of memory is 26 allocated at the place pointed by the second argument. 27 28 There are 6 modifiers, each consumes 2 chars. 29 The octal form of a character code consumes 30 (1 + CHARACTERBITS / 3 + 1) chars (including backslash at the head). 31 We need one more byte for string terminator `\0'. */ 32 #define KEY_DESCRIPTION_SIZE ((2 * 6) + 1 + (CHARACTERBITS / 3) + 1 + 1) 33 34 #define KEYMAPP(m) (!NILP (get_keymap (m, false, false))) 35 extern Lisp_Object current_global_map; 36 extern char *push_key_description (EMACS_INT, char *); 37 extern Lisp_Object access_keymap (Lisp_Object, Lisp_Object, bool, bool, bool); 38 extern Lisp_Object get_keymap (Lisp_Object, bool, bool); 39 extern ptrdiff_t current_minor_maps (Lisp_Object **, Lisp_Object **); 40 extern void initial_define_lispy_key (Lisp_Object, const char *, const char *); 41 extern void syms_of_keymap (void); 42 43 typedef void (*map_keymap_function_t) 44 (Lisp_Object key, Lisp_Object val, Lisp_Object args, void *data); 45 extern void map_keymap (Lisp_Object, map_keymap_function_t, Lisp_Object, 46 void *, bool); 47 extern void map_keymap_canonical (Lisp_Object map, 48 map_keymap_function_t fun, 49 Lisp_Object args, void *data); 50 51 #endif