emacsの外部をコピーするときに、システムのクリップボードをプッシュして、リングのコンテンツをリアルタイムで削除する方法は?


8

Emacsの外にあるものをコピーすると、Emacsにヤンクしない限り、そのものがリングを強制終了するようには見えないことに気づきました。2回コピーすると、ヤンクで取得できるのは最後のコピーだけです。

コピーを実行したら、システムクリップボードからコピーをプッシュしてリングを強制終了したい場合があります。その後、キルリングで必要なものを選択してEmacsに貼り付けることができます。では、コピーをキルリングに何度もプッシュできるようにするにはどうすればよいですか?

私はWindows 7を使用しています。

回答:


5

TL; DR:clipmonMELPAで使用可能なを使用して、をオンにすることができますclipmon-mode

注:以下の詳細はXサーバーに適用されますが、パッケージはどのプラットフォームでも機能するはずです。

クリップボードはどのように機能しますか? クリップボードは非同期プロセスとして実装されます。アプリケーションからコピーすると、「クリップボードの所有者」になりますが、実際にはコピーされたデータはどこにも置かれません。アプリケーションに貼り付けると、現在の「クリップボード所有者」にデータを要求します。

リファレンス:http : //www.jwz.org/doc/x-cut-and-paste.html

クリップボードのコンテンツを取得する方法 私が理解しているように、クリップボードに新しいデータがあるかどうかを確認する「信頼できる」方法は、Xサーバーを定期的にポーリングして、そこにあるものを確認することです。emacsの場合、パッケージclipmon(https://github.com/bburns/clipmon)がそれを行います。デフォルトでは2秒ごと。

READMEからの抜粋:

また、システムクリップボードに変更をキルリングに追加し、Emacsをテキスト用のクリップボードマネージャーにします。その後、browse-kill-ringやhelm-ringなどのパッケージを使用して、クリップボードの履歴を表示および管理できます。

(実際にはこのパッケージを試していませんが、確かに解決策のように見えます。)


3

コピーでフックを実行する方法がない限り、コピーしたテキストをコピー直後にキルリングに表示できるかどうかはわかりません。これは明らかにオペレーティングシステム/環境に依存しますが、設定を試すことをお勧めします

(setq save-interprogram-paste-before-kill t)

これは、emacs内からコピーされたときに、オペレーティングシステムからコピーされたテキストを少なくとも保持します。


からC-h v save-interprogram-paste-before-kill

クリップボードの文字列を置き換える前にキルリングに保存します。

Emacsに貼り付けるために別のプログラムで何かを選択したが、実際に貼り付ける前にEmacsで何かを殺した場合、この変数が非nilでない限り、この選択は失われます。この場合、他のプログラムの選択はkill-ring Emacsのkillの前に保存されます。また、を使用して貼り付けることもできC-y M-yます。


はい、この変数はあなたが言ったことを正確に行うことができます。しかし、私はそれを求めているだけではありません。コピーしたら、キルリングがEmacsの外でコピーを保存できるようにしたいと思っています。
Leu_Grady

2

最後に、の概念を参照する不器用な解決策を見つけましたclipmon。しかし、1行のコードで非常に簡単です。

(run-at-time 0 3 (lambda () (interactive) (current-kill 0)))

キルリングは、3秒ごとにシステムクリップボードと同期されます。もちろん、間隔をさらに小さな値に変更できます。

PS:この機能が必要なのは、外部にコピーしたものの引数を使用して呼び出すことができるコマンドを定義したいためです。

@kaushalmodiと@YoungFrogからの回答に感謝します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.