emacs-diffs
[Top][All Lists]
Advanced

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

master eb779ae6467 1/6: * lisp/keymap.el (define-keymap): Demote "duplic


From: Stefan Monnier
Subject: master eb779ae6467 1/6: * lisp/keymap.el (define-keymap): Demote "duplicate def" to a warning
Date: Sat, 20 Jan 2024 15:18:24 -0500 (EST)

branch: master
commit eb779ae64677e643d2d78cfc2b016088e8d7ff98
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    * lisp/keymap.el (define-keymap): Demote "duplicate def" to a warning
    
    * test/src/keymap-tests.el (keymap-test-duplicate-definitions):
    Adjust accordingly.
---
 lisp/keymap.el           | 12 +++++++++---
 test/src/keymap-tests.el | 17 +++++++++++++----
 2 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/lisp/keymap.el b/lisp/keymap.el
index 065c59da74c..d2544e30ce0 100644
--- a/lisp/keymap.el
+++ b/lisp/keymap.el
@@ -577,9 +577,15 @@ should be a MENU form as accepted by `easy-menu-define'.
           (let ((def (pop definitions)))
             (if (eq key :menu)
                 (easy-menu-define nil keymap "" def)
-              (if (member key seen-keys)
-                  (error "Duplicate definition for key: %S %s" key keymap)
-                (push key seen-keys))
+              (when (member key seen-keys)
+                ;; Since the keys can be computed dynamically, it can
+                ;; very well happen that we get duplicate definitions
+                ;; due to some unfortunate configuration rather than
+                ;; due to an actual bug.  While such duplicates are
+                ;; not desirable, they shouldn't prevent the users
+                ;; from getting their job done.
+                (message "Duplicate definition for key: %S %s" key keymap))
+              (push key seen-keys)
               (keymap-set keymap key def)))))
       keymap)))
 
diff --git a/test/src/keymap-tests.el b/test/src/keymap-tests.el
index bc9977f31bf..04b897045db 100644
--- a/test/src/keymap-tests.el
+++ b/test/src/keymap-tests.el
@@ -23,6 +23,7 @@
 ;;; Code:
 
 (require 'ert)
+(require 'cl-lib)
 
 (defun keymap-tests--make-keymap-test (fun)
   (should (eq (car (funcall fun)) 'keymap))
@@ -470,10 +471,18 @@ g .. h            foo
        ert-keymap-duplicate
        "a" #'next-line
        "a" #'previous-line))
-  (should-error
-   (define-keymap
-       "a" #'next-line
-       "a" #'previous-line)))
+  (let ((msg ""))
+    ;; FIXME: It would be nicer to use `current-message' rather than override
+    ;; `message', but `current-message' returns always nil in batch mode :-(
+    (cl-letf (((symbol-function 'message)
+               (lambda (fmt &rest args) (setq msg (apply #'format fmt args)))))
+      (should
+       (string-match "duplicate"
+                     (progn
+                       (define-keymap
+                         "a" #'next-line
+                         "a" #'previous-line)
+                       msg))))))
 
 (ert-deftest keymap-unset-test-remove-and-inheritance ()
   "Check various behaviors of keymap-unset.  (Bug#62207)"



reply via email to

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