Linux 版 Punto Switcher 的新類似物:xswitcher

在過去的六個月裡,xneur 支持的終止給我帶來了一些痛苦。 (隨著 OpenSUSE 15.1 在我的桌面上的出現:啟用 xneur 後,Windows 失去焦點並隨著鍵盤輸入及時閃爍).

「哦,該死,我又開始輸入錯誤的佈局」——在我的工作中,這種不雅的情況經常發生。 而且它沒有增加任何積極的東西。

Linux 版 Punto Switcher 的新類似物:xswitcher
同時,我(身為設計工程師)可以非常清楚地表達我想要的東西。 但我想要(先從 Punto Switcher,然後,感謝 Windows Vista,最後從 xneur 切換到 Linux)一件事。 意識到螢幕上的垃圾佈局錯誤(這通常發生在輸入新單字結束時),請踩「暫停/中斷」。 並取得您列印的內容。

目前,該產品具有最佳的(從我的角度來看)功能/複雜性比。 是時候分享了。

TL.DR

稍後會有各種技術細節,所以首先 - 連結“觸摸” 對於不耐煩的人。

目前以下行為是硬編碼的:

  • 「暫停/中斷」:退格最後一個單字,切換活動視窗中的佈局(0 和 1 之間)並再次撥號。
  • 「左Ctrl鍵不做任何事」:切換活動視窗中的佈局(0和1之間)。
  • 「左移無任何內容」:開啟活動視窗中的 0 號佈局。
  • 「Right Shift without everything」:開啟活動視窗中的 1 號佈局。

從現在開始,我計劃自訂該行為。 沒有回饋,就沒意思了(反正我對此很滿意)。 我相信在《哈布雷》上會有足夠比例的觀眾遇到類似的問題。

注: 因為在目前版本中,鍵盤記錄器附加到“/dev/input/”,xswitcher 必須以 root 權限啟動:

chown root:root xswitcher
chmod +xs xswitcher

請注意: 具有suid的文件的擁有者必須是root,因為無論誰是所有者,啟動時都會變成suid。

偏執狂(我也不例外)可以克隆 GIT 並現場組裝。 像那樣:

go get "github.com/micmonay/keybd_event"
go get "github.com/gvalkov/golang-evdev"

### X11 headers for OpenSUSE/deb-based
zypper install libX11-devel libXmu-devel
apt-get install libx11-dev libxmu-dev

cd "x switcher/src/"
go build -o xswitcher -ldflags "-s -w" --tags static_all src/*.go

新增自動啟動功能(取決於 DE)。

它有效,「不求粥」(約每天 30 秒 CPU,約 12 MB RSS)。

詳情

現在-細節。

整個儲存庫最初專用於我的寵物項目,我懶得啟動另一個項目。 因此,所有內容都堆積起來(僅在文件夾中)並由 AGPL(“反向專利”)覆蓋。

xswitcher 程式碼是用 golang 寫的,包含最少的 C。我們假設這個方法將導致最少的工作量(到目前為止)。 同時保持使用 cgo 連結缺失內容的能力。

文字包含對其借用地點和原因的評論。 因為xneur 代碼“沒有激勵我”,我把它作為起點 洛洛切換者.

使用「/dev/input/」既有優點(一切都可見,包括按下的自動重複鍵)也有缺點。 缺點是:

  • 自動重複(代碼為「2」的事件)與 x 的重複無關。
  • 透過 X11 介面的輸入是不可見的(例如,這就是 VNC 的工作原理)。
  • 需要root。

另一方面,可以透過「XSelectExtensionEvent()」訂閱X事件。 你可以看一下 x輸入代碼。 我在 go 中沒有找到這樣的東西,粗略的實作立即花了一百行 C 程式碼。 暫時把它放在一邊。

目前,「反向」輸出是透過擰緊虛擬鍵盤來實現的。 感謝keybd_event的作者,但是那裡的抽象太高級了,需要進一步重做。 例如,我使用右 Win 鍵選擇第三行。 並且只有左邊的Win被傳回來。

已知錯誤

  • 我們對「複合」輸入一無所知(例如:XNUMX/XNUMX)。 現在不需要。
  • 我們錯誤地玩了正確的Win。 就我而言,它打破了重點。
  • 沒有明確的輸入解析。 相反,有幾個函數:Compare()、CtrlSequence()、RepeatSequence()、SpaceSequence()。 謝謝 NSMCAN 為了您的關心:在程式碼和此處更正它。 有一定的機率,你可以在替換的時候發現bug。
    目前我不知道“如何”,歡迎任何建議。
  • (天啊) 競爭性地使用通道(keyboardEvents、miceEvents)。

結論

程式碼是最簡單的程式。 還有像我這樣的傻子。 因此,我自以為是,希望幾乎所有技術人員都能夠完成他想要的事情。 正因為如此,該產品不會像大多數只是為了好玩的產品一樣,在沒有支援的情況下消失。

祝你好運!

來源: www.habr.com

添加評論