aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2024-01-12 18:05:14 -0500
committerStefan Monnier2024-01-20 15:03:05 -0500
commiteb779ae64677e643d2d78cfc2b016088e8d7ff98 (patch)
tree1f42790f8434a4b77c2c1e8c10b3f9e549728af7
parenta764b503e126a60ff4ea1266da924de7b020637e (diff)
downloademacs-eb779ae64677e643d2d78cfc2b016088e8d7ff98.tar.gz
emacs-eb779ae64677e643d2d78cfc2b016088e8d7ff98.zip
* lisp/keymap.el (define-keymap): Demote "duplicate def" to a warning
* test/src/keymap-tests.el (keymap-test-duplicate-definitions): Adjust accordingly.
-rw-r--r--lisp/keymap.el12
-rw-r--r--test/src/keymap-tests.el17
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'.
577 (let ((def (pop definitions))) 577 (let ((def (pop definitions)))
578 (if (eq key :menu) 578 (if (eq key :menu)
579 (easy-menu-define nil keymap "" def) 579 (easy-menu-define nil keymap "" def)
580 (if (member key seen-keys) 580 (when (member key seen-keys)
581 (error "Duplicate definition for key: %S %s" key keymap) 581 ;; Since the keys can be computed dynamically, it can
582 (push key seen-keys)) 582 ;; very well happen that we get duplicate definitions
583 ;; due to some unfortunate configuration rather than
584 ;; due to an actual bug. While such duplicates are
585 ;; not desirable, they shouldn't prevent the users
586 ;; from getting their job done.
587 (message "Duplicate definition for key: %S %s" key keymap))
588 (push key seen-keys)
583 (keymap-set keymap key def))))) 589 (keymap-set keymap key def)))))
584 keymap))) 590 keymap)))
585 591
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 @@
23;;; Code: 23;;; Code:
24 24
25(require 'ert) 25(require 'ert)
26(require 'cl-lib)
26 27
27(defun keymap-tests--make-keymap-test (fun) 28(defun keymap-tests--make-keymap-test (fun)
28 (should (eq (car (funcall fun)) 'keymap)) 29 (should (eq (car (funcall fun)) 'keymap))
@@ -470,10 +471,18 @@ g .. h foo
470 ert-keymap-duplicate 471 ert-keymap-duplicate
471 "a" #'next-line 472 "a" #'next-line
472 "a" #'previous-line)) 473 "a" #'previous-line))
473 (should-error 474 (let ((msg ""))
474 (define-keymap 475 ;; FIXME: It would be nicer to use `current-message' rather than override
475 "a" #'next-line 476 ;; `message', but `current-message' returns always nil in batch mode :-(
476 "a" #'previous-line))) 477 (cl-letf (((symbol-function 'message)
478 (lambda (fmt &rest args) (setq msg (apply #'format fmt args)))))
479 (should
480 (string-match "duplicate"
481 (progn
482 (define-keymap
483 "a" #'next-line
484 "a" #'previous-line)
485 msg))))))
477 486
478(ert-deftest keymap-unset-test-remove-and-inheritance () 487(ert-deftest keymap-unset-test-remove-and-inheritance ()
479 "Check various behaviors of keymap-unset. (Bug#62207)" 488 "Check various behaviors of keymap-unset. (Bug#62207)"