wmctrl – 关注应用程序的最新窗口

我创建了一些模仿Unity的Mod4 + num行为的快捷方式。

wmctrl -xa Sublime || subl 

我不喜欢的是,一旦sublime运行,它总是聚焦第一个打开的窗口。 我想关注最后一个“聚焦”的窗口。 与Unity相同。 那有旗帜吗?

这个脚本做你想要的:

 #!/bin/bash app=$1 workspace=$(wmctrl -d | grep '\*' | cut -d ' ' -f1) win_list=$(wmctrl -lx | grep $app | grep " $workspace " | awk '{print $1}') IDs=$(xprop -root|grep "^_NET_CLIENT_LIST_STACKING" | tr "," " ") IDs=(${IDs##*#}) for (( idx=${#IDs[@]}-1 ; idx>=0 ; idx-- )) ; do for i in $win_list; do if [ $((i)) = $((IDs[idx])) ]; then wmctrl -ia $i exit 0 fi done done exit 1 

编辑:此脚本始终关注最后一个聚焦窗口,而不是按照打开顺序在窗口中循环。

编辑2:我修改了脚本(结果是wmctrl和xprop使用稍微不同的格式来显示hex数字)。

编辑3:应该从wmctrl -lx的第3列获取应用程序名称以避免某些冲突。

我使用wmctrl了一个非常强大的应用程序切换器。 检查我的Ubuntu论坛post和我的askubuntu答案 。

这是要启动的脚本:

 #!/bin/bash app_name=$1 workspace_number=`wmctrl -d | grep '\*' | cut -d' ' -f 1` win_list=`wmctrl -lx | grep $app_name | grep " $workspace_number " | awk '{print $1}'` active_win_id=`xprop -root | grep '^_NET_ACTIVE_W' | awk -F'# 0x' '{print $2}' | awk -F', ' '{print $1}'` if [ "$active_win_id" == "0" ]; then active_win_id="" fi # get next window to focus on, removing id active switch_to=`echo $win_list | sed s/.*$active_win_id// | awk '{print $1}'` # if the current window is the last in the list ... take the first one if [ "$switch_to" == "" ];then switch_to=`echo $win_list | awk '{print $1}'` fi if [[ -n "${switch_to}" ]] then (wmctrl -ia "$switch_to") & else if [[ -n "$2" ]] then ($2) & fi fi exit 0