Как я могу удалить привязку клавиш, чтобы привязка клавиш 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.

Другие вопросы по тегам