8

私は次の観察を行いました:

$ xclip text.txt

text.txt実行は即座に終了し、 のコンテンツをデフォルトの選択にコピーします。XA_PRIMARYつまり、マウスの中ボタンまたは で貼り付けることができますxclip -o

xclip が何をしているかを見たいとき、もう終了しません:

$ xclip -verbose text.txt
Connected to X server.
Using UTF8_STRING.
Reading text.txt...
Waiting for selection requests, Control-C to quit
  Waiting for selection request number 1

X11システムで何かを選択するまで終了しません。たとえば、ここに貼り付けたこの出力です。動作が に制限されている場合、これは理解できverboseます。結局のところ、あなたは座って何が起こるかを見たいのです.

で同じ動作を再現できstraceますが、 fork オプションが提供されている場合のみです

$ strace -f xclip text.txt

または、出力を返す必要があるシステム実行コマンドを使用してRubyからシェルアウトする場合、実際には何もありません.

$ ruby -e "`xclip text.txt`"

与えられたヒントstraceは、イベントを待つためにファイル記述子をポーリングしていることです。このイベントは、何かを選択すると満たされます。この動作は説明可能ですか? これはどのシステムでも再現できないという証拠を得ました。これはチケット#9 に関連している可能性があります stdin からクリップボードを設定するときに stdout を閉じませんか?

xclipUbuntu 13.04 でバージョン 0.12 を実行しています。

4

1 に答える 1

8

なしで起動すると、XClip は子をフォークし-verboseます。との唯一の違い-verboseは、フォークされた子がなく、同じ元のプロセスがConvertSelectionイベントを処理することです。

通常、X Window ツールキットでは、コピー/貼り付けはX Selectionsを介して実装されます。

セレクションは、atom によって名前が付けられ、特定のクライアントによって所有されるグローバル サーバー リソースです。選択の数はプロトコルによって制限されません。アトムと同じ数の選択が存在する可能性があります。セレクションは、クライアント間の通信メカニズムを構築するための基礎を提供するように設計されています。正式な定義は、X プロトコルの用語集にあります。

「...動的タイプの間接プロパティ。つまり、プロパティをサーバーに保存するのではなく、一部のクライアント (「所有者」) によって維持されます。選択は本質的にグローバルであり、次のように考えられます。特定のウィンドウのサブ階層または特定のクライアントのセットにプライベートであるというよりも、(クライアントによって維持されますが) ユーザーに属します。」

アプリケーションの観点から見ると、セレクションは X クライアント間で情報を送信するためのメカニズムを提供します。X はネットワーク プロトコルであるため、さまざまなクライアント間のデータ伝送用に別のチャネルが存在するとは想定できません。選択は、アプリケーションのユーザー インターフェイスの側面に直接関連するデータ転送のみを目的としていますが、このポリシーは適用されません。

選択内容はアプリケーション自体に保存され、ConvertSelection イベントで要求されます (クライアントが選択したデータの特定の MIME タイプ (または「ビュー」、またはフォーマット) を要求する方法があるため、ここでは「変換」します。変換は、再び、選択したバッファを所有するアプリケーション。

このアーキテクチャのため、「テキストをシステム バッファにコピーして終了する」方法はありません。システム バッファであるためです。XClip は、フォークとデーモン化によって「コピーと終了」をシミュレートします。

于 2013-10-08T23:27:05.247 に答える