Comment désactiver le remappage par un package
Sep 15 2020
J'ai récemment utilisé un package qui a remplacé C-x C-sautre chose que save, ce qui m'a fait perdre beaucoup de travail. Existe-t-il un moyen de conseiller à emacs de vérifier une liste noire de raccourcis clavier qu'il ne devrait pas autoriser à être remappés?
Edit: Le package en question est (sinon excellent) atomic-chrome, et cela semble être la ligne offensante :
(defvar atomic-chrome-edit-mode-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "C-x C-s") 'atomic-chrome-send-buffer-text)
(define-key map (kbd "C-c C-c") 'atomic-chrome-close-current-buffer)
map)
"Keymap for minor mode `atomic-chrome-edit-mode'.")
Réponses
1 kfoley Sep 29 2020 at 23:39
Une solution pourrait être de conseiller la define-keyfonction et de vérifier quelle clé est liée à une liste de blocage:
(defvar define-key-block-list
'("C-x C-s"))
(defun define-key-filter (define-key &rest args)
(if (cl-member (nth 1 args) define-key-block-list :key 'kbd :test 'equal)
(message "Blocked %s from being bound" (key-description (nth 1 args)))
(apply define-key args)))
(advice-add 'define-key :around #'define-key-filter)
(global-set-key (kbd "C-x C-s") (lambda () (interactive) (message "test")))
;; Blocked C-x C-s from being bound