web-dev-qa-db-ja.com

一部のアプリケーションではCLIPBOARDから、他のアプリケーションではPRIMARYからShift + Insertを貼り付けるのはなぜですか?

キーボードショートカットを使用して、プライマリ選択(マウスで選択したテキストなど)から貼り付けるにはどうすればよいですか? Shift+Insertは、アプリケーションに応じて、一貫してPRIMARYまたはCLIPBOARDから貼り付けられます。

バックグラウンド:

Ctrl+Cは、選択されたテキストをCLIPBOARDにコピーし、マウス選択はPRIMARYにコピーします。 CLIPBOARDからCtrl+Vで貼り付け、PRIMARYからmouse-middle-clickで貼り付けます。

端末エミュレーター(gnome-terminal)で、CLIPBOARDからCtrl+Shift+Vを使用して貼り付けます。 (まだmouse-middle-clickを付けてPRIMARYから貼り付けます。)

キーボードショートカットを使用して、PRIMARYから貼り付けたい。 gnome-terminalではShift+Insertですが、geditとFirefoxではShift+InsertはCLIPBOARDから貼り付けます。 CLIPBOARDから一貫して貼り付けるショートカットと、PRIMARYから一貫して貼り付ける別のショートカットが必要です。

XmonadとFirefox 34.0でUbuntu 14.04を実行しています

30
reasgt

あなたが言及したすべてのアプリはgtk+アプリなので、簡単に答えられます理由...allgtk+ apps(except one)、 Shift+Insert CLIPBOARDからの貼り付け-つまり、 Ctrl+V。ショートカットは gtkentry.c (2022行目)および gtktextview.c (1506行目)にハードコードされています。

gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_SHIFT_MASK,
                "paste-clipboard", 0);

GtkEntry の下のGTK + 3リファレンスマニュアルにも記載されています。

The “paste-clipboard” signal
void
user_function (GtkEntry *entry,
               gpointer  user_data)
The ::paste-clipboard signal is a keybinding signal which gets emitted
to paste the contents of the clipboard into the text view.
The default bindings for this signal are Ctrl-v and Shift-Insert.

私の知る限り、これは他のDE(_ QTextEdit ClassKDEQtキーバインディングを参照)およびWindows OSとの整合性のために行われました。1
唯一の例外gnome-terminalです。長い議論の末、開発者は(他の端末との一貫性のために)gnome-terminalで、 Shift+Insert PRIMARYから貼り付け、 Ctrl+Shift+V CLIPBOARDから貼り付ける必要があります(一部のショートカットをカスタマイズするオプションがあります)。


についてキーボードショートカットで選択範囲を貼り付けますか?簡単な方法はありません。

最も簡単な方法は、xdotool click 2を実行するスクリプトにショートカットを割り当てることです(中央マウスボタンのクリックをシミュレートします)。これは機能しますが(すべてまたはほとんどのDEとツールキットで機能するはずです)、マウスカーソルが実際にテキスト入力ボックス上にある場合にのみ機能し、それ以外の場合は機能しません。

もう1つの比較的簡単な方法は、Gnome Accessibilityを使用する方法です(システムで利用できる場合)。テンキーの存在も必要です。 Universal Access >> Pointing & Clickingに移動して、Mouse Keysを有効にします。 NumLockがオフになっていることを確認してください。次に、テンキーを使用してカーソルを移動し、クリックします。中マウスボタンのクリックをシミュレートするには、押して(離して) * (アスタリスク)次に押す 5 (ここに短い ガイド があります)。このソリューションは常にgtk+環境で機能するようです。欠点は、Gnome Accessibilityとテンキーが必要になることです。また、ショートカットをカスタマイズすることはできません。

興味深い解決策が gnome-bugzilla(バグ643391) に提案されました。 (2018年更新:問題は移動しました ここ 。)~/.config/gtk-3.0/gtk.css(または~/.gtkrc-2.0 for gtk+ 2個のアプリで、いくつかのソースファイルにパッチを適用して構成オプションを設定する必要があります。 )。私は個人的には試していませんが、フィードバックはポジティブです。

理想的には、ソースファイルにパッチを適用し、"paste-selection"信号を定義してからバインドします Shift+Insert"paste-selection"ではなく"paste-clipboard"に変更します。 Andyのコード(上記のリンクされたバグレポートに添付されています)は、それを行う方法のガイドとして役立ちます。それでも、それはgtk+アプリにのみ影響します(私はKDE/Qtの人ではないので、Qtアプリの動作を変更する方法がわかりません)。


1:(IBMのCUAは言うまでもありません)

31
don_crissti

申し訳ありませんが、評判でコメントが書けないので、回答として書いております。それは直接的な解決策ではありませんが、私を助けます...

次の情報を組み合わせて使用​​できます。

  1. gtkテーマを編集し、必要に応じてキーバインディングを許可します

  2. テーマのcssでgtk 3.0キーバインドを作成する例

  3. gtkキーバインドとバインド解除のオーバーライドの例

  4. gnome-terminalの変更キーバインディングの例

  5. CLIPBOARDをCUTBUFFERに同期するためのデフォルトオプションを使用したオートカットセルの自動開始 (これはオプションです)。このリンクは問題に関する情報のみを目的としています。

  6. clipmanを使用して、複数のバッファーにアクセスするためにguiを使用 (PRIMARYおよびCLIPBOARD)、自動同期の選択なし(双方向の自動同期は誤り)。

ですから、gtkテーマを選択し、テーマCSSをコピークリップボード(Ctrl + Insert)信号とペーストクリップボード(Shift + Insert)信号に必要なキーバインディングに変更します。

1
user1742529