Combinazione di tasti per alternare tra le finestre di un'applicazione in tutte le finestre


11

Alt- `viene utilizzato per alternare tra le finestre di un'applicazione nella finestra corrente in Unity.

Esiste un'altra combinazione di tasti per alternare tra le finestre di un'applicazione in tutte le finestre?

Non voglio cambiare il comportamento predefinito di Alt- `, che sta cambiando tra le finestre di un'applicazione nella finestra corrente.

Sto usando Ubuntu 14.04 e Unity.


Per punto di vista intendi Workspace?
Tim

Risposte:


7

Ispirato dalla risposta di Pineau, ho trovato un trucco per farlo: tenere premuto Alt+ `per passare da una finestra all'altra in una finestra e (ad esempio) Alt+ 1per passare da una finestra all'altra su tutte le finestre.

L'aspetto negativo estetico minore è che la reattività è un po 'meno accurata, poiché le impostazioni richiedono una frazione di secondo per cambiare. In pratica, tuttavia, quasi non lo noterai.

  1. installare xdotool:

    sudo apt-get install xdotool
    
  2. Copia il seguente scipt in un file vuoto e salvalo come 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. impostare una combinazione di tasti per eseguire lo script: System Preferences > Keyboard > Shortcuts > Custom Shortcuts. Scelgo Alt+ 1, poiché è vicino all'altro.

    Ora puoi usare Alt+ 1per alternare tutte le finestre di (ad esempio) gedit:

    inserisci qui la descrizione dell'immagine

    o Alt+ `per alternare tra le finestre gedit solo dell'area di lavoro currect:

    inserisci qui la descrizione dell'immagine

Nota:

  1. Nello script, la chiave sopra la Tabè impostata su key 0x60. Questo potrebbe essere diverso su altri lauyouts. Se non funziona, esegui un terminale xev, quindi premi Return, quindi il tasto sopra la scheda. Nell'output, cerca una stringa come (keysym 0x60, grave). Il valore keysym è il valore necessario nella riga (script-):

    xdotool keydown alt key 0x60
    
  2. I valori di sleep 0.2e sleep 1fanno funzionare bene lo script sul mio sistema, ma potrebbero essere soggetti a ottimizzazione per sistemi più veloci (riduzione).

Più opzioni

Allo stesso modo, è possibile impostare una combinazione di tasti per passare da una finestra all'altra su tutte le finestre che lo script dovrebbe essere:

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

Se imposti ad esempio Alt+ Qper questo, hai un bel set di tutte le opzioni:

Alt+ ` Passa tra le finestre dell'applicazione corrente nella finestra corrente

Alt+ 1 Passa tra le finestre dell'applicazione corrente su tutte le finestre

Alt+ Tab Passa tra tutte le finestre dell'applicazione nella finestra corrente

Alt+ Q Passa da tutte le applicazioni Windows su tutte le finestre

inserisci qui la descrizione dell'immagine

Alt+ Tab: Passa tra tutte le finestre dell'applicazione nella finestra corrente

inserisci qui la descrizione dell'immagine

Alt+ Q: Passa da una finestra all'altra su tutte le finestre


5

Soluzione generica che utilizza wmctrl


Panoramica

Il seguente script dovrebbe essere compatibile con tutti i gestori di finestre conformi a EWMH (ad esempio xfwm4, openbox, kwin, compiz ...). Utilizza wmctrle xprop, che può essere installato con:

sudo apt-get install x11-utils wmctrl

Installazione

Copia e salva il seguente passaggio come 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"

Contrassegna lo script come eseguibile e salvalo dove preferisci (preferibilmente nel tuo PERCORSO, ad es. /usr/local/binO ~/bin).

uso

Utilizzare il menu delle scorciatoie da tastiera del gestore delle finestre per assegnare simple-window-switchera un tasto di scelta rapida desiderato. È possibile utilizzare i seguenti parametri per controllare il comportamento dello script:

  • -g: cambio finestra globale (in tutte le aree di lavoro)
  • -l: commutazione finestra locale (area di lavoro corrente); potrebbe non funzionare con Unity / Compiz (vedere la sezione commenti per ulteriori informazioni)

Caro @Glutanimate, dopo -lpassa anche a Windows su altre aree di lavoro.
Kadir,

@Kadir È strano. Non funziona sul mio sistema. Se hai del tempo, vorresti pubblicare l'output di wmctrl -xlun sito come pastebin.com e collegarlo qui?
Glutanimate,

Caro @Glutanimate, eccolo: pastebin.com/iJBAZ5a7
Kadir,

@Kadir Grazie! Sembra che Unity / Compiz non stia esponendo correttamente le informazioni sull'area di lavoro, quindi wmctrl ha difficoltà a raccoglierle (ecco perché vedi solo zero nella seconda colonna, dovrebbero essere i numeri dell'area di lavoro). Non ho idea se questo è un bug o se è stato progettato in questo modo. Non l'ho notato perché stavo usando LXDE. Aggiungerò una nota alla risposta.
Glutanimate,

4

Apri un Terminale e digita il seguente comando:

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

In alternativa puoi installare lo strumento Unity Tweak:

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

Quindi abilita l' opzione Passa da una finestra all'altra in tutte le aree di lavoro nella scheda Switcher:

inserisci qui la descrizione dell'immagine


Voglio preservare la proprietà di Alt-`, che sta cambiando tra le finestre di un'applicazione nella finestra corrente. Ho bisogno di un'altra scorciatoia come Ctrl-Alt-`, che cambierà tra le finestre di un'applicazione in tutte le finestre.
Kadir,

1
@Kadir Sfortunatamente, la proprietà dconf non permetterà a entrambe le configurazioni di coesistere. È un comportamento o l'altro.
Sylvain Pineau,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.