1

C-xcua モードの間、cuaモードがアクティブでないかのように動作したい。C-ccuaとC-vが好きC-zです。しかし、私は eMac での の使用に慣れてきたので、選択の有無にかかわらず、そのままの状態を維持しC-xたいと考えています。C-x

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

C-xは正常に値を nil に変更しますが、 cuaが何かを行う場合でも、の機能に奇妙な影響を与えます。

この場合、値を nil に設定してもバインディングが無視されないため、キーバインディングを完全に削除する方法が必要です。

好奇心のために...私はdelete、削除された範囲をヤンクスタックに入れることを好みます(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

スタック交換を介して 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 に答える