フォーカスされたウィンドウに基づいてキーバインディングを変更する方法は?

フォーカスされたウィンドウに基づいてキーバインディングを変更する方法は?

現在、i3 構成には次の行があります。

# Play/pause, prev, next
bindcode 172 exec "/opt/playerctl/bin/playerctl play-pause"
bindcode 173 exec "/opt/playerctl/bin/playerctl previous"
bindcode 171 exec "/opt/playerctl/bin/playerctl next"

これにより、キーボードのメディアボタンがSpotifyなどのplayerctl対応オーディオプレーヤーを再生/一時停止します。

問題は、メディアの再生/一時停止ボタンが自分のビデオプレーヤー(SMPlayer)で機能しなくなることです。

ウィンドウにフォーカスがある場合にのみキーバインディングを適用することはできますか?いいえSMPプレーヤー?


私がしたいことを要約すると、上記のキーバインディングは常に機能したいと思います。とは別にSMPlayerウィンドウ(クラス:「Smplayer」)がフォーカスを受け取ったとき。

可能ですか?

ベストアンサー1

これを試してみてください。username以下を実際のLinuxユーザー名に変更してください。何らかの理由で~代わりに使用することはhome/username私には適していません。

i3 構成では、次の行を使用します。

# Play/pause, prev, next
bindcode 172 exec /home/username/.i3/play.sh play-pause
bindcode 173 exec /home/username/.i3/play.sh previous
bindcode 171 exec /home/username/.i3/play.sh next

以下を名前付きファイルに貼り付けます。/home/username/.i3/play.sh

cmd="$1"
id=$(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')
curr_title=$(xprop -id $id | awk '/_NET_WM_NAME/{$1=$2="";print}' | cut -d'"' -f2)
if [[ "$curr_title" != "SMPlayer"* ]]; then
    /opt/playerctl/bin/playerctl "$cmd"
fi

ウィンドウの正確なタイトルによっては、「SMPlayer」*部分を調整する必要があるかもしれません。そのプログラムの経験はありません。else必要に応じて、SMPlayerの実行中に他のプログラムを実行する句を追加できます。

おすすめ記事