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