web-dev-qa-db-ja.com

xbindkeysがターミナルで機能しないようにする

私のブラウザにEmacsキーバインドを実装しようとしています。
現在、.xbindkeysrcとこのコードがあります

"if [[ "$(xdotool getwindowfocus getwindowname)" =~ "Chrome" ]]; then xdotool key --window "$(xdotool getactivewindow)" Left; fi"                                                                 
  control+b

ctrl + bを押すとキャレットが後退しますが、奇妙な後遺症があります。ターミナル(Gnomeターミナル)でctrl + bを使用できなくなります。
なぜこれが起こるのかわからないのですが、特定のプログラムでxbindkeysがキーをブロックするのを防ぐ方法はありますか?
そうでない場合、これを回避する別の方法を考えますか?

前もって感謝します。


追記

  • キーはGnome Terminalだけでなく、rxvtおよびxtermでもブロックされます。そして、条件部分を削除してタイプすると
"xdotool key --window "$(xdotool getactivewindow)" Left"
  control+b

ただ、コードが機能することを期待している場合、コードはターミナル(およびGedit)でもブロックされます。それは本当に私を混乱させます。

  • 私もxmodmapを試しましたが、keysymsテーブルにコントロールキーが含まれていないため、不可能です。私はまだxbindkeysxdotoolを使用して機能させるようにしていますが、私を助けていただければ本当にありがたいです。

  • Waylandコンテキストで同じスクリプトを試行すると機能するため、問題はXorg関連しているようです。

2
vdegenne

あなたがこの質問に興味があるなら、ここに私が最終的にそれをする方法があります。

.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コードを記述します。
また、systemdを使用して、起動時にスクリプトを実行します。

お役に立てば幸いです。

0
vdegenne