Combinaison de touches pour basculer entre les fenêtres d'une application dans toutes les fenêtres

11

Alt- `est utilisé pour basculer entre les fenêtres d'une application dans la fenêtre courante dans Unity.

Existe-t-il une autre combinaison de touches pour basculer entre les fenêtres d'une application dans toutes les fenêtres?

Je ne veux pas changer le comportement par défaut de Alt- `, qui bascule entre les fenêtres d'une application dans la fenêtre courante.

J'utilise Ubuntu 14.04 et Unity.

Kadir
la source
Par point de vue, voulez-vous dire Workspace?
Tim
2
@Tim voir askubuntu.com/questions/44102/…
Jacob Vlijm

Réponses:

7

Inspiré par la réponse de Pineau, j'ai trouvé une sale astuce pour le faire: garder Alt+ `pour basculer entre les fenêtres d'application dans une fenêtre, et (par exemple) Alt+ 1pour basculer entre les fenêtres d'application sur toutes les fenêtres.

L'inconvénient cosmétique mineur est que la réactivité est un peu moins précise, car les paramètres ont besoin d'une fraction de seconde pour changer. En pratique cependant, vous ne le remarquerez guère.

  1. installer xdotool:

    sudo apt-get install xdotool
    
  2. Copiez le scipt suivant dans un fichier vide et enregistrez-le sous switch.sh

    #!/bin/bash
    
    dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport false
    sleep 0.2
    xdotool keydown alt key 0x60
    dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport true
    sleep 1
    
  3. définir une combinaison de touches pour exécuter le script: System Preferences > Keyboard > Shortcuts > Custom Shortcuts. Je choisis Alt+ 1, car il est proche de l'autre.

    Vous pouvez maintenant utiliser soit Alt+ 1pour basculer entre toutes les fenêtres de (par exemple) gedit:

    entrez la description de l'image ici

    ou Alt+ `pour basculer entre les fenêtres gedit de l'espace de travail currect uniquement:

    entrez la description de l'image ici

Remarque:

  1. Dans le script, la clé au-dessus de Tabest définie sur key 0x60. Cela pourrait être différent sur d'autres lauyouts. Dans le cas où cela ne fonctionnerait pas, exécutez dans un terminal xev, puis appuyez sur Return, puis sur la touche au-dessus de l'onglet. Dans la sortie, recherchez une chaîne comme (keysym 0x60, grave). La valeur de keysym est la valeur dont vous avez besoin dans la ligne (script-):

    xdotool keydown alt key 0x60
    
  2. Les valeurs de sleep 0.2et sleep 1font fonctionner le script correctement sur mon système, mais elles peuvent être sujettes à l'optimisation pour des systèmes plus rapides (réduire).

Plus d'options

De même, vous pouvez définir une combinaison de touches pour basculer entre toutes les fenêtres d'application sur toutes les fenêtres, le script serait alors:

#!/bin/bash

dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport false
sleep 0.2
xdotool keydown alt key 0xff09
dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport true
sleep 1

Si vous définissez par exemple Alt+ Qpour cela, vous avez un bel ensemble de toutes les options:

Alt+ ` Basculer entre les fenêtres de l'application actuelle sur la fenêtre actuelle

Alt+ 1 Basculer entre les fenêtres de l'application actuelle sur toutes les fenêtres

Alt+ Tab Basculer entre toutes les fenêtres d' application sur la fenêtre courante

Alt+ Q Basculer entre toutes les fenêtres d' application sur toutes les fenêtres

entrez la description de l'image ici

Alt+ Tab: Basculer entre toutes les fenêtres d'application sur la fenêtre courante

entrez la description de l'image ici

Alt+ Q: Basculer entre toutes les fenêtres d'application sur toutes les fenêtres

Jacob Vlijm
la source
5

Solution générique utilisant wmctrl


Aperçu

Le script suivant doit être compatible avec tous les gestionnaires de fenêtres compatibles EWMH (par exemple xfwm4, openbox, kwin, compiz ...). Il utilise wmctrlet xprop, qui peut être installé avec:

sudo apt-get install x11-utils wmctrl

Installation

Copiez et enregistrez le passage suivant sous simple-window-switcher:

#!/bin/bash

# based on a script by Robert Steiniger
# (http://lars.st0ne.at/blog/switch%20between%20windows%20within%20the%20same%20application)

Usage="
  Title:        simple-window-switcher 0.1
  Description:  switch between all windows of active application
  Author:       Copyright Glutanimate 2014 (https://github.com/Glutanimate)
  License:      GNU GPLv3
  Usage:        $(basename "$0") [-g|-l|-h]
                -g: global window switching (across all workspaces)
                -l: local window switching (current workspace)
                -h: display this help message

                If no argument is provided window switching will be set to global.
"

while getopts "lgh" OPTIONS; do
  case $OPTIONS in
    l ) Fields="3-4"
        ;;
    g ) Fields="4"
        ;;
    h ) echo "$Usage"
        exit 0
        ;;
   \? ) echo "$Usage"
        exit 1
        ;;
  esac
done

ActiveWinID="$(xprop -root | sed -n 's/_NET_ACTIVE_WINDOW(WINDOW): window id # 0x//p')"
# fields 3-4: <desktop number> <window class>
ActiveWinClass="$(wmctrl -xl | grep "$ActiveWinID" | cut -d" " -f${Fields})"
WindowList="$(wmctrl -xl | grep "$ActiveWinClass" | cut -d" " -f1)"
NextWindow="$(echo "$WindowList" | grep -A1 "$ActiveWinID" | sed -n 2p)"

if [[ -z "$NextWindow" ]]; then
  NextWindow="$(echo $WindowList | head -n 1)"
fi

wmctrl -i -a "$NextWindow"

Marquez le script comme exécutable et enregistrez-le où bon vous semble (de préférence dans votre CHEMIN, par exemple /usr/local/binou ~/bin).

Usage

Utilisez le menu de raccourcis clavier de votre gestionnaire de fenêtres pour attribuer simple-window-switcherà un raccourci clavier de votre choix. Vous pouvez utiliser les paramètres suivants pour contrôler le comportement du script:

  • -g: changement de fenêtre global (sur tous les espaces de travail)
  • -l: changement de fenêtre locale (espace de travail actuel); peut ne pas fonctionner avec Unity / Compiz (voir la section des commentaires pour plus d'informations)
Glutanimate
la source
Cher @Glutanimate, après -légalement basculer vers les fenêtres sur d'autres espaces de travail.
Kadir
@Kadir C'est étrange. Ce n'est pas sur mon système. Si vous avez un peu de temps, seriez-vous prêt à publier la sortie de wmctrl -xlsur un site comme pastebin.com et à le lier ici?
Glutanimate
Cher @Glutanimate, le voici: pastebin.com/iJBAZ5a7
Kadir
@Kadir Merci! Il semble que Unity / Compiz n'expose pas correctement les informations de l'espace de travail, donc wmctrl a du mal à les récupérer (c'est pourquoi vous ne voyez que des zéros dans la deuxième colonne, ce devraient être les numéros de l'espace de travail). Aucune idée si c'est un bug ou s'il a été conçu de cette façon. Je ne l'ai pas remarqué car j'utilisais LXDE. Je vais ajouter une note à la réponse.
Glutanimate
4

Ouvrez un terminal et tapez la commande suivante:

dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport false

Vous pouvez également installer l'outil Unity Tweak:

sudo apt-get install unity-tweak-tool
unity-tweak-tool

Activez ensuite l' option Basculer entre les fenêtres sur tous les espaces de travail dans l'onglet Switcher:

entrez la description de l'image ici

Sylvain Pineau
la source
Je souhaite conserver la propriété Alt-`, qui bascule entre les fenêtres d'une application dans la fenêtre courante. J'ai besoin d'un autre raccourci comme Ctrl-Alt-`, qui basculera entre les fenêtres d'une application dans toutes les fenêtres.
Kadir
1
@Kadir Malheureusement, la propriété dconf ne permettra pas aux deux configurations de coexister. C'est un comportement ou l'autre.
Sylvain Pineau