防止 xbindkeys 在终端中工作

防止 xbindkeys 在终端中工作

我尝试在浏览器中实现 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也被阻止。如果我删除条件部分并输入rxvtxterm
"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来在启动时运行脚本。

希望它对你有帮助。

相关内容