|本文编辑于20230211
总体流程
需要创建一个bindkey_shortcut.sh
脚本, 赋予可执行权限
touch bindkey_shortcut.sh
chmod +x ./bindkey_shortcut.sh
脚本会接受一个程序名参数
, 需要程序可执行文件和进程名都是这个程序名
- 程序
未启动
时, 会通过程序名启动这个程序 - 程序
启动
后, 会通过程序名判断前台窗口是否是目标窗口前台窗口为目标窗口时
, 执行隐藏当前窗口, 保存窗口id至tmp文件夹前台窗口不为目标窗口时
, 查找tmp文件夹中id, 恢复窗口(执行失败时尝试重启程序)
脚本内容
#!/bin/bash
focus=`xdotool getwindowfocus` # 获取前台窗口id
result=`xdotool getwindowname $focus|grep -i $1` # 在前台窗口名字中匹配输入的程序名
if [[ "$result" != "" ]]
then
# 如果是前台窗口 则隐藏
echo $focus > /tmp/bindkey_$1.tmp # 将本次启动窗口id保存在tmp文件夹中
xdotool windowunmap $focus # 隐藏窗口
else
# 如果不是前台窗口, 则恢复窗口或者启动程序
xdotool windowmap `cat /tmp/bindkey_$1.tmp`||$1
xdotool windowactivate `cat /tmp/bindkey_$1.tmp`
fi
以obsidian程序为例, 在系统中将Alt+A
绑定至<程序位置>/bindkey_shortcut.sh obsidian
命令, 即可调用本程序
注意不要在隐藏窗口之后, 删除/tmp/bindkey_<程序名>.tmp文件
误删请通过xdotool search --name <程序名>
找到窗口id, 可能有多个结果, 再通过xdotool windowmap <窗口id>
恢复窗口
补充
- 尝试过不保存窗口id或者wmctrl程序, 其实都大差不差, 这个是最高效方便的, 纰漏最少的