[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)"
- master updated (3add626f140 -> 54d3de64e19), Stefan Monnier, 2024/01/20
- master 54d3de64e19 6/6: Merge branch 'mwheel-no-alts', Stefan Monnier, 2024/01/20
- master 18294854c71 4/6: mwheel.el: Remove `mouse-wheel-*-alternate-event` vars, Stefan Monnier, 2024/01/20
- master db8890b3c96 3/6: mwheel.el: Unconditionally use the `wheel-up/down/...` events, Stefan Monnier, 2024/01/20
- master eb779ae6467 1/6: * lisp/keymap.el (define-keymap): Demote "duplicate def" to a warning,
Stefan Monnier <=
- master 998667f9026 5/6: mwheel.el: Code clean to reduce duplication, Stefan Monnier, 2024/01/20
- master 82f71e106af 2/6: * lisp/completion-preview.el: Fix use in non-GUI session, Stefan Monnier, 2024/01/20