1

在 cua 模式下,我想C-x表现得好像 cua 模式没有激活一样。我喜欢cuaC-c和. 但是,我逐渐习惯了 eMac 对.C-vC-zC-xC-x

(define-key cua--prefix-repeat-keymap (kbd "C-x") nil)

成功地将值修改为 nil,但 cua 仍然会奇怪地影响 的功能C-x,如果它有任何作用的话。

我想要一种完全删除键绑定的方法,因为在这种情况下,将值设置为 nil 不会导致绑定被忽略。

对于好奇的...我更喜欢delete使删除的范围进入 yank 堆栈(就像 cuaC-x一样)。我通过以下方式实现了这一点:

(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
4

2 回答 2

1

通过 stack exchange如何实现 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"))
于 2021-05-11T23:26:55.510 回答
0

你关心C-c,C-vC-z吗?

如果没有,那么您只想使用cua-selection-mode而不是cua-mode.

于 2021-05-12T00:12:22.003 回答