Scorciatoia per portare tutti i terminali aperti in primo piano


17

Dopo essere passato a una pagina Web o a un editor, c'è un modo per riportare tutti i terminali aperti nella loro posizione originale? È un po 'una seccatura fare clic sull'icona del terminale e quindi riportarli singolarmente.

Grazie!

Esempio:

  • Pre-scorciatoia:

Scorciatoia pre-immagine


  • Post-scorciatoia:

Scorciatoia post-immagine


1
+1 domanda molto interessante, potresti trovare utile questa risposta a una domanda non correlata : il programma devilspie potrebbe essere rilevante per questo problema se non esiste uno strumento GUI esistente.
evilsoup,

Per l'archivio: gist.github.com/psi-4ward/18c3a596d28a3cfa772101af755545df Uno script che rispetta le applicazioni utilizzate di recente
Psi,

Risposte:


9

Puoi premere Alt+ Tabper passare da una finestra all'altra e Alt+ Shift+ Tabper passare da una finestra all'altra. Questo collegamento è fatto per funzionare in quasi tutti i sistemi operativi grafici. Yow può anche usare i tasti Super+ We freccia per lo stesso scopo.

Dopo aver portato una finestra del terminale nella parte anteriore, premere Alt+ ~per portare tutte le altre finestre del terminale nella parte anteriore una per una:

passare a windows


Per portare automaticamente tutti i terminali aperti nella parte anteriore (non uno per volta come ho descritto in precedenza) è necessario aggiungere una scorciatoia da tastiera per il seguente script (sceneggiatura tratta da Adobe 's risposta e migliorata se si considera che la versione dello script non ha funzionato per me):

#!/bin/bash

if [ $# -ne 1 ];then
  echo -e "Usage: `basename $0` PROGRAM_NAME\n
           For example:\n\t
           '`basename $0` gnome-terminal' for Terminal\n\t
           '`basename $0` firefox' for Firefox\n\t
           '`basename $0` chromium-browser' for Chromium\n\t..."
  exit 1
fi

pids=" $(pidof $@) "

if [ "$pids" = "  " ]; then # the string "  " contain two spaces
    echo "There is no program named '$@' opened at the moment."
    exit 1
fi

wmctrl -lp | while read identity desktop_number PID window_title; do 
    if [ "${pids/ $PID }" != "$pids" ]; then
        wmctrl -ia $identity
    fi
done

Non dimenticare di rendere eseguibile lo script:

chmod +x /path/to/script/script_name

Dopo aver testato lo script nel terminale, è necessario vedere:


3
Grazie, ma è essenzialmente lo stesso che fare clic sull'icona del terminale e selezionare ciascuno per portarlo in primo piano. Intendo una scorciatoia che porterà tutti i terminali aperti in primo piano. Ad esempio, potrei scrivere il codice in gedit, voglio compilarlo in un terminale mentre guardo l'output di un registro in un altro terminale.
TomSelleck,

"La schermata verrà scattata tra 1 secondo" ... hmm qualcuno ha mentito qui ...
Carlos Campderrós

1
@Tomcelic Vedi le mie nuove modifiche. Voglio dire che stavo lavorando a una sceneggiatura simile mentre Adobe ha pubblicato il suo How to Answer (che per me non ha funzionato), quindi per favore non prenderla nel modo sbagliato.
Radu Rădeanu,

8

Ecco un piccolo script bash che porta in primo piano tutte le finestre il cui titolo corrisponde ad ARG:

bring-all-windows.bash ARG

Il copione:

#!/bin/bash

Program=$@

wmctrl -l | while read Window; do
    if [[ "$Window" == *"$Program"* ]]; then
        echo "DEBUG: I bring $Window"
        code=`echo "$Window" | cut -f 1 -d " "`
        wmctrl -i -a $code
    fi
done

Puoi legare

bring-all-windows.bash Terminal

a un tasto di scelta rapida (non dimenticare di inserire lo script in un PERCORSO della shell di accesso o di scrivere un percorso completo).

Lo script richiede wmctrldi essere installato.

Modifica :

Per eseguire qualcosa dal terminale, vai alla directory in cui hai inserito lo script, quindi

chmod +x bring-all-windows.bash
./bring-all-windows.bash Terminal

Quando sei sicuro che funzioni dal terminale, prova a collegarlo a un tasto di scelta rapida, fornendo il percorso completo. Quando sei sicuro che funzioni con un tasto di scelta rapida e con il percorso completo dello script, prova ad aggiungere la sua dir alla PATH della shell di accesso e vedi se funziona in questo modo.


Questo suona bene! Ci proverò a breve e ti risponderò. Sono ancora un po 'perplesso sul perché non esiste un metodo nativo per questo, sembra che dovrebbe essere naturale.
TomSelleck,

@Tomcelic: C'è un wmctrle bash: è naturale.
Adobe,

Vero ma non è nativo: P
TomSelleck

C'è qualche possibilità che ti dispiacerebbe passare attraverso come utilizzare questo script ?? Ho creato lo script e salvato nella mia cartella home e aggiunto il suo percorso a / etc / shells. Ho anche aggiunto una scorciatoia nelle impostazioni della tastiera con il nome bring_terminals_forward e il comando è bash /home/michael/Scripts/bring-all-windows.bash Terminal
TomSelleck

L'esecuzione dello script direttamente da un terminale in esecuzione non sembra funzionare neanche ... Funziona con programmi come gedit, ma non con Terminal
TomSelleck

0

Un altro modo è usare xdotool. Dovresti installarlo prima, quindi sudo apt-get install xdotoolè obbligatorio.

xdotool search --class "terminal" windowactivate %@
xdotool search --name "braiam@bt" windowactivate %@

Il primo cerca qualsiasi binario chiamato *terminal*, il secondo cerca qualsiasi finestra che abbia come titolo *braiam@bt*. Quindi se lo metti in uno script bash:

#!/bin/bash

set -e
program=$@

xdotool search --class '$program' windowactivate %@
xdotool search --name '$program' windowactivate %@

Puoi saperne di più su questo nel xdotoolmanuale.


0

Graficamente sul mio desktop Ubuntu, ho le mie icone disposte verticalmente sul margine sinistro del mio desktop. Se fai clic sinistro sull'icona del terminale, vedrai tutte le finestre del terminale. Quindi puoi scegliere quello in cui lavorare. Se fai clic destro sull'icona del terminale, vedrai un elenco di menu con un "Nuovo terminale" in alto e tutti i tuoi terminali aperti nella parte inferiore dell'elenco. Puoi selezionare qualunque sia il tuo terminale attivo.

Questo stesso metodo dovrebbe funzionare per qualsiasi altra applicazione come il tuo browser.

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.