Wie lade ich das letzte Terminalfenster mit einer Tastenkombination?

11

Ich benutze Terminal so oft, um schnelle Befehle zu machen und dann lasse ich es im Hintergrund, so dass ich am Ende mehr als 20 Terminalsitzungen geöffnet bekomme, während ich arbeite. Dies liegt daran, dass es sehr schnell ist, einfach die Tastenkombination zu verwenden und einen Befehl einzugeben.

Gibt es eine Möglichkeit, den Shortcut-Key einzurichten, damit ich mein letztes Terminal-Fenster öffne, anstatt ein neues zu erstellen?

    
Klik 19.03.2015, 15:49
quelle

7 Antworten

13

Ich habe ein Terminal an meiner Unity-Launcher-Sidebar auf Position 10 angeheftet. Auf diese Weise kann ich Super + 0 drücken, um auf das Launcher-Icon zu klicken Terminalfenster nach oben.

Wenn es im Launcher für Sie in Ordnung ist (eine der ersten 10 Positionen, sonst wird es keine Verknüpfung bekommen!), wird dies funktionieren.

    
Byte Commander 19.03.2015, 15:56
quelle
10

Ich benutze guake und bin sehr zufrieden damit. Drücken Sie F12, ein Terminalfenster erscheint, drücken Sie erneut F12, es verschwindet, läuft aber im Hintergrund weiter. Außerdem: sieht wirklich cool aus.

    
Jos 19.03.2015 16:09
quelle
6

Sie können das folgende Skript unter eine Tastenkombination setzen. Wenn Sie die Tastenkombination drücken, werden die Terminalfenster komplett ausgeblendet. Drücken Sie es erneut, sie werden wieder genau in dem Zustand auftauchen, wie Sie ihn hatten.

Sie müssen nur einmal (einmalig) den identifizierenden String im Fensternamen Ihres Terminals hinzufügen (das Terminalfenster hat in den meisten Fällen denselben Namen)

Um es zu benutzen

Installiere sowohl xdotool als auch wmctrl :

sudo apt-get install xdotool
sudo apt-get install wmctrl
  1. Kopiere das Skript in eine leere Datei und speichere es als hide_terminal.py
  2. Legen Sie im Kopfbereich die identifizierende Zeichenfolge für den Namen des Terminalfensters fest
  3. Führen Sie es unter einer Tastenkombination aus:

    python3 /path/to/hide_terminal.py
    

Das Skript

#!/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
    
Jacob Vlijm 19.03.2015 16:14
quelle
5

Das ist die gleiche Antwort wie Jacob Vlijm, nur in der Bash geschrieben:

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

Wenn Sie es als ~/bin/show_hide.sh speichern, können Sie es ausführen, indem Sie die identifizierende Zeichenfolge eines Fensters angeben, das Sie ausblenden möchten. Wenn keine Zeichenfolge angegeben wird, funktioniert sie in Terminal :

show_hide.sh Terminal
    
terdon 19.03.2015 20:56
quelle
1

Ich verwende gnome-shell mit der Erweiterung 'Drop Down Terminal', die Standardverknüpfung ist TAB , aber sie kann leicht geändert werden.

    
perdigueiro 20.03.2015 00:20
quelle
1

Dieser einfache Befehl wmctrl wird ein Fenster mit einer gegebenen Zeichenfolge im Titel auslösen oder wenn kein Fenster vorhanden ist, das die Zeichenfolge enthält, führen Sie einen Befehl aus.

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

zB für gedit kann ich

benutzen
wmctrl -a gedit || gedit

Um eine geeignete Zeichenfolge für Ihr Anwendungsfenster zu finden, öffnen Sie Ihre Anwendung und führen Sie

aus
wmctrl -l
    
Glen.S 24.03.2015 00:01
quelle
0

Der folgende Ansatz funktionierte für mich:

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

Geben Sie ihm dann Ausführungsberechtigungen und binden Sie das Skript an einen Schlüssel in den Einstellungen.

Quelle:

Link

    
DmitrySemenov 20.01.2017 21:24
quelle

Tags und Links