Emacs在瞬态标记模式处于活动状态时的正常行为是,当您进行换档选择时,如果下一个命令是非换档运动,则会取消激活该标记。例如,在命令M-l
(用下面的功能标记当前行)和之后C-f
,该标记被禁用。之后如何模仿elisp的行为(set-mark-command nil)
?
例如:
(defun my-mark-current-line ()
(interactive)
(beginning-of-line)
(set-mark-command nil)
(end-of-line)
(forward-char))
(global-set-key (kbd "M-l") 'my-mark-current-line)
现在做M1 Cf,区域将增长,但是,我希望使用默认行为,即在Cf时停用区域,并随CSf一起增长。
编辑:应该使用与set-mark-command不同的功能来允许此操作吗?我找不到。
同样,您所做的包装和绑定也
—
Kaushal Modi
C-f
将应用于您使用的所有其他导航命令。
C-f
之后的btw M-l
不会扩展该区域,因为的末尾没有活动区域M-l
(downcase-word
默认情况下绑定到该区域)。
@KaushalModi我认为
—
nispio
M-l
OP 所引用的不是默认绑定(downcase-word
),而是my-mark-current-line
确实是@nispio。
—
mikl
C-S-f
类似于C-SPC
(激活区域)+C-f
(导航)。您可以通过绑定C-f
到包装器函数来获得所需的信息,该包装器函数首先将激活的区域取消激活,然后继续执行C-f
(forward-char
);并C-S-f
直接绑定到forward-char
。请注意,如果你使用emacs的终端模式,C-f
并C-S-f
都将表现为C-f
作为终端无法区分这两个。