為什麼 Shift+Insert 在某些應用程序中從 CLIPBOARD 粘貼,而在其他應用程序中從 PRIMARY 粘貼?
如何使用鍵盤快捷鍵從 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-terminal
,Shift
+Insert
應該從 PRIMARY 粘貼,Ctrl
++應該從Shift
CLIPBOARDV
粘貼(儘管您可以選擇自定義一些快捷方式)。至於如何使用鍵盤快捷鍵粘貼選擇…沒有簡單的方法。
最簡單的方法是為執行的腳本分配一個快捷方式
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.0
為gtk+
2 個應用程序)中設置配置選項。我沒有親自嘗試過,但回饋是積極的。理想情況下,您將修補源文件並定義一個
"paste-selection"
信號,然後將Shift
+綁定Insert
到"paste-selection"
而不是"paste-clipboard"
. Andy 的程式碼(附在上面連結的錯誤報告中)可以作為如何做到這一點的指南。即使那樣,它也只會影響gtk+
應用程序(我不是一個KDE/Qt
人,所以我不知道如何改變Qt
應用程序的行為)。1:(更不用說IBM的CUA了)