emacs、リージョンをコピーして、強調表示したままにする方法は?


9

(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

回答:


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

インタラクティブな引数とへのポインタをありがとうございますactivate-markが、それでも機能しません。私.emacsはこの機能である唯一のコードでUbuntu 11.04の白紙のVMをインストールしましたが、それでもマークはアクティブになりませんが、C-x C-x直後に手動で適用C-insertすると強調表示が元に戻ります...
Peter.O

@fredは、.emacsなしでEmacsで試したことがありますか?つまりemacs -q、コードで実行し、機能するかどうかを確認します。
トレイジャクソン

私は、この1つの機能以外は何もせずに(失敗して)実行し~/.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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.