web-dev-qa-db-ja.com

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

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

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

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

86
intuited

一部のデフォルトの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のマインドへのウィンドウを提供する2、3の小さなコマンドラインユーティリティです。 。

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

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

$ xdotool type $(xsel)

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

$ xsel | xvkbd -xsendevent -file -

すごい。ここで、キーバインドでこれを実行します。 Gnome-2を実行している場合は、システム->設定->キーボードショートカットでカスタムショートカットを追加できます。別のDEまたはWMを使用する場合、このexcersizeはリーダーに任されます。

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

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

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

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

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

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

10
Michael Danilov
xdotool click 2

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

7
blueyed

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

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

Sudo apt-get install gnome-terminal

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

2
Ryan Woodard