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

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

我现在的 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"

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

问题是播放/暂停媒体按钮现在在我的视频播放器 (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 运行时运行另一个程序。

相关内容