J'ai créé des raccourcis imitant l'Unité Mod4 + num comportement.
wmctrl -xa Sublime || subl
Ce que je n'aime pas, c'est qu'une fois que sublime est exécuté, il concentre toujours la première fenêtre ouverte. Je voudrais concentrer la dernière fenêtre "ciblée". Identique à Unity. Y at-il un drapeau pour cela?
J'ai créé un commutateur d'applications très robuste utilisant wmctrl
. Vérifiez mon message sur les forums Ubunt et mon réponse askubunt .
C'est le script à lancer:
#!/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
Ce script fait ce que vous voulez:
#!/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
EDIT: Ce script se concentre toujours sur la dernière fenêtre ciblée, par opposition à parcourir les fenêtres dans l’ordre dans lequel elles ont été ouvertes.
EDIT 2: J'ai modifié le script (wmctrl et xprop utilisent des formats légèrement différents pour l’affichage des nombres hexadécimaux).
EDIT 3: le nom de l'application doit être tiré de la 3ème colonne de wmctrl -lx pour éviter certains conflits.