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


9

我对默认的Mw感到满意,因为默认的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

Answers:


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)

0

该区域将突出显示,因为该标记是“活动的”-因此明确激活该标记就可以了。注意:我不太确定为什么交换点/标记不起作用。这是一个更新的函数,我也更新了它以使用交互方式来填充参数。

(defun kill-ring-save-keep-highlight (beg end)
  "Keep the region active after the kill"
  (interactive "r")
  (kill-ring-save beg end)
  (activate-mark))

感谢您提供有关交互式args和的指针activate-mark,但仍然无法正常工作。我什至安装了Ubuntu 11.04的全新VM,唯一的代码.emacs就是该功能,但它仍然不能激活标记,但是C-x C-xC-insert恢复突出显示之后立即手动应用...
Peter.O

@fred您是否在没有您的.emacs的Emacs中尝试了它?即运行emacs -q代码并检查其是否有效。
Trey Jackson

我没有任何东西已经运行(unsuccesfully)除了在这一个功能~/.emacs,并没有任何东西~/.emacs.d/,并且如前所述,也以全新的品牌新VM的Emacs的安装....现在我已经试过这条命令,但它也不起作用:/usr/bin/emacs --no-init-file --no-site-file --eval '(defun kill-ring-save-keep-highlight (beg end) (interactive "r") (kill-ring-save beg end) (activate-mark))'...该功能对您有用吗?
Peter.O 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.