xcape 允許您在按下並釋放時將修改鍵用作另一個鍵。請注意,它比按原始鍵稍慢,因為直到釋放鍵後才會發生按下的事件。預設行為是在按下並自行釋放 Left Control 時產生 Escape 鍵。 (如果你不明白為什麼有人會想要這個,我猜 Vim 不是你最喜歡的文字編輯器;)
首先安裝開發依賴項。在基於 Debian 的系統(包括 Ubuntu 和 Linux Mint)上,運行:
$ sudo apt-get install git gcc make pkg-config libx11-dev libxtst-dev libxi-dev
在基於 Fedora 的系統上,運行:
$ sudo dnf install git gcc make pkgconfig libX11-devel libXtst-devel libXi-devel
然後運行:
$ git clone https://github.com/alols/xcape.git
$ cd xcape
$ make
$ sudo make install
$ xcape [-d] [-f] [-t <timeout ms>] [-e <map-expression>]
-d
調試模式。不分岔到後台。列印調試資訊。
-f
前台模式。不分岔到後台。
-t <timeout ms>
如果按住按鍵的時間超過此逾時,xcape 將不會產生按鍵事件。預設值為 500 毫秒。
-e <map-expression>
此表達式的語法為'ModKey=Key[|OtherKey][;NextExpression]'
鍵名稱清單可在頭檔X11/keysymdef.h
中找到(刪除XK_
前綴)。請注意,由於 X11 的限制,移位鍵必須指定為移位鍵後接要按下的鍵,而不是字元的實際名稱。例如,要產生“{”,可以使用表達式'ModKey=Shift_L|bracketleft'
(假設您有一個“[”上方帶有“{”的鍵)。
您也可以以十進位(前綴#
)、八進位( #0
)或十六進位( #0x
)指定鍵。除非找不到相應的鍵名稱,否則它們將被解釋為鍵代碼。
這將使 Left Shift 在按下並自行釋放時產生 Escape,而 Left Control 在按下並自行釋放時產生 Ctrl-O 組合。
xcape -e 'Shift_L=Escape;Control_L=Control_L|O'
與 xmodmap 結合使用,可以使普通鍵充當額外的修飾符。首先使用 xmodmap 將鍵映射到修飾符,然後使用 xcape 將修飾符映射回鍵。然而,這有幾個限制:該鍵在釋放之前不會像平常一樣工作,特別是,如果您鍵入太快,它可能會無意中充當修飾符。這不是 xcape 的 bug,而是以這種方式一起使用這兩個工具的不可避免的結果。例如,我們可以使用下列命令序列使空白鍵在按住時充當附加 ctrl 鍵(類似於 Space2ctrl)。
# Map an unused modifier's keysym to the spacebar's keycode and make it a
# control modifier. It needs to be an existing key so that emacs won't
# spazz out when you press it. Hyper_L is a good candidate.
spare_modifier="Hyper_L"
xmodmap -e "keycode 65 = $spare_modifier"
xmodmap -e "remove mod4 = $spare_modifier" # hyper_l is mod4 by default
xmodmap -e "add Control = $spare_modifier"
# Map space to an unused keycode (to keep it around for xcape to
# use).
xmodmap -e "keycode any = space"
# Finally use xcape to cause the space bar to generate a space when tapped.
xcape -e "$spare_modifier=space"
如果您習慣將鍵碼重新對應到鍵符號(例如,使用 xmodmap),則可能會遇到兩個問題。
每次修改從鍵碼到鍵符號的映射(例如,使用 xmodmap)後,您都需要重新啟動 xcape,否則 xcape 仍將使用舊的映射。
您要傳送的密鑰必須具有已定義的密鑰代碼。例如,使用預設映射Control_L=Escape
,您仍然需要在 xmodmap 映射中定義轉義鍵。 (我透過使用 255 來解決這個問題,但我的鍵盤無法發送它)。
在 https://github.com/alols/xcape 上找到最新版本
可以透過 gmail dot com 的 albin dot olsson 聯繫作者