目前我使用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?
答案 0 :(得分:2)
我认为您正在寻找的行为已经存在。看看cua-rectangle-mark-mode
。来自the manual:
CUA模式提供增强的矩形支持和可见矩形 高亮。使用
C-RET
启动一个矩形,使用它扩展它 移动命令,并使用C-x
或C-c
剪切或复制它。RET
移动了 光标到矩形的下一个(顺时针)角,所以你可以 轻松地向任何方向扩展它。您输入的普通文本将被插入 矩形中每条线的左侧或右侧(与...相同 光标)。您可以使用此矩形支持,而无需通过调用激活CUA
cua-rectangle-mark-mode
命令。但也参见标准rectangle-mark-mode
。请参阅Rectangles。