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

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

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

背景:

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

ターミナル エミュレータ (gnome-terminal) で、 CLIPBOARD から で貼り付けますCtrl+Shift+V。 (PRIMARY からmouse-middle-clickstill で貼り付けます。)

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

私はxmonadとFirefox 34.0を搭載したUbuntu 14.04を実行しています

答え1

あなたが挙げたアプリはすべてgtk+アプリなので、答えるのは簡単ですなぜ...なぜなら全て gtk+アプリ(1つを除いて)、Shift+ はクリップボードから貼り付けます。つまり、 +Insertと同じです。ショートカットはCtrlVgtkentry.c(2022年ライン)とgtktextview.c(行番号1819):

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

これは、GTK+ 3 リファレンスマニュアルGtkEntry:

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との一貫性を保つために行われたものです(KDEQtキーバインディングを参照)。QTextEdit Class) と Windows OS 1
唯一の例外ですgnome-terminal。長い議論の末、開発者は (他の端末との一貫性を保つため)、 では、gnome-terminal+ShiftInsertPRIMARY から貼り付け、Ctrl+ Shift+ はVCLIPBOARD から貼り付ける (一部のショートカットをカスタマイズするオプションもあります) ことに決定しました。


に関してどうやってキーボードショートカットを使用して選択範囲を貼り付けますか...簡単な方法はありません。

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

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

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

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


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

答え2

申し訳ありませんが、評判のせいでコメントを書くことができないので、回答として書きます。直接的な解決策ではありませんが、役に立ちます...

以下の情報を組み合わせて使用​​できます:

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

  2. テーマの CSS で GTK 3.0 キーバインディングを作成する例

  3. GTK キーバインディングをオーバーライドしてバインドを解除する例

  4. gnome-terminalのキーバインドを変更する例

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

  6. Clipman を使用して複数のバッファに GUI アクセスする(PRIMARY と CLIPBOARD)、自動同期の選択なし (双方向の自動同期は間違いを引き起こします)。

そこで、gtk テーマを選択し、テーマ CSS を、コピー クリップボード (Ctrl+Insert) および貼り付け クリップボード (Shift+Insert) 信号に必要なキーバインディングに変更します。

関連情報