Come visualizzare l'ultima finestra del terminale con un tasto di scelta rapida?


11

Uso il terminale così spesso per eseguire comandi rapidi e poi lo lascio in background in modo che finisca per aprire più di 20 sessioni di terminale mentre lavoro. Questo perché è molto veloce utilizzare semplicemente il tasto di scelta rapida e digitare un comando.

C'è un modo per impostare il tasto di scelta rapida in modo da visualizzare la finestra dell'ultimo terminale invece di crearne uno nuovo?


1
una versione modificata di questa sarebbe una soluzione? Sarebbe drasticamente più semplice farlo per una singola finestra del terminale e farlo scomparire completamente. askubuntu.com/a/595244/72216 fammi sapere, posso convertire facilmente la risposta. Qual è il nome (finestra) della finestra del terminale?
Jacob Vlijm,

2
Prova questo
AB

Il nome della finestra che uso è semplicemente "Terminale". Ma il metodo di script che hai lì funzionerebbe ancora se uso le schede nel terminale? (ad esempio ctrl + maiusc + T), anch'io li rinomino per identificare il computer in cui mi trovo.
Klik,

Finché la stringa "terminale" è lì sarebbe. Thjat è il caso?
Jacob Vlijm,

@JacobVlijm Non è il caso. Cambio spesso il nome in "ssh" o "Local" a seconda di cosa sto facendo. Potrei modificare il mio titolo cambiando lo script per includere un prefisso unico però. Vale a dire '%.%' O qualcosa del genere.
Klik,

Risposte:


13

Ho un terminale appuntato alla barra laterale del launcher Unity in posizione 10. In questo modo posso premere Super+ 0per "fare clic" sull'icona di avvio che porta in alto la finestra del terminale più recente.

inserisci qui la descrizione dell'immagine

Se averlo nel launcher è giusto per te (una delle prime 10 posizioni, altrimenti non otterrà una scorciatoia!), Funzionerà.


Oh, è un'ottima idea! Mi piace questa risposta, ma aspetterò di vedere cosa ne pensano gli altri. Stavo pensando di creare una sceneggiatura usando xdotool per trovare il terminale e portarlo in primo piano.
Klik,

Penso che questa soluzione sia la più facilmente implementabile e serva esattamente allo scopo che sto cercando. Per questa ragione segnerò questa come risposta.
Klik,

10

Uso guake e ne sono molto contento. Premere F12, viene visualizzata una finestra del terminale, premere di nuovo F12, scompare ma continua a funzionare in background. Inoltre: sembra davvero bello.


Un altro voto per falso qui. Vale la pena notare che se si utilizzano più monitor (di dimensioni diverse), alcune versioni necessitano di una correzione per farlo funzionare correttamente - comunque ne vale la pena.
Holloway,

Divenni così dipendente dal falso che quando sono passato a xmonad l'ho emulato in quello. Deve avere!
Tony Martin,

6

Puoi inserire lo script di seguito in una combinazione di tasti. Se si preme la combinazione di tasti, le finestre del terminale scompaiono (completamente). Premerlo di nuovo, si apriranno di nuovo esattamente nello stato come lo avevi.

L'unica cosa che devi fare (una volta) è aggiungere la stringa identificativa nel nome della finestra del tuo terminale (la finestra del terminale ha lo stesso nome nella maggior parte dei casi)

Per usarlo

Installa entrambi xdotoole wmctrl:

sudo apt-get install xdotool
sudo apt-get install wmctrl
  1. Copia lo script in un file vuoto, salvalo come hide_terminal.py
  2. Nella sezione head, imposta la stringa identificativa del nome della finestra del terminale
  3. Eseguilo con una combinazione di tasti:

    python3 /path/to/hide_terminal.py
    

Il copione

#!/usr/bin/env python3
import subprocess
import os

home = os.environ["HOME"]
hidden_windowid = home+"/.window_id.txt"

get = lambda cmd: subprocess.check_output(cmd).decode("utf-8")
# --- set the identifying string in the terminal window's name below (you mentioned "Terminal"
window_idstring = "Special_window"
# ---
def execute(cmd):
    subprocess.check_call(cmd)

w_id = [l.split()[0] for l in get(["wmctrl", "-l"]).splitlines() if window_idstring in l]
if len(w_id) !=0:
    for w in w_id:
        execute(["xdotool", "windowunmap", w])
        with open(hidden_windowid, "a") as out:
            out.write(w+"\n")
else:
    try:
        with open(hidden_windowid) as read:
            for w in [w.strip() for w in read.readlines()]:
                try:
                    execute(["xdotool", "windowmap", w])
                except subprocess.CalledProcessError:
                    pass
        with open(hidden_windowid, "wt") as clear:
            clear.write("")
    except FileNotFoundError:
        pass

1
Hai una sceneggiatura per tutto, vero? ; D
Comandante di byte

1
@ByteCommander Non posso resistere, è più forte di me :)
Jacob Vlijm

Nota che devi anche cambiare il nome del terminale nell'ultima riga se non lo stai usando gnome-terminal. Inoltre, si interrompe se si dispone di più di un terminale aperto. Nel mio sistema, la prima corsa nasconde quella attiva, la seconda corsa nasconde la seconda e la terza corsa restituisce solo il secondo terminale. Il 1 ° è perso per sempre.
terdon,

@terdon Arrgh, hai ragione! Lo riparerà e lo farà nascondere / mostrare tutte le finestre del terminale.
Jacob Vlijm,

Più precisamente, perché non farlo in bash? Perché dovresti inserire Python se tutto ciò che stai facendo con Python è l'avvio di chiamate di sistema?
terdon,

5

Questa è la stessa cosa della risposta di Jacob Vlijm, appena scritta in bash:

#!/usr/bin/env bash

## window_name will be the first argument passed or, if no
## argument was given, "Terminal"
window_name=${1:-"Terminal"}

## Get the list of open terminals
terms=( $(wmctrl -l | grep "$window_name" | cut -d ' ' -f 1) )

## If all terminals are hidden
if [ -z "${terms[0]}" ]
then
    ## Read the IDs of hidden windows from .hidden_window_id
    while read termid
    do
        xdotool windowmap "$termid"
    done < ~/.hidden_window_id
## If there are visible terminals
else
    ## Clear the .hidden_window_id file
    > ~/.hidden_window_id
    ## For each open terminal
    for i in "${terms[@]}"
    do
        ## Save the current ID into the file
        printf "%s\n" "$i" >> ~/.hidden_window_id
        ## Hide the window
        xdotool windowunmap "$i"
    done
fi

Se lo salvi come ~/bin/show_hide.sh, puoi eseguirlo fornendo la stringa identificativa di qualsiasi finestra che desideri nascondere. Se non viene fornita alcuna stringa, funzionerà su Terminal:

show_hide.sh Terminal

1

Sto usando gnome-shelll'estensione "Drop Down Terminal", il collegamento predefinito è TABma è facilmente modificabile.


1

Questo semplice comando wmctrl solleverà una finestra con una determinata stringa nel titolo o se non esiste alcuna finestra contenente la stringa, esegui un comando.

wmctrl -a <str> || <command to launch application>

ad es. per gedit posso usare

wmctrl -a gedit || gedit

Per trovare una stringa adatta per la finestra dell'applicazione, apri l'applicazione ed esegui

wmctrl -l

0

il seguente approccio ha funzionato per me:

#!/usr/bin/env bash

# Written by Eric Zhiqiang Ma (http://www.ericzma.com)
# Last update: Jul. 9, 2014

# Read the tutorials at
# http://www.systutorials.com/5475/turning-gnome-terminal-to-a-pop-up-terminal/

# Required tools: xdotool

terminal="gnome-terminal"
stat_file="/dev/shm/actiavte-termianl.term.$USER"
termtype="Terminal"
wait_sec=1
max_wait_cnt=4

# parse options first
if [ "$1" != "" ]; then
    terminal="$1"
fi


term_exists () {
    allterms=`xdotool search --class "$termtype"`
    for e in $allterms; do [[ "$e" == "$1" ]] && return 0; done
    return 1
}

create_terminal () {
    echo "Create new terminal"
    $terminal --maximize &

    exists=1
    wait_cnt=0
    until [ "$exists" == "0" ]; do
        # sleep a while
        sleep $wait_sec

        # Note that the focus window may be from a terminal that
        # already exists; the makes create_terminal choose the existing terminal
        # Making the wait_sec large enough so that the terminal can be created and
        # displayed can make the false choosing more unlikely.

        term=$(xdotool getwindowfocus)
        term_exists "$term"
        exists=$?
        # avoid infinite wait
        let wait_cnt=wait_cnt+1
        if [ $wait_cnt -gt $max_wait_cnt ]; then
            echo "Wait for too long. Give up."
            term=""
            exists=0
        fi
    done

    echo "Created terminal window $term"
    # save the state
    echo "$term" >$stat_file
}

# read the state
if [ -f $stat_file ]; then
    term=$(cat $stat_file)
fi

# check whether it exists
term_exists "$term"
exists=$?
if [[ "$exists" != "0" ]]; then
    create_terminal
    exit 0
fi

# check whether it is already activated
curwin=$(xdotool getwindowfocus)

if [ "$term" == "$curwin" ]; then
    # deactivate (minimize) the terminal if it is currently activated
    xdotool windowminimize $curwin
else
    # activate the terminal if it is not currently activated
    xdotool windowactivate $term
fi

exit 0

quindi dagli le autorizzazioni di esecuzione e associa lo script a una chiave nelle impostazioni.

fonte:

http://www.systutorials.com/5475/turning-gnome-terminal-to-a-pop-up-terminal/


1
Aggiungi alcune parti importanti da quel link nel caso il link si interrompa o cambi.
George Udosen,
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.