emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

emacs-29 bb3e0ded9eb 1/2: Don't add a key binding when REMOVE is non-nil


From: Robert Pluim
Subject: emacs-29 bb3e0ded9eb 1/2: Don't add a key binding when REMOVE is non-nil
Date: Fri, 17 Mar 2023 09:18:52 -0400 (EDT)

branch: emacs-29
commit bb3e0ded9eba71596b34806b302d63977259c3dd
Author: Robert Pluim <rpluim@gmail.com>
Commit: Robert Pluim <rpluim@gmail.com>

    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)
---
 src/keymap.c | 31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/src/keymap.c b/src/keymap.c
index 23453eaa9a6..efac410d317 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -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;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]