emacs、地域をコピーして強調表示する方法は?

emacs、地域をコピーして強調表示する方法は?

(kill-ring-save)コマンドを実行すると、その領域の強調表示が消えるため、デフォルトのMwに満足しています。私はその動作を変更したくありませんが、<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)

おすすめ記事