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