キーボードを使用して(クリップボードの内容ではなく)X選択を貼り付ける


84

キーボードを使用してXの選択を貼り付けたいのですが。現在、これを行うにはマウスの中央ボタンを使用する必要があります。

マウスの中央ボタンを押すことは非常に簡単ですが、このような解決策では、マウスポインターをテキストキャレットの位置に移動する必要があります。

これを行うためのより良い方法はありますか?


回答:


93

一部のデフォルトのLinuxセットアップでは、Shift+ Insertが実行されますX-selection-paste。既に述べたように、これはX-clipboard-pasteコマンドとは明らかに異なります。コマンドのバインドはアプリケーションによって異なります。それでもうまくいかない場合は、他にもいくつか試してみてください。

  • Ctrl+V

  • Ctrl+ Shift+V

  • Ctrl+ Shift+Insert

立ち入り禁止?デスクトップ環境またはウィンドウマネージャーはおそらく構成されておらず、1つのDEまたはWMのバナーの下であっても、各ツールキット(GTK、Qtなど)が異なるデフォルトバインディングを持っている可能性があるため、複雑です。一部のプログラム(たとえばgvim)は、実行するグ​​ラフィカル環境と必ずしも同期しない独自の内部コピーレジスタさえ持っています。さらに、プログラムがX-クリップボードシステムを使用する場合でも、Xには複数のシステムがあります。最も基本的な2つは、選択バッファー(常に最後に選択されたものが含まれている場合は常にあります)と、通常は特にコピーする必要があるコピーバッファーです。後者のシステムに明示的なコピーを行うには、サイズについてこれらのいずれかを試すことができます。

  • Ctrl+C

  • Shift+ Ctrl+C

  • Ctrl+Insert


どれもあなたのために魔法のように機能していない場合、あなたが行くことができる2つの方法があります。

  1. そのためのアプリがあります!™さまざまなクリップボードマネージャープログラムのいずれかを使用して、これを処理します。最も人気のあるものはParcelliteGlippyのようですが、他の選択肢はこちらで確認できます高度なクリップボードマネージャーに関するこの質問も参照してください。

  2. 自分でハックします。

それでは、ハックしたいとしましょう。

独自のコードを記述してX apiを利用する以外に、このジョブのハッカーツールは、Xの心をつかむためのウィンドウを提供する小さなコマンドラインユーティリティです。 。

最初のツールはxselです。この小さな求職者は、いつでもXの選択バッファーにあるものを吐き出します。

次に、それをプログラムに取り込む必要があります。これには2つのオプションがあります。1つはxdotool、Xorg入力システムへのイベント送信を模倣することです。カーソルで「foo_bar」と入力するのを模倣するようなtypeメソッドを使用できxdotool type foo_barます。組み合わせると、次のようなものが得られます。

$ xdotool type $(xsel)

もう1つはxvkbd、下位のサブシステムからキーボードイベントを送信するものです。STDINでキーストロークをパイプで送ることができます。と組み合わせるとxsel、次のようになります。

$ xsel | xvkbd -xsendevent -file -

すばらしいです。次に、このキーバインディングでこの機能を実行します。Gnome-2を実行する場合は、[システム]-> [設定]-> [キーボードショートカット]でカスタムショートカットを追加できます。別のDEまたはWMを使用する場合、このexcersizeは読者に任されています。

最後の注意点は、コマンドをキーボードショートカットにバインドする場合、上記のようにパイプで接続された2つのコマンドではなく、1つのコマンドのみが必要になることが多いということです。パイプコマンドを、次のような新しいシェルのコマンド文字列argumetnとして呼び出すことで、これを実現できます。

sh -c 'xsel | xvkbd -xsendevent -file -'
sh -c 'xdotool type "$(xsel)"'

1
間違いなく「より良い」とみなされます。ありがとう!
直観

どのアプリケーションで?私が頻繁に使用するアプリケーションは、このように動作しません。
ジル

私はUbuntuを使用Shift-Insertしていますが、実際に使用したいのですが、それは(Ubuntuでは)単にそうではありません..私が見つけた唯一の「一貫性(+/-)」はX- GTKアプリでの選択は、Shiftキーを押しながらに挿入できますがgnome-terminal、これらの同じアプリの他のクロスペーストの組み合わせでは非常にミスアンドミスです...私が使用するいくつかのKDEアプリ(Konsoleを含む)は、単にクロスペースト....そして、GTKアプリでもセンタークリックは機能するかもしれませんが、Shift + Insertは機能しないかもしれません(同じアプリの場合)...だから私はマウスを使用します:(
Peter.O

「Xレベルのバインディング」などはありません。使用するアプリケーションが実行するもの、またはウィンドウマネージャーやデスクトップ環境が実行するものです。ディストリビューションに固有のものではないかと思います。
ジル

1
簡単な方法は、キーボードショートカットをミドルクリックイベントの送信にバインドすることです。私にとっては、そうですxdotool click 2
誘導

10

どうやらShift+ Insert少なくともFreeBSD上で、GTK 3の一部のインストールで正常に動作しない場合があります。この問題は次のように説明されています。

Shift-Insertはプライマリ選択を貼り付けません。代わりに、クリップボード(Control-Vが既に使用されている)を貼り付けるようにバインドされています。したがって、プライマリ選択を挿入するキーボードのみの方法はありません。マウスをそこにドラッグし、中クリックする必要があります。これにより、端末とGTK間の相互作用が不快になります。

最近の(この記事を書いている時点で)バグレポートとパッチが利用可能です。

http://www.freebsd.org/cgi/query-pr.cgi?pr=188264


8
xdotool click 2

これは、マウスボタンのクリックを直接シミュレートし、xsel/ を使用する必要はありませんxdotool type ...


1
これには、マウスを適切に配置する必要があるため、実際にマウスボタンを使用することもできます。マウスをカーソルにスナップする何らかの方法があれば、これは答えの一部かもしれません(あるとは思いませんが)
jberryman

2

私はUbuntu 12を使用していますが、gedit(およびその他のアプリ)でxtermからテキストを貼り付ける際に問題が発生していました。また、私は多くの人々のように中マウスボタンのないラップトップを使用します(真中ボタンのないLinuxユーザーにはクリップボードの慈悲はありません。右クリック+左クリックは代替として機能していません)。

「xsel | xvkbd -xsendevent -file-」メソッドはかなりクールだと思いますが。最も簡単な解決策は、「xterminal」の代わりにプリインストールされた「gnome-terminal」を実行することでした。「gnome-terminal」は、クリップボードへの右クリックコマンドをサポートしています。次に、「編集メニュー->貼り付け」をgeditに入力するか、shift-insertを使用します。「gnome-terminal」にはUbuntu 12がプリインストールされています。他のdebian / gnomeインストールでは、次の方法でインストールできます。

sudo apt-get install gnome-terminal

Ubuntuでは、ランチャーバーの上部にある[ダッシュホーム]ボタンをクリックして、左側のランチャーに追加します。結果の検索ボックスに、「terminal」と入力します。「ターミナル」アイコンをランチャーバーにドラッグできます。


2
これは非常に貧弱なソリューションです。別の端末、特に100MB以上のgnome-shellを依存関係として取り込む端末に切り替えるように人々に提案することはできません。これはまた、他のアプリケーションでは動作せない、そしてこのすべての最悪はまだ動作するように、マウスを使用する必要があります。
pfrenssen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.