Как я могу удалить привязку клавиш, чтобы привязка клавиш cua Cx, чтобы я мог иметь исходные эффекты Cx?
Находясь в режиме cua, я хочу C-xдействовать так, как если бы режим cua не был активен.
(define-key cua--prefix-repeat-keymap (kbd "C-x") nil)
успешно изменяет значение на nil, но cua по-прежнему странным образом влияет на работу C-x.
Я хотел бы полностью удалить привязку клавиш, потому что в этом случае установка значения nil не приводит к игнорированию привязки.
Для любопытных ... Я предпочитаю, deleteчтобы удаленные диапазоны попадали в стек восстановления (как это сделал C-xбы cua ). Я добился этого с помощью следующего:
(bind-keys ([delete] . (lambda ()
"Kill active region to the yank stack.
Otherwise, perform normal delete.
Use backspace for an emacs range delete into register 0."
(interactive)
(if (use-region-p)
(delete-active-region t) ;; yank selection into stack
(delete-char 1))))) ;; forget singly removed characters
2 ответа
Через обмен стеками. Как реализовать remove-key, чтобы полностью отменить действие define-key , я извлек elisp, который успешно удаляет привязку ключа.
(defun remove-key (keymap key)
(define-key keymap key nil)
(setq key (cl-mapcan (lambda (k)
(if (and (integerp k)
(/= (logand k ?\M-\^@) 0))
(list ?\e (- k ?\M-\^@))
(list k)))
key))
(if (= (length key) 1)
(delete key keymap)
(let* ((prefix (vconcat (butlast key)))
(submap (lookup-key keymap prefix)))
(delete (last key) submap)
(when (= (length submap) 1)
(remove-key keymap prefix)))))
С использованием
remove-key
, вся реакция cua на C-x:
(remove-key cua--prefix-repeat-keymap (kbd "C-x"))
Вы заботитесь вообще о C-c, C-vи C-z?
Если нет, то вы просто хотите использовать
cua-selection-mode
вместо
cua-mode
.