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 联系作者