Eine schnelle Möglichkeit, Registerkarten von Terminal zu speichern und wiederherzustellen?

80

Ich habe ein Terminalfenster mit einem Dutzend benannten Registerkarten geöffnet.

Ich möchte die aktuelle Konfiguration speichern und mit Namen und Verzeichnissen wiederherstellen lassen.

Gibt es eine Möglichkeit, dies zu tun?

falsch
quelle
Sehr interessantes Feature, aber ich glaube nicht, dass es verfügbar ist.
dlin
Welche Terminalanwendung verwenden Sie? Gnome-Terminal? Konsole? etc.
gertvdijk
@gertvdijk: Der mit dem Namen "Terminal". Ich glaube, es ist der Gnom.
Falsch
1
@false Btw., der gewonnene Xfce wird auch "Terminal" genannt. Für alle Interessierten ist es bei Xfce Goodies dokumentiert , Projekte: Anwendungen: Terminal :)
Nostromov
2
Um dies zu ermöglichen, stimmen Sie unter bugzilla.gnome.org/show_bug.cgi?id=623986
Marius Andreiana

Antworten:

44

So speichern Sie die Konfiguration in /tmp/cfg:

gnome-terminal --save-config=/tmp/cfg

So laden Sie es zurück:

gnome-terminal --load-config=/tmp/cfg 

AKTUALISIEREN

Nachdem ich mit Bash rumgespielt hatte, erstellte ich folgendes Skript, das auch Tab-Namen in Dateien speichert /tmp/test:

#!/usr/bin/env bash

gnome-terminal --save-config=/tmp/test

LINES=($(grep -n '\[Terminal' /tmp/test | cut -d: -f1))
for ((i=0; i<$(grep '\[Terminal' /tmp/test | wc -l); i++))
do
    TITLE=$(xprop -id $WINDOWID WM_NAME | sed -e 's/WM_NAME(STRING) = "//' -e 's/"$//';xdotool key ctrl+Page_Down;)
    sed -ri "$((${LINES[$i]}+$i))s/.*/&\nTitle=$TITLE/" /tmp/test 
done

Um Namen richtig zuzuweisen, müssen Sie sie auf der ersten Registerkarte Ihres Terminals ausführen. Laden wie bisher:

gnome-terminal --load-config=/tmp/test

ERLÄUTERUNG:

Ich kann Folgendes verwenden, um den Tab-Namen zu erhalten:

xprop -id $WINDOWID WM_NAME

Ich kann Folgendes verwenden, um zum nächsten Tab zu springen:

xdotool key ctrl+Page_Down;

Ich erhalte die Anzahl der Registerkarten, nachdem ich die zuvor gespeicherte Konfigurationsdatei durchsucht habe:

$(grep '\[Terminal' /tmp/test | wc -l)

So kann ich über Tabs innerhalb einer Schleife iterieren. Ich muss den Eintrag "Title = titlename" für jeden Registerkartenkonfigurationsabschnitt in der zuvor gespeicherten Datei hinzufügen. Dazu erstelle ich eine Reihe von Zeilennummern, in die ich Zeilen einfügen werde.

LINES=($(grep -n '\[Terminal' /tmp/test | cut -d: -f1))

Ich füge die Zeile "Title = titlename" in die Schleife ein, die über Tabulatoren iteriert:

sed -ri "$((${LINES[$i]}+$i))s/.*/&\nTitle=$TITLE/" /tmp/test 
Nykakin
quelle
1
Möglicherweise möchten Sie in den Bildschirmbefehl schauen. Ich benutze es nicht, aber ich glaube, es kann alle Arten von Sitzungen speichern und wiederherstellen - auch entfernte.
Joe
1
Titel funktioniert nicht? Stellen Sie sicher , dass im Menü Bearbeiten \ Profileinstellungen ‚die Registerkarte‚Titel und Befehl‘Wenn Terminal - Befehle ihre eigenen Titel festgelegt:‚HALTEN SIE ERSTE TITEL‘Hope this mit dem Titel Fragen hilft
Sentient
1
Was ist das beabsichtigte Verhalten mit dieser Antwort? Für mich werden die Registerkarten gespeichert, und ich glaube, das aktuelle Arbeitsverzeichnis. Die vorherige Eingabe und Ausgabe wird jedoch nicht gespeichert. Das OS X-Terminal macht das.
Tyler Collier
11
gnome 3.18: Die Option "--save-config" wird in dieser Version von gnome-terminal nicht mehr unterstützt.
Marius Andreiana
2
Ubuntu 16.04: Die Option "--save-config" wird in dieser Version von gnome-terminal nicht mehr unterstützt.
Eugene Kulabuhov
12

Eine Alternative ist, einfach Byobu zu verwenden . Drücken Sie F2, um neue Terminals darin zu öffnen. Verwenden Sie F3 und F4, um zwischen den Anschlüssen nach links und rechts zu wechseln.

Schließen Sie das GUI-Fenster, wann immer Sie möchten. Wenn Sie Byobu erneut öffnen, werden alle Ihre Terminals wiederhergestellt :)

Ashwin Nanjappa
quelle
1
Funktioniert das über Neustarts hinweg? Bei mir setzt es sich nach dem Neustart wieder zurück.
Akshay2000
3
Es funktioniert nicht über Neustarts
maxgalbu
1
Hier werden nicht alle Registerkarten geöffnet, sondern nur die erste.
Leonardo Castro
3
Warum wird dies sogar als Antwort gewertet, wenn es nicht über Neustarts hinweg funktioniert?
Killjoy
3

Ich habe die folgenden Optionen nach dem Wiederherstellen der gespeicherten Einstellungen ausprobiert und der Titel wird auch ordnungsgemäß wiederhergestellt.

  1. Gehen Sie zu Einstellungen-> Profile und wählen Sie das aktuelle Profil aus, das Sie verwenden
  2. Klicken Sie auf Bearbeiten und gehen Sie zur Registerkarte "Titel und Befehl"
  3. Machen Sie den ersten Titel leer
  4. Wählen Sie im Dropdown-Feld unten die Option "Ursprünglichen Titel behalten".

Diese Option verhindert, dass Ihr ursprünglicher Titelsatz überschrieben wird.

Hoffe das hilft und ein tolles Drehbuch in der Tat. Sparen Sie viel Zeit, wenn Sie neu starten, und ich kann meine virtuelle Box häufig neu starten.

Vielen Dank!!

Yoga
quelle
3

Ich habe noch eine Option ausprobiert,

Ich habe meinen Standardtitel für Terminal geändert, um den Intital-Wert in zu verwenden ~/.bashrc, anstatt die ~/.profileEinstellungen zu ändern .

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="$PS1"
    ;;
*)
    ;;
esac

In diesem Fall müssen Sie Ihr Terminalprofil nicht ändern.
Wenn Sie ausführen, werden gnome-terminal --load-configalle Registerkartennamen ordnungsgemäß wiederhergestellt. Und Sie können auch nach Belieben ändern und die Registerkarten erneut speichern !!

Yoga
quelle
3

Ich habe einen Weg gefunden, der meiner Meinung nach schneller ist.

  1. Erstellt ein Profil mit dem Titel und dem Namen, den Sie möchten, wie Yoga sagte.
  2. Art:

    gnome-terminal --tab-with-profile=PROFILENAME1 --tab-with-profile=PROFILENAME2 ... --tab-with-profile=PROFILENAME999
    

Ich habe mit diesem Befehl einen Alias ​​erstellt und es hat für mich ganz gut funktioniert. Ich tippe nur workflowund ein Terminal erscheint mit 3 Registerkarten und den Titeln, die ich in der Profildefinition gewählt habe, die in den Registerkarten platziert sind.

Auf meine .bashrcAkte habe ich gesetzt:

alias workflow='gnome-terminal --tab-with-profile=Git --tab-with-profile=Run | sublime-text &'
giacobo1
quelle
1

Bildschirm oder Byobu sind meine bevorzugten Methoden zum Verwalten komplexer Workflows im Terminal, und beide ermöglichen das Speichern Ihrer Konfigurationen.

Orbatos
quelle
1

Eine kleine Verbesserung des vorhandenen Skripts, das auch das auf dem System installierte xdotool überprüft und Variablen zum Ändern des Pfads hinzufügt

#!/bin/bash

SAVEPATH=/tmp/termprofile

if [ ! -f /usr/bin/xdotool ]; then
        echo "please install 'xdotool'"
        exit 1
fi

gnome-terminal --save-config=$SAVEPATH

LINES=($(grep -n '\[Terminal' $SAVEPATH | cut -d: -f1))
for ((i=0; i<$(grep '\[Terminal' $SAVEPATH | wc -l); i++))
do
    TITLE=$(xprop -id $WINDOWID WM_NAME | sed -e 's/WM_NAME(STRING) = "//' -e 's/"$//';xdotool key ctrl+Page_Down;)
    sed -ri "$((${LINES[$i]}+$i))s/.*/&\nTitle=$TITLE/" $SAVEPATH
done
Impuls
quelle
1

Dieses Skript erweitert Nyakins Antwort oben und funktioniert für mehrere Fenster- und Registerkartenkonfigurationen. Es speichert die Registerkartentitel für alle Registerkarten, auf denen sie enthalten sind, korrekt.

Dies wird derzeit auf gnome-terminal 3.2 getestet, kann jedoch für jedes Terminalprogramm mit einer ähnlichen Funktion zum Speichern der Konfiguration konfiguriert werden.

Dies erfordert die Tools 'xprop', 'xdotool' und 'wmctrl'.

Code:

#!/usr/bin/env bash

FILE="$1"
gnome-terminal --save-config=$FILE

WINDOWLINES=$(wmctrl -lx | grep gnome-terminal.Gnome-terminal)
WINDOWNUM=$(echo "$WINDOWLINES" | wc -l)
TABLISTS=$(grep "^Terminals" $FILE)

for ((i=1; i<=$WINDOWNUM; i++))
do
    WINDOWLINE=$(echo "$WINDOWLINES" | sed -n "$i{p;q}")
    WINDOW_ID=$(echo "$WINDOWLINE" | cut -d' ' -f1)
    #Switch to window
    wmctrl -i -a $WINDOW_ID

    LINE=$(echo "$TABLISTS" | sed -n "$i{p;q}"); LINE=${LINE#Terminals=}
    TERMINALNUM=$(echo "$LINE" | grep -o ';' | wc -l)
    #go to first tab of the window if more than 1
    [ $TERMINALNUM -gt 1 ] && xdotool key alt+1 && sleep .1

    for tab in ${LINE//;/ }
    do
        #Get the current tab title
        TITLE=$(xprop -id $WINDOW_ID WM_NAME | sed -e 's/WM_NAME(STRING) = "//' -e 's/"$//')
        #Insert it into the config file
        [ "$TITLE" == "${TITLE//WM_NAME/}" ] && sed -ri "/\[${tab}\]/aTitle=${TITLE}" $FILE
        #Move to the next tab in the window
        xdotool key ctrl+Page_Down
    done
done
Bobby Jones
quelle
1

Ich habe auch nach dieser Funktion im Gnome-Terminal gesucht, sie aber nicht gefunden. Die beste Option, die ich bisher gefunden habe, ist die Verwendung von Konsolen. Sie können Ihre Registerkarten mit Lesezeichen versehen, sodass Sie zu ihnen zurückkehren können, indem Sie sie aus einem Lesezeichenmenü auswählen. Ich hoffe das hilft.

Fitsum
quelle
0

Ähnlich wie bei Yoga: Bearbeiten >> Profileinstellungen >> Titel und Befehl >> Titel >> Wenn Terminalbefehle ihre eigenen Titel festlegen : >> " Anfangs-Titel voranstellen "

Führen Sie dann Folgendes aus : gnome-terminals --save-config = terminals-cfg

Terminalfenster schließen

öffne ein neues Terminal und führe darin aus: gnome-terminals --load-config = terminals-cfg

Funktioniert gut für mich, alle Titel behalten.

ImLeo
quelle
0

Hyper ( https://github.com/zeit/hyper ) ist eine gute plattformübergreifende Alternative, die in JavaScript geschrieben und mit Electron gebündelt ist.

Es gibt einen PR, der die Unterstützung für das Speichern / Wiederherstellen von Sitzungen von Anfang an hinzufügt: https://github.com/zeit/hyper/pull/945

Eugene Kulabuhov
quelle