编辑于2022-03-30
提前安装好xdotool、wmctrl
sudo pacman -S xdotool wmctrl # archlinux系
sudo apt install xdotool wmctrl # debian系
...
配置脚本文件
新建一个bind_shortcut.sh,内容如下
#!/bin/bash
focus=`xdotool getwindowfocus`
result=`xdotool getwindowname $focus|grep -i $1`
if [[ "$result" == "" ]]
then
echo `xdotool getwindowfocus` > /tmp/bindkey_$1.tmp
wmctrl -a $1||$1
else
xdotool windowactivate `cat /tmp/bindkey_$1.tmp`
fi
大体思路是,通过xdotool和wmctrl配合,检查前台窗口名称是否包含指定程序名称,如:obsidian
运行方法为 bash bind_shortcut.sh obsidian
- 如果前台程序不是obsidian,
- 将当前窗口id保存到/tmp/bindkey_obsidian.tmp
- 使用wmctrl -a 将窗口提前
- 提前失败说明不存在本窗口,则运行该程序
- 如果前台程序为obsidian(说明此时的意图是隐藏obsidian)
- 读取/tmp/bindkey_obsidian.tmp内容,然后用xdotool激活该窗口
进入系统快捷键配置
将快捷键与对应命令绑定
比如我的快捷键
bash bind_shortcut.sh obsidian # 绑定在F1
bash bind_shortcut.sh zotero # 绑定在alt+z
bash bind_shortcut.sh netease-music # 绑定在鼠标手势