web-dev-qa-db-fra.com

Comment faire apparaître la dernière fenêtre du terminal avec une touche de raccourci?

J'utilise souvent le terminal pour faire des commandes rapides, puis je le laisse en arrière-plan pour pouvoir ouvrir plus de 20 sessions de terminal pendant que je travaille. En effet, il est très rapide d’utiliser simplement la touche de raccourci et de taper une commande.

Existe-t-il un moyen de configurer la touche de raccourci pour que j'ouvre ma dernière fenêtre de terminal au lieu d'en créer une nouvelle?

11
Klik

J'ai un terminal épinglé sur la barre latérale du lanceur d'Unity à la position 10. Ainsi, je peux appuyer sur Super+ pour "cliquer" sur l'icône du lanceur qui fait apparaître la dernière fenêtre de terminal en haut.

enter image description here

Si l'avoir dans le lanceur vous convient (l'une des 10 premières positions, sinon elle n'aura pas de raccourci!), Cela fonctionnera.

13
Byte Commander

J'utilise guake et j'en suis très content. Appuyez sur F12, une fenêtre de terminal apparaît, appuyez à nouveau sur F12, elle disparaît mais continue de fonctionner en arrière-plan. Aussi: l'air vraiment cool.

10
Jos

Vous pouvez mettre le script ci-dessous sous une combinaison de touches. Si vous appuyez sur la combinaison de touches, la ou les fenêtres du terminal disparaîtront (complètement). Appuyez à nouveau dessus, ils réapparaîtront exactement dans l'état où vous l'avez.

Une seule chose à faire (une fois) consiste à ajouter la chaîne d'identification dans le nom de la fenêtre de votre terminal (la fenêtre du terminal porte le même nom dans la plupart des cas).

Pour l'utiliser

Installez à la fois xdotool et wmctrl:

Sudo apt-get install xdotool
Sudo apt-get install wmctrl
  1. Copiez le script dans un fichier vide, enregistrez-le sous le nom hide_terminal.py
  2. Dans la section head, définissez la chaîne d'identification du nom de la fenêtre du terminal.
  3. Exécutez-le sous une combinaison de touches:

    python3 /path/to/hide_terminal.py
    

Le scénario

#!/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
6
Jacob Vlijm

C'est la même chose que la réponse de Jacob Vlijm, juste écrite en 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

Si vous l'enregistrez sous le nom ~/bin/show_hide.sh, vous pouvez l'exécuter en indiquant la chaîne d'identification de la fenêtre que vous souhaitez masquer. Si aucune chaîne n'est donnée, cela fonctionnera sur Terminal:

show_hide.sh Terminal
5
terdon

Cette simple commande wmctrl soulèvera une fenêtre avec une chaîne donnée dans le titre ou, si aucune fenêtre ne contient la chaîne, exécutez une commande.

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

par exemple pour gedit je peux utiliser

wmctrl -a gedit || gedit

Pour trouver une chaîne appropriée pour la fenêtre de votre application, ouvrez votre application et exécutez

wmctrl -l
1
Glen.S

J'utilise gnome-Shell avec l'extension 'Drop Down Terminal', le raccourci par défaut est TAB mais il peut être facilement modifié.

1
perdigueiro

l'approche suivante a fonctionné pour moi:

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

il suffit ensuite de lui donner des autorisations d'exécution et de lier le script à une clé dans les paramètres.

source:

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

0
DmitrySemenov