
如何使用鍵盤快捷鍵從主要選擇(例如滑鼠選擇的文字)進行貼上?Shift+Insert
從 PRIMARY 或 CLIPBOARD 貼上不一致,具體取決於應用程式。
背景:
Ctrl+C
將所選文字複製到剪貼簿,同時將滑鼠選擇複製到主文字。從 CLIPBOARD 貼上Ctrl+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
答案1
您提到的所有應用程式都是gtk+
應用程序,因此很容易回答為什麼……因為在全部 gtk+
應用 (除了一個), Shift+Insert從剪貼簿貼上 - 即它相當於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 作業系統1 .
這唯一的例外是gnome-terminal
。經過長時間的爭論,開發人員決定(為了與其他終端保持一致),gnome-terminal
+Shift應該Insert從 PRIMARY 粘貼,Ctrl++Shift應該V從 CLIPBOARD 粘貼(儘管您可以選擇自定義一些快捷方式)。
至於如何您是否使用鍵盤快捷鍵貼上選擇...沒有簡單的方法。
最簡單的方法是為運行的腳本分配快捷方式xdotool click 2
(模擬單擊滑鼠中鍵)。雖然這有效(而且它應該適用於所有或大多數 DE 和工具包),但只有當滑鼠遊標實際上位於文字輸入框上方時它才有效,否則它將失敗。
另一種相對簡單的方法是透過 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
2gtk+
個應用程式)中設定配置選項。我個人沒有嘗試過,但回饋是正面的。
理想情況下,您可以修補來源檔案並定義一個"paste-selection"
訊號,然後將Shift+綁定Insert到"paste-selection"
而不是"paste-clipboard"
.安迪的程式碼(附在上面連結的錯誤報告中)可以作為如何做到這一點的指南。即使如此,它也只會影響gtk+
應用程式(我不是一個KDE/Qt
人,所以我不知道如何改變Qt
應用程式的行為)。
1:(更不用說IBM的CUA了)
答案2
抱歉:由於聲譽問題,我無法寫評論,所以我寫為答案。這不是直接的解決方案,但它幫助我...
您可以使用資訊組合:
自動啟動 autocutsel,並使用預設選項將 CLIPBOARD 同步到 CUTBUFFER(這是可選的)。此連結僅提供有關問題的資訊。
使用clipman gui存取多個緩衝區(主和剪貼簿),沒有自動同步選擇(雙向自動同步會出錯)。
因此,我只需選擇 gtk 主題,並將主題 CSS 修改為複製剪貼簿 (Ctrl+Insert) 和貼上剪貼簿 (Shift+Insert) 訊號所需的鍵綁定。