![防止 xbindkeys 在终端中工作](https://linux22.com/image/919206/%E9%98%B2%E6%AD%A2%20xbindkeys%20%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%AD%E5%B7%A5%E4%BD%9C.png)
我尝试在浏览器中实现 Emacs 键绑定。
目前我有.xbindkeysrc
这个和弦
"if [[ "$(xdotool getwindowfocus getwindowname)" =~ "Chrome" ]]; then xdotool key --window "$(xdotool getactivewindow)" Left; fi"
control+b
它在 Chrome 中运行良好,如果我按下插入ctrl + b
符号,它会向后移动,但随后我有一个奇怪的后遗症:我无法ctrl + b
再在终端(Gnome 终端)中使用。
除此之外,我不知道为什么会发生这种情况,有没有办法防止 xbindkeys 阻止某个程序中的键?
如果没有,您是否考虑过另一种方法来解决这个问题?
提前致谢。
补充笔记:
- 不仅密钥被阻止,而且密钥
Gnome Terminal
也被阻止。如果我删除条件部分并输入rxvt
xterm
"xdotool key --window "$(xdotool getactivewindow)" Left"
control+b
只是,当我期望它能工作时,chord 仍然在终端(甚至在 Gedit 中)被阻止。这真的让我很困惑。
我也试过修改映射但 keysyms 表不包括控制键,所以这是不可能的。我仍然尝试使用
xbindkeys
和来让它工作xdotool
,如果你能帮助我,我将不胜感激。问题似乎是韓國相关,因为尝试在同一个脚本中韦兰上下文起作用。
答案1
如果您对这个问题感兴趣,以下是我最终的解决方案。
我没有尝试直接在脚本中包含条件部分,而是.xbindkeysrc
制作了一个单独的脚本,该脚本的循环速度足够快,可以运行或终止xbindkey
守护进程
#!/usr/bin/sh
while true
do
if [[ "$(xdotool getwindowfocus getwindowname)" =~ "Chrome" ]]
then
xbindkeys 2>/dev/null
else
killall xbindkeys 2>/dev/null
fi
sleep 0.5
done
然后.xbindkeysrc
我把所有的 Emacs 和弦都写在我的 Emacs 中。
我还用它systemd
来在启动时运行脚本。
希望它对你有帮助。