Linux
同步 CLIPBOARD -> PRIMARY 選擇的輕量級方法是什麼?
我的案例是我希望每當我將某些內容複製到剪貼板時,它也保存在 PRIMARY 中。大多數情況下,假設要複製某些內容,您需要選擇它,因此大多數情況下不需要這樣做。
但是,有時我只是點擊經典的“複製到剪貼板”按鈕,然後將某些內容髮送到 CLIPBOARD,但它不在 PRIMARY 中。我經常使用
Shift
+Insert
進行粘貼,並且必須跟踪我正在使用的選擇讓我感到困惑。我知道有類似
clipit
或parcellite
可以做類似事情的工具,但我不想要沒有 GUI 的東西,比如systemd
我可以啟動並忘記的簡單服務。我嘗試使用配置的
systemd
服務autocutsel
ExecStartPre=autocutsel -f ExecStart=autocutsel -f --selection PRIMARY
然而,這也會同步 PRIMARY -> CLIPBOARD,這會破壞一些非常常見的工作流程,例如選擇文本然後將其替換為剪貼板的內容。
我在 的聯機幫助頁中查找了此選項
autocutsel
,但我發現它有點令人困惑,有很多提及cutbuffer
(我認為不再使用)和我不使用的 Windows。所以我什至不知道這是否可能與autocutsel
.
這是一個使用 GTK 的 PyGObject 綁定的快速 Python 程序。我不是這方面的專家,所以這只是一個對我有用的例子,在舊的 Fedora 版本上使用 rpm pygobject2。您必須自己找到等效的軟體包。
#!/usr/bin/python3 # copy clipboard to primary every time it changes # https://unix.stackexchange.com/a/660344/119298 import signal, gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk, Gdk # callback with args (Gtk.Clipboard, Gdk.EventOwnerChange) def onchange(cb, event): text = clipboard.wait_for_text() # convert contents to text in utf8 primary.set_text(text, -1) # -1 to auto set length signal.signal(signal.SIGINT, signal.SIG_DFL) # allow ^C to kill primary = Gtk.Clipboard.get(Gdk.SELECTION_PRIMARY) clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) clipboard.connect('owner-change', onchange) # ask for events Gtk.main() # loop forever