emacs,如何复制区域并使其突出显示?

emacs,如何复制区域并使其突出显示?

我对默认的 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-markt以便完成停用之后。为了防止这种情况发生,请重置deactivate-marknil 停用。

(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))

相关内容