如何根据聚焦的窗口更改键绑定?

Hub*_*bro 8 i3

我现在在 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"
Run Code Online (Sandbox Code Playgroud)

这使得我的键盘上的媒体按钮播放/暂停 playerctl 支持的音频播放器,如 Spotify。

问题是播放/暂停媒体按钮现在在我的视频播放器 (SMPlayer) 中不再起作用。

是否可以使键绑定仅在焦点窗口不是SMPlayer时生效?


总结我正在尝试做的事情:我希望上面的键绑定始终有效,除非聚焦 SMPlayer 窗口(类:“Smplayer”)。

这可能吗?

vat*_*sug 3

你可以试试这个。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
Run Code Online (Sandbox Code Playgroud)

将以下内容粘贴到名为的文件中/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
Run Code Online (Sandbox Code Playgroud)

您可能需要根据窗口的确切标题调整“SMPlayer”* 部分 - 我没有使用该程序的经验。else如果您愿意,您可以添加一个子句以在 SMPlayer 运行时运行另一个程序。