1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-22 07:09:54 +00:00

Don't add a key binding when REMOVE is non-nil

* src/keymap.c (store_in_keymap): Don't add a nil keybinding if we've
been asked to remove a non-existent binding.  (Bug#62207)
This commit is contained in:
Robert Pluim 2023-03-17 09:50:38 +01:00
parent a4a9ffdd80
commit bb3e0ded9e

View File

@ -887,22 +887,23 @@ store_in_keymap (Lisp_Object keymap, register Lisp_Object idx,
keymap_end:
/* We have scanned the entire keymap, and not found a binding for
IDX. Let's add one. */
{
Lisp_Object elt;
if (!remove)
{
Lisp_Object elt;
if (CONSP (idx) && CHARACTERP (XCAR (idx)))
{
/* IDX specifies a range of characters, and not all of them
were handled yet, which means this keymap doesn't have a
char-table. So, we insert a char-table now. */
elt = Fmake_char_table (Qkeymap, Qnil);
Fset_char_table_range (elt, idx, NILP (def) ? Qt : def);
}
else
elt = Fcons (idx, def);
CHECK_IMPURE (insertion_point, XCONS (insertion_point));
XSETCDR (insertion_point, Fcons (elt, XCDR (insertion_point)));
}
if (CONSP (idx) && CHARACTERP (XCAR (idx)))
{
/* IDX specifies a range of characters, and not all of them
were handled yet, which means this keymap doesn't have a
char-table. So, we insert a char-table now. */
elt = Fmake_char_table (Qkeymap, Qnil);
Fset_char_table_range (elt, idx, NILP (def) ? Qt : def);
}
else
elt = Fcons (idx, def);
CHECK_IMPURE (insertion_point, XCONS (insertion_point));
XSETCDR (insertion_point, Fcons (elt, XCDR (insertion_point)));
}
}
return def;