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

11

Uso spesso il terminale per fare comandi rapidi e poi lo lascio in background in modo che finisca con l'aprire più di 20 sessioni terminali mentre sto lavorando. Questo perché è molto veloce usare semplicemente il tasto di scelta rapida e digitare un comando.

C'è un modo per impostare il tasto di scelta rapida in modo da richiamare l'ultima finestra del terminale anziché crearne una nuova?

    
posta Klik 19.03.2015 - 15:49
fonte

7 risposte

13

Ho un terminale riposto nella barra laterale di avvio di Unity in posizione 10. In questo modo posso premere Super + 0 per "fare clic" sull'icona del launcher che porta l'ultima finestra del terminale in alto.

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

    
risposta data Byte Commander 19.03.2015 - 15:56
fonte
10

Uso guake e sono molto soddisfatto. Premere F12, appare una finestra di terminale, premere nuovamente F12, scompare ma continua a funzionare in background. Inoltre: sembra davvero bello.

    
risposta data Jos 19.03.2015 - 16:09
fonte
6

Puoi inserire lo script sotto una combinazione di tasti. Se premi la combinazione di tasti, la (e) finestra (i) del terminale scomparirà (completamente). Premerlo di nuovo, compariranno di nuovo esattamente nello stato in cui si trovava.

L'unica cosa che devi (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 sia xdotool che 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 terminale
  3. Eseguilo sotto una combinazione di tasti:

    python3 /path/to/hide_terminal.py
    

Lo script

#!/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
    
risposta data Jacob Vlijm 19.03.2015 - 16:14
fonte
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 dando la stringa identificativa di qualsiasi finestra che vuoi nascondere. Se non viene fornita alcuna stringa, funzionerà su Terminal :

show_hide.sh Terminal
    
risposta data terdon 19.03.2015 - 20:56
fonte
1

Sto utilizzando gnome-shell con estensione "Drop down Terminal", il collegamento predefinito è TAB ma è facilmente modificabile.

    
risposta data perdigueiro 20.03.2015 - 00:20
fonte
1

Questo semplice comando wmctrl solleverà una finestra con una stringa specifica nel titolo o se non esiste una 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 la tua applicazione ed esegui

wmctrl -l
    
risposta data Glen.S 24.03.2015 - 00:01
fonte
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 [ "" != "" ]; then
    terminal=""
fi


term_exists () {
    allterms='xdotool search --class "$termtype"'
    for e in $allterms; do [[ "$e" == "" ]] && 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 basta dare le autorizzazioni di esecuzione e associare lo script a una chiave nelle impostazioni.

fonte:

link

    
risposta data DmitrySemenov 20.01.2017 - 21:24
fonte

Leggi altre domande sui tag