X11

為什麼 Shift+Insert 在某些應用程序中從 CLIPBOARD 粘貼,而在其他應用程序中從 PRIMARY 粘貼?

  • August 17, 2021

如何使用鍵盤快捷鍵從 PRIMARY 選擇(例如滑鼠選擇的文本)粘貼?Shift+Insert從 PRIMARY 或 CLIPBOARD 粘貼不一致,具體取決於應用程序。

背景:

Ctrl+C將選定文本複製到剪貼板,而滑鼠選擇複製到 PRIMARY。從 CLIPBOARDCtrl+V粘貼,從 PRIMARY 粘貼mouse-middle-click

在終端仿真器(gnome-terminal)中,從 CLIPBOARD 粘貼Ctrl+Shift+V. (從 PRIMARY 粘貼mouse-middle-click仍然。)

我想用鍵盤快捷鍵從 PRIMARY 粘貼。在 gnome-terminal 中,這是Shift+Insert,但在 gedit 和 Firefox 中,Shift+Insert從 CLIPBOARD 粘貼。我想要一個始終從 CLIPBOARD 粘貼的快捷方式和一個始終從 PRIMARY 粘貼的不同快捷方式。

我正在執行帶有 xmonad 和 Firefox 34.0 的 Ubuntu 14.04

您提到的所有應用程序都是gtk+應用程序,因此很容易回答為什麼…因為在所有 gtk+應用程序中(除了一個),Shift+Insert來自 CLIPBOARD 的粘貼 - 即它等同於Ctrl+ V。快捷方式在gtkentry.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(請參閱KDE中的Qt鍵綁定QTextEdit Class)和 Windows OS 1保持一致。

唯一的例外gnome-terminal。經過長時間的辯論,開發人員決定(為了與其他終端保持一致),在 中gnome-terminalShift+Insert應該從 PRIMARY 粘貼,Ctrl++應該從ShiftCLIPBOARDV粘貼(儘管您可以選擇自定義一些快捷方式)。


至於如何使用鍵盤快捷鍵粘貼選擇…沒有簡單的方法。

最簡單的方法是為執行的腳本分配一個快捷方式xdotool click 2(模擬點擊滑鼠中鍵)。雖然這有效(並且它應該適用於所有或大多數 DE 和工具包),但它僅在滑鼠游標實際上位於文本輸入框上方時才有效,否則它會失敗。

另一種相對簡單的方法是通過 Gnome Accessibility,如果它在您的系統上可用。它還需要存在小鍵盤。轉到Universal Access>>Pointing & Clicking並啟用Mouse Keys. 確保NumLock關閉。然後,您可以使用小鍵盤鍵移動游標並點擊。要模擬滑鼠中鍵點擊,請按下(然後鬆開)*(星號),然後按下5(這裡有一個簡短指南)。這個解決方案似乎總是在一個gtk+環境中工作。缺點是它需要Gnome Accessibility一個小鍵盤。此外,您無法自定義快捷方式。

在gnome-bugzilla (bug 643391)上提出了一個有趣的解決方案。(2018 年更新:問題現已移至此處。)它需要修補一些源文件並在~/.config/gtk-3.0/gtk.css(或~/.gtkrc-2.0gtk+2 個應用程序)中設置配置選項。我沒有親自嘗試過,但回饋是積極的。

理想情況下,您將修補源文件並定義一個"paste-selection"信號,然後將Shift+綁定Insert"paste-selection"而不是"paste-clipboard". Andy 的程式碼(附在上面連結的錯誤報告中)可以作為如何做到這一點的指南。即使那樣,它也只會影響gtk+應用程序(我不是一個KDE/Qt人,所以我不知道如何改變Qt應用程序的行為)。


1:(更不用說IBM的CUA了)

引用自:https://unix.stackexchange.com/questions/178070