0

目前,我将 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?

4

1 回答 1

2

我认为您正在寻找的行为已经存在。看看cua-rectangle-mark-mode。从手册

CUA 模式通过可见的矩形突出显示提供增强的矩形支持。用于C-RET开始一个矩形,使用移动命令扩展它,并使用C-x或剪切或复制它C-cRET将光标移动到矩形的下一个(顺时针)角,以便您可以轻松地向任何方向扩展它。您键入的普通文本将插入到矩形中每一行的左侧或右侧(与光标在同一侧)。

cua-rectangle-mark-mode您可以通过调用该命令来使用此矩形支撑,而无需激活 CUA 。但也见标准 rectangle-mark-mode。请参阅矩形

于 2015-12-30T19:09:46.293 回答