Emacs:从自定义函数中调用 cua-mode cua-set-rectangle-mark
Emacs: Calling cua-mode cua-set-rectangle-mark from within custom function
目前我将 cua-mode 用于它的 column/rectangle 设施,就像这样(我没有将它用于 copy/pasting):
M-x cua-mode ; Enable cua-mode
<C-return> ; Call cua-set-rectangle-mark
然后当我完成我的矩形时:
C-g ; Call cua-cancel
CUA 模式的绑定与其他模式的绑定(例如在 org 模式中)发生冲突,因此我有时发现自己不得不转换 cua 模式 on/off。我只将它用于它的矩形 - 所以我想通过做两件事来解决这个麻烦:
1) 将一个键(例如 f6)绑定到启用 cua 模式(如果尚未启用)的函数,并调用 cua-set-rectangle-mark 以便我可以创建我的矩形。
2) 在 cua-mode 处于活动状态时覆盖 C-g,以便在按下时不仅退出任何矩形,而且还会退出 cua-mode。
那么我的工作流程将是:
<f6> ; Enter cua-mode and call cua-set-rectangle-mark
C-g ; Call cua-cancel and disable cua-mode
这样我就不需要在发生冲突时不断切换 cua-mode on/off。
对于第 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 未启用时按 f6 无效。如果我把它改成这样:
(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 时将它绑定到 C-g。
所以我的问题是:
1) 如何编写进入 cua-mode 的函数并调用 cua-set-rectangle-mark 使其按预期工作?
2) 如何仅在 cua-mode 激活时覆盖 C-g 以调用我的自定义函数?
我认为您正在寻找的行为已经存在。看看cua-rectangle-mark-mode
。来自 the manual:
CUA mode provides enhanced rectangle support with visible rectangle
highlighting. Use C-RET
to start a rectangle, extend it using the
movement commands, and cut or copy it using C-x
or C-c
. RET
moves the
cursor to the next (clockwise) corner of the rectangle, so you can
easily expand it in any direction. Normal text you type is inserted to
the left or right of each line in the rectangle (on the same side as
the cursor).
You can use this rectangle support without activating CUA by calling
the cua-rectangle-mark-mode
command. But see also the standard
rectangle-mark-mode
. See Rectangles.
目前我将 cua-mode 用于它的 column/rectangle 设施,就像这样(我没有将它用于 copy/pasting):
M-x cua-mode ; Enable cua-mode
<C-return> ; Call cua-set-rectangle-mark
然后当我完成我的矩形时:
C-g ; Call cua-cancel
CUA 模式的绑定与其他模式的绑定(例如在 org 模式中)发生冲突,因此我有时发现自己不得不转换 cua 模式 on/off。我只将它用于它的矩形 - 所以我想通过做两件事来解决这个麻烦:
1) 将一个键(例如 f6)绑定到启用 cua 模式(如果尚未启用)的函数,并调用 cua-set-rectangle-mark 以便我可以创建我的矩形。
2) 在 cua-mode 处于活动状态时覆盖 C-g,以便在按下时不仅退出任何矩形,而且还会退出 cua-mode。
那么我的工作流程将是:
<f6> ; Enter cua-mode and call cua-set-rectangle-mark
C-g ; Call cua-cancel and disable cua-mode
这样我就不需要在发生冲突时不断切换 cua-mode on/off。
对于第 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 未启用时按 f6 无效。如果我把它改成这样:
(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 时将它绑定到 C-g。
所以我的问题是:
1) 如何编写进入 cua-mode 的函数并调用 cua-set-rectangle-mark 使其按预期工作?
2) 如何仅在 cua-mode 激活时覆盖 C-g 以调用我的自定义函数?
我认为您正在寻找的行为已经存在。看看cua-rectangle-mark-mode
。来自 the manual:
CUA mode provides enhanced rectangle support with visible rectangle highlighting. Use
C-RET
to start a rectangle, extend it using the movement commands, and cut or copy it usingC-x
orC-c
.RET
moves the cursor to the next (clockwise) corner of the rectangle, so you can easily expand it in any direction. Normal text you type is inserted to the left or right of each line in the rectangle (on the same side as the cursor).You can use this rectangle support without activating CUA by calling the
cua-rectangle-mark-mode
command. But see also the standardrectangle-mark-mode
. See Rectangles.