目前,我将 cua-mode 用于其列/矩形设施,如下所示(我不使用它进行复制/粘贴):
M-x cua-mode ; Enable cua-mode
<C-return> ; Call cua-set-rectangle-mark
然后当我完成我的矩形时:
C-g ; Call cua-cancel
CUA 模式的绑定与其他模式绑定(例如在 org 模式中)发生冲突,因此我有时发现自己不得不打开/关闭 cua 模式。我只将它用于它的矩形 - 所以我想通过做两件事来解决这个麻烦:
1)将一个键(比如 f6)绑定到一个启用 cua 模式的函数(如果它尚未启用)并调用 cua-set-rectangle-mark 以便我可以创建我的矩形。
2) 在 cua-mode 处于活动状态时覆盖 Cg,这样当按下时它不仅会退出任何矩形,而且还会退出 cua-mode。
那么我的工作流程将是:
<f6> ; Enter cua-mode and call cua-set-rectangle-mark
C-g ; Call cua-cancel and disable cua-mode
这样我就不需要在发生冲突时不断地打开/关闭 cua 模式。
对于第 1 部分,我想出了:
(defun cua-activate-plus-set-rectangle-mark()
(interactive)
(cua-set-rectangle-mark))
(global-set-key (kbd "<f6>") 'cua-activate-plus-set-rectangle-mark)
当 cua-mode 已启用时按 f6 有效,但在未启用 cua-mode 时无效。如果我把它改成这样:
(defun cua-activate-plus-set-rectangle-mark()
(interactive)
(cua-mode)
(cua-set-rectangle-mark))
那么无论我是否开始启用 cua 模式,它都不起作用。
对于第 2 部分,我有:
(defun cua-mode-off()
"Cancels any open active region/rectangle and turns CUA mode off"
(interactive)
(cua-cancel)
(setq cua-mode nil))
该功能完全符合我的要求,但我不知道如何在启用 cua-mode 时将其绑定到 Cg。
所以我的问题:
1)如何编写函数以进入 cua-mode 并调用 cua-set-rectangle-mark 使其按预期工作?
2) 如何仅在 cua-mode 处于活动状态以调用我的自定义函数时覆盖 Cg?