Jakiś szybki sposób zapisywania i przywracania kart terminalu?


80

Mam otwarte okno terminalu z kilkoma nazwanymi zakładkami.

Chciałbym zapisać bieżącą konfigurację i przywrócić ją przy użyciu nazw i katalogów.

Czy jest na to sposób?


Bardzo interesująca funkcja, ale nie sądzę, że jest dostępna.
dlin

Jakiej aplikacji terminalowej używasz? Terminal gnomów? Konsole? itp.
gertvdijk,

@gertvdijk: Ten o nazwie „Terminal”. Wierzę, że to jest gnom.
false

1
@false Btw., Xfce wygrał również nazywa się „Terminal”. Dla wszystkich zainteresowanych jest to udokumentowane w Xfce Goodies , projekty: aplikacje: terminal :)
Nostromov

2
Aby było to możliwe, głosuj na bugzilla.gnome.org/show_bug.cgi?id=623986
Marius Andreiana

Odpowiedzi:


44

Aby zapisać konfigurację w /tmp/cfg:

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

Aby ponownie załadować:

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

AKTUALIZACJA

Po zabawie z bash stworzyłem następujący skrypt, który przechowuje również nazwy kart w pliku /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

Aby poprawnie przypisać nazwy, musisz uruchomić je z pierwszej zakładki terminala. Ładowanie takie samo jak poprzednio:

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

WYJAŚNIENIE:

Aby uzyskać nazwę karty, mogę użyć następujących poleceń:

xprop -id $WINDOWID WM_NAME

Mogę użyć następujących elementów, aby przejść do następnej karty:

xdotool key ctrl+Page_Down;

Otrzymuję liczbę zakładek po zapisaniu pliku konfiguracyjnego grep, który wcześniej zapisałem:

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

Mogę więc iterować zakładki wewnątrz pętli. Muszę dodać wpis „Title = nazwa tytułu” dla każdej sekcji konfiguracji karty w zapisanym wcześniej pliku. Aby to zrobić, najpierw tworzę tablicę numerów linii, do której dodam linie.

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

Dodam wiersz „Title = nazwa tytułu” wewnątrz pętli iterującej się po kartach:

sed -ri "$((${LINES[$i]}+$i))s/.*/&\nTitle=$TITLE/" /tmp/test 

1
Możesz zajrzeć do polecenia ekranowego. Nie używam go, ale wierzę, że może zapisywać i przywracać wszelkiego rodzaju sesje - nawet te zdalne.
Joe

1
Tytuł nie działa? Upewnij się, że w menu Edycja \ Preferencje profilu zakładka „Tytuł i polecenie” Gdy polecenia terminala ustawiają własne tytuły: „ZACHOWAJ TYTUŁ TYTUŁU” Mam nadzieję, że to pomaga w kwestiach dotyczących tytułu
Wysłano

1
Jakie jest zamierzone zachowanie z tą odpowiedzią? Dla mnie zapisuje zakładki i uważam, że bieżący katalog roboczy. Ale nie zapisuje poprzedniego wejścia i wyjścia. Terminal OS X to robi.
Tyler Collier

11
gnome 3.18: Opcja „--save-config” nie jest już obsługiwana w tej wersji gnome-terminal.
Marius Andreiana

2
Ubuntu 16.04: Opcja „--save-config” nie jest już obsługiwana w tej wersji gnome-terminal.
Eugene Kulabuhov

12

Alternatywą jest po prostu użycie Byobu . Naciśnij F2, aby otworzyć nowe terminale w nim. Użyj F3 i F4, aby przełączać lewy i prawy między zaciskami.

Zamknij okno GUI w dowolnym momencie. Po ponownym otwarciu Byobu wszystkie terminale zostaną przywrócone :)


1
Czy działa przy ponownym uruchomieniu? Dla mnie resetuje się ponownie po ponownym uruchomieniu.
akshay2000

3
Nie działa przy
ponownym

1
Nie powoduje to ponownego otwarcia wszystkich kart tutaj, tylko pierwszej.
Leonardo Castro

3
Dlaczego jest to nawet oceniane jako odpowiedź, jeśli nie działa po ponownym uruchomieniu?
killjoy

3

Próbowałem poniższych opcji po przywróceniu zapisanych ustawień, a tytuł został również przywrócony poprawnie.

  1. Przejdź Ustawienia-> Profile i wybierz w bieżącym profilu, którego używasz
  2. Kliknij Edytuj i przejdź do zakładki „Tytuł i polecenie”
  3. Pozostaw początkowy tytuł pusty
  4. Wybierz opcję „Zachowaj początkowy tytuł” ​​w rozwijanym polu poniżej.

Ta opcja pozwala uniknąć zastąpienia początkowego tytułu.

Mam nadzieję, że to pomaga i naprawdę świetny skrypt. Zaoszczędź dużo czasu za każdym razem, gdy ponownie się uruchamiasz i mogę z radością często restartować moje wirtualne urządzenie.

Dzięki!!


3

Wypróbowałem jeszcze jedną opcję,

Zmieniłem swój domyślny tytuł dla Terminalu, aby używał wartości Intital w ~/.bashrczamiast zmiany ~/.profileustawień.

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

Jeśli to zrobisz, nie musisz zmieniać profilu terminalu.
Po uruchomieniu gnome-terminal --load-configwszystkie nazwy kart są przywracane poprawnie. Możesz także zmieniać, jak chcesz i ponownie zapisywać karty !!


3

Znalazłem sposób na zrobienie tego, co moim zdaniem jest szybsze.

  1. Tworzy profil z tytułem i nazwiskiem, które chcesz powiedzieć Joga.
  2. Rodzaj:

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

Za pomocą tego polecenia utworzyłem alias i działało to dla mnie całkiem dobrze. Po prostu piszę workflowi pojawia się Terminal z 3 kartami i tytułami, które wybrałem w definicji profilu, które są umieszczone na kartach.

W moim .bashrcpliku umieściłem:

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

1

Screen lub Byobu to moje preferowane metody zarządzania złożonym przepływem pracy w terminalu i oba pozwalają na zapisywanie konfiguracji.


1

Trochę ulepszenia istniejącego skryptu, który sprawdza również xdotool zainstalowany w systemie i dodaje zmienną do zmiany ścieżki

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

1

Rozszerzając powyższą odpowiedź Nyakina, ten skrypt będzie działał w wielu konfiguracjach okien i kart i poprawnie zapisze tytuły kart dla wszystkich kart, które je mają.

Jest to obecnie testowane na gnome-terminal 3.2, ale można go skonfigurować dla dowolnego programu terminalowego o podobnej funkcjonalności save-config.

Wymaga to narzędzi „xprop”, „xdotool” i „wmctrl”.

Kod:

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

1

Szukałem również tej funkcji w terminalu Gnome, ale nie mogłem jej znaleźć. Najlepszą opcją, jaką do tej pory znalazłem, jest użycie konsoli. Umożliwia tworzenie zakładek do zakładek, dzięki czemu można do nich wrócić, wybierając je z menu zakładek. Mam nadzieję, że to pomoże.



0

Podobnie do metody Jogi: Edycja >> Preferencje profilu >> Tytuł i polecenie >> Tytuł >> Gdy polecenia terminalu ustawiają własne tytuły: >> „ Przygotuj tytuł początkowy

Następnie wykonaj: gnome-terminale --save-config = terminale-cfg

zamknij okna terminali

otwórz nowy terminal i wykonaj w nim: gnome-terminale --load-config = terminale-cfg

Działa dobrze dla mnie, wszystkie tytuły zachowane.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.