Kombinacja klawiszy do przełączania między oknami aplikacji we wszystkich rzutniach

11

Alt- `służy do przełączania między oknami aplikacji w bieżącej rzutni w Unity.

Czy istnieje inna kombinacja klawiszy do przełączania między oknami aplikacji we wszystkich rzutniach?

Nie chcę zmieniać domyślnego zachowania Alt- `, czyli przełączania między oknami aplikacji w bieżącej rzutni.

Używam Ubuntu 14.04 i Unity.

Kadir
źródło
Z punktu widzenia masz na myśli Workspace?
Tim
2
@Tim patrz askubuntu.com/questions/44102/…
Jacob Vlijm

Odpowiedzi:

7

Zainspirowany odpowiedzią Pineau, znalazłem brudną sztuczkę, aby to zrobić: przytrzymaj Alt+, `aby przełączać się między oknami aplikacji w jednej rzutni i (na przykład) Alt+, 1aby przełączać się między oknami aplikacji we wszystkich rzutniach.

Niewielkim kosmetycznym minusem jest to, że czas reakcji jest nieco mniej dokładny, ponieważ ustawienia wymagają ułamka sekundy na zmianę. W praktyce jednak prawie nie zauważysz.

  1. zainstaluj xdotool:

    sudo apt-get install xdotool
    
  2. Skopiuj poniższy scipt do pustego pliku i zapisz go jako 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. ustawić kombinację klawiszy, aby uruchomić skrypt: System Preferences > Keyboard > Shortcuts > Custom Shortcuts. Wybieram Alt+ 1, ponieważ jest blisko drugiego.

    Teraz możesz użyć albo Alt+, 1aby przełączać się między wszystkimi oknami (na przykład) gedit:

    wprowadź opis zdjęcia tutaj

    lub Alt+, `aby przełączać się między oknami gedit tylko poprawnego obszaru roboczego:

    wprowadź opis zdjęcia tutaj

Uwaga:

  1. W skrypcie klucz nad przyciskiem Tabjest ustawiony na key 0x60. Może być inaczej na innych lauyoutach. Jeśli to nie zadziała, uruchom terminal xev, a następnie naciśnij Return, a następnie klawisz nad kartą. W danych wyjściowych wyszukaj ciąg podobny do (keysym 0x60, grave). Wartość klucza to wartość potrzebna w wierszu (skryptu):

    xdotool keydown alt key 0x60
    
  2. Wartości sleep 0.2i sleep 1sprawiają, że skrypt działa dobrze w moim systemie, ale mogą one podlegać optymalizacji w celu uzyskania szybszych systemów (zmniejsz).

Więcej możliwości

Podobnie można ustawić kombinację klawiszy, aby przełączać się między wszystkimi oknami aplikacji we wszystkich oknach widoku, w których skrypt byłby:

#!/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

Jeśli ustawisz na przykład Alt+ Q, masz ładny zestaw wszystkich opcji:

Alt+ ` Przełączanie między oknami bieżącej aplikacji w bieżącej rzutni

Alt+ 1 Przełączanie między oknami bieżącej aplikacji we wszystkich rzutniach

Alt+ Tab Przełączanie między wszystkimi oknami aplikacji w bieżącej rzutni

Alt+ Q Przełączanie między wszystkimi oknami aplikacji we wszystkich rzutniach

wprowadź opis zdjęcia tutaj

Alt+ Tab: Przełączanie między wszystkimi oknami aplikacji w bieżącej rzutni

wprowadź opis zdjęcia tutaj

Alt+ Q: Przełączanie między wszystkimi oknami aplikacji we wszystkich rzutniach

Jacob Vlijm
źródło
5

Ogólne rozwiązanie przy użyciu wmctrl


Przegląd

Poniższy skrypt powinien być kompatybilny ze wszystkimi menedżerami okien zgodnymi z EWMH (np. Xfwm4, openbox, kwin, compiz ...). Wykorzystuje wmctrli xprop, które można zainstalować z:

sudo apt-get install x11-utils wmctrl

Instalacja

Skopiuj i zapisz następujący fragment jako 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"

Oznacz skrypt jako wykonywalny i zapisz go w dowolnym miejscu (najlepiej w ścieżce, np. /usr/local/binLub ~/bin).

Stosowanie

Użyj ich menu skrótów klawiaturowych w menedżerze okien, aby przypisać simple-window-switcherdo wybranego skrótu. Możesz użyć następujących parametrów do kontrolowania zachowania skryptu:

  • -g: globalne przełączanie okien (we wszystkich obszarach roboczych)
  • -l: przełączanie lokalnego okna (bieżący obszar roboczy); może nie działać z Unity / Compiz (więcej informacji w sekcji komentarzy)
Glutanimate
źródło
Drogi @ Glutanimate, po -ltym przełącza się również na okna w innych obszarach roboczych.
Kadir
@Kadir To dziwne. Nie ma tego w moim systemie. Jeśli masz trochę czasu, czy zechcesz opublikować wyniki wmctrl -xlna stronie takiej jak pastebin.com i link tutaj?
Glutanimate
Drogi @ Glutanimate, oto: pastebin.com/iJBAZ5a7
Kadir
@Kadir Thanks! Wygląda na to, że Unity / Compiz nie ujawnia poprawnie informacji o obszarze roboczym, więc wmctrl ma problem z odczytaniem go (dlatego w drugiej kolumnie widoczne są tylko zera, powinny to być numery obszaru roboczego). Nie mam pojęcia, czy to błąd, czy został zaprojektowany w ten sposób. Nie zauważyłem tego, ponieważ korzystałem z LXDE. Dodam notatkę do odpowiedzi.
Glutanimate,
4

Otwórz terminal i wpisz następujące polecenie:

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

Alternatywnie możesz zainstalować narzędzie Unity Tweak:

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

Następnie włącz opcję Przełącz między oknami we wszystkich obszarach roboczych na karcie Przełącz:

wprowadź opis zdjęcia tutaj

Sylvain Pineau
źródło
Chcę zachować właściwość Alt-`, która przełącza się między oknami aplikacji w bieżącej rzutni. Potrzebuję innego skrótu, takiego jak Ctrl-Alt-`, który będzie przełączał się między oknami aplikacji we wszystkich rzutniach.
Kadir
1
@Kadir Niestety, właściwość dconf nie pozwala na współistnienie obu konfiguracji. To jedno lub drugie zachowanie.
Sylvain Pineau