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

Pet*_*r.O 9 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)
Run Code Online (Sandbox Code Playgroud)

使用:Ubuntu 10.04.3 中的 GNU Emacs 23.1.1

小智 8

运行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)
Run Code Online (Sandbox Code Playgroud)