引言
当希望我们运行的程序,一直保持在最顶端运行,即置顶状态,那么有很多种方式,这边给出一种脚本方式处理。
通过持续监控,当发现活动窗口不是我们所希望的窗口时,将我们希望置顶的程序窗口置顶。
脚本
bash
#!/bin/bash
# 目标窗口的标题
TARGET_WINDOW_TITLE="目标窗口的标题"
# 获取当前活动窗口的ID
ACTIVE_WIN_ID=$(xdotool getactivewindow)
# 使用wmctrl查找目标窗口ID
TARGET_WIN_ID=$(wmctrl -l | grep "$TARGET_WINDOW_TITLE" | awk '{print $1}')
# 检查目标窗口是否已经是活动窗口
if [ "$TARGET_WIN_ID" != "$ACTIVE_WIN_ID" ]; then
# 如果不是,则置顶目标窗口
wmctrl -a "$TARGET_WINDOW_TITLE"
fi
# 设置循环运行,每隔180秒检查一次
while true; do
# 获取当前活动窗口的ID
ACTIVE_WIN_ID=$(xdotool getactivewindow)
# 检查目标窗口是否已经是活动窗口
if [ "$TARGET_WIN_ID" != "$ACTIVE_WIN_ID" ]; then
# 如果不是,则置顶目标窗口
wmctrl -a "$TARGET_WINDOW_TITLE"
fi
# 等待180秒
sleep 180
done
讲解
-
TARGET_WINDOW_TITLE="目标窗口的标题"
:这行定义了一个变量TARGET_WINDOW_TITLE
,并将其值设置为"目标窗口的标题"。注意,这里应该替换为实际的窗口标题。 -
ACTIVE_WIN_ID=$(xdotool getactivewindow)
:这行使用xdotool
命令的getactivewindow
选项来获取当前活动窗口的ID,并将该ID存储在变量ACTIVE_WIN_ID
中。 -
TARGET_WIN_ID=$(wmctrl -l | grep "$TARGET_WINDOW_TITLE" | awk '{print $1}')
:这行通过管道命令组合wmctrl -l
(列出所有窗口)、grep
(搜索包含目标窗口标题的行)和awk '{print $1}'
(打印每行的第一个字段,即窗口ID)来找到目标窗口的ID,并将该ID存储在变量TARGET_WIN_ID
中。 -
if [ "$TARGET_WIN_ID" != "$ACTIVE_WIN_ID" ]; then
:这行是一个条件判断语句,它检查目标窗口的ID是否不等于当前活动窗口的ID。如果不等,说明目标窗口不是当前活动窗口。 -
wmctrl -a "$TARGET_WINDOW_TITLE"
:如果上面的条件为真(即目标窗口不是当前活动窗口),这行命令会使用wmctrl
的-a
选项来激活(或置顶)目标窗口。 -
while true; do
:这行开始了一个无限循环,因为true
总是为真,所以循环会不断执行。
完!