16

これは、私が数回遭遇したシナリオです。

他のプログラムからテキストをコピーします。Emacs に移動し、テキストを貼り付ける/ヤンクする前にいくつかの編集を行いました。Cy をヤンクしてほら、貼り付けるつもりだったテキストではありません。その後、移動中に kill- などのコマンドを使用したことに気付きました。行と後方キル単語、およびそれらの削除された行と単語が現在キルリングを占めていました。ただし、「My」と入力してもコピーした元のテキストは返されないため、元のプログラムに戻ってテキストを再度コピーする必要があります。さらに最悪の場合、元のプログラムが閉じられていると、コピーしたテキストが完全に失われます。

キルラインなどは基本的なコマンド (削除キーを押すようなもの) であり、それらのコマンドを使用することでキルリングが少し乱雑になることは気にしませんが、元のテキストはどこかに残っていると思います。 My を数回入力して、最終的に見つけることができるようにします。クリップボードの内容をオーバーライドする前に、Emacs が現在のクリップボードの内容をキルリングに自動的に保持するようにするにはどうすればよいですか?

4

5 に答える 5

12

このコードは、Emacs で kill を実行するたびに、(Emacs の外部からの) 選択を自動的に kill リングに配置する必要があります。Linux でテストされていますが、Linux に限定されるべきではありません。

(defadvice kill-new (before kill-new-push-xselection-on-kill-ring activate)
  "Before putting new kill onto the kill-ring, add the clipboard/external selection to the kill ring"
  (let ((have-paste (and interprogram-paste-function
                         (funcall interprogram-paste-function))))
    (when have-paste (push have-paste kill-ring))))

これを頻繁に行う場合は、 browse-kill-ringパッケージを調べると便利な場合があります。これにより、( を繰り返し入力するのではなくM-y) キル リングの見栄えがよくなります。

于 2009-05-11T20:32:05.893 に答える
3

最新の Emacs CVS バージョンには変数 save-interprogram-paste-before-kill があることに注意してください。これはまさにこれを行う cf: etc/NEWSファイルから:

**save-interprogram-paste-before-kill' is non-nil, emacs will not clobber the the interprogram paste when something is killed in it by saving the former in the後者の前に kill-ring したとき。

于 2009-09-10T07:48:17.757 に答える
0

別のWindowsアプリでコピーまたはカットを行った後にemacsにポップしたときに、テキストをヤンクしてから再度殺すことで、これを回避します。

より良いアプローチは、emacs をハックして、何かを kill したときに、既存のクリップボードを kill リングの一番上のエントリと比較し、異なる場合は、明示的に要求した kill を実行する前に、クリップボードの内容を kill リングにプッシュすることです。 .

于 2009-05-11T18:11:30.130 に答える