我对默认的 Mw 很满意,因为(kill-ring-save)
它在运行命令时失去了该区域的突出显示。我不想改变它的行为,但我确实想重新绑定<C-insert>
以执行类似的操作并保持该区域的突出显示。
我尝试过transient-mark-mode
直接通过函数进行(取消)设置,但该区域仍然失去突出显示。
仅(kill-ring-save (region-beginning) (region-end))
在交互式函数中运行按预期工作,即。它失去了突出显示。
仅(exchange-point-and-mark) (exchange-point-and-mark)
在交互式函数中运行按预期工作,即。它重新突出显示该区域并将点放置/保留在其原始/正确的位置。
然而,当我将它们全部放在一个函数中时,它确实不是重新突出显示该区域。这是不起作用的函数和绑定:
(defun kill-ring-save-keep-highlight ()
(interactive)
(kill-ring-save (region-beginning) (region-end))
(exchange-point-and-mark) (exchange-point-and-mark)
)
(global-unset-key (kbd "<C-insert>"))
(global-set-key (kbd "<C-insert>") 'kill-ring-save-keep-highlight)
使用:Ubuntu 10.04.3 中的 GNU Emacs 23.1.1
答案1
运行kill-ring-save
不会直接停用标记,而只是将变量设置deactivate-mark
为t
以便完成停用之后。为了防止这种情况发生,请重置deactivate-mark
为nil
前停用。
(defun kill-ring-save-keep-highlight (beg end)
"Keep the region active after the kill"
(interactive "r")
(prog1 (kill-ring-save beg end)
(setq deactivate-mark nil)))
(global-set-key (kbd "<C-insert>") 'kill-ring-save-keep-highlight)
答案2
该区域被突出显示,因为该标记是“活动的” - 因此明确激活该标记就可以了。注意:我不太清楚为什么交换点/标记不起作用。这是一个更新的函数,我还更新了它以使用交互式来填充参数。
(defun kill-ring-save-keep-highlight (beg end)
"Keep the region active after the kill"
(interactive "r")
(kill-ring-save beg end)
(activate-mark))