是否可以将(全局)按键绑定到某个命令并且仍然不会中断按键完成?我的意思是,如果我尝试在此处其他地方发布的 bindkey 解决方案:
# In file: ~/.xbindkeysrc
# Bind key 'q' to running 'some_command'
"some_command"
q
Run Code Online (Sandbox Code Playgroud)
然后按键'q'永远不会完成,因为它会做:即,永远不会在终端上打印字符'q',例如。
利用xdotool
发送“Q”按键是这样的:
# In file: ~/.xbindkeysrc
# Bind key 'q' to running 'some_command'
"some_command && xdotool key q"
q
Run Code Online (Sandbox Code Playgroud)
导致循环,因为执行的“q”键xdotool
将通过绑定执行另一个“some_command”。
更清楚一点,我希望按键“q”像往常一样执行,另外还执行一些外部命令。上面的解决方案用执行一些外部命令替换了 'q' 按键事件。问题是,如果该外部命令也模拟了“q”键按下,那么绑定会重新启动外部命令,我就会陷入无限循环。
好的,所以我会发布一个我找到的解决方案,但也许其他人有更好的解决方案。按照此处提供的答案,我可以看到通过运行按下的所有键
xinput test <keyboad_id>
Run Code Online (Sandbox Code Playgroud)
在一个终端。然后,这只是一个简单的例子,将该命令的输出通过管道传输到一个程序中,该程序监视诸如“key release 24”(在我的键盘上释放 'q' 时的输出)之类的字符串,然后该程序会执行您喜欢的任何操作匹配这个字符串。
例如,我们可以捕捉按下“q”键并发出如下声音:
xinput test <keyboard_id> | while read in ; do
[[ $in = "key press 24" ]] && aplay /usr/share/sounds/purple/alert.wav
done
Run Code Online (Sandbox Code Playgroud)
显然,然后我们也可以观察其他输入并在需要时运行其他内容。