Emacs:从自定义函数中调用cua-mode cua-set-rectangle-mark

时间:2015-12-30 02:56:30

标签: emacs cua-mode cua

目前我使用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模式处于活动状态时覆盖C-g,这样当按下它时不仅会退出任何矩形,而且还会退出cua模式。

那么我的工作流程将是:

<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模式,则按f6可工作但未启用cua模式时不按f6。如果我改变它是这样的:

(defun cua-activate-plus-set-rectangle-mark()
 (interactive)
 (cua-mode)
 (cua-set-rectangle-mark))

然后,无论我是否启用了cua-mode,它都无法正常工作。

对于第2部分,我有:

(defun cua-mode-off()
 "Cancels any open active region/rectangle and turns CUA mode off"
 (interactive)
 (cua-cancel)
 (setq cua-mode nil))

该函数正是我想要的,但我不知道在启用cua模式时如何将它绑定到C-g。

所以我的问题:

1)如何编写输入cua-mode的函数并调用cua-set-rectangle-mark以使其按预期工作?

2)如何在cua-mode激活时调用自定义函数来覆盖C-g?

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找的行为已经存在。看看cua-rectangle-mark-mode。来自the manual

  

CUA模式提供增强的矩形支持和可见矩形   高亮。使用C-RET启动一个矩形,使用它扩展它   移动命令,并使用C-xC-c剪切或复制它。 RET移动了   光标到矩形的下一个(顺时针)角,所以你可以   轻松地向任何方向扩展它。您输入的普通文本将被插入   矩形中每条线的左侧或右侧(与...相同   光标)。

     

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