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?
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?
Odpowiedzi:
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
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 :)
Próbowałem poniższych opcji po przywróceniu zapisanych ustawień, a tytuł został również przywrócony poprawnie.
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!!
Wypróbowałem jeszcze jedną opcję,
Zmieniłem swój domyślny tytuł dla Terminalu, aby używał wartości Intital w ~/.bashrc
zamiast zmiany ~/.profile
ustawień.
# 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-config
wszystkie nazwy kart są przywracane poprawnie. Możesz także zmieniać, jak chcesz i ponownie zapisywać karty !!
Znalazłem sposób na zrobienie tego, co moim zdaniem jest szybsze.
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ę workflow
i pojawia się Terminal z 3 kartami i tytułami, które wybrałem w definicji profilu, które są umieszczone na kartach.
W moim .bashrc
pliku umieściłem:
alias workflow='gnome-terminal --tab-with-profile=Git --tab-with-profile=Run | sublime-text &'
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
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
Oto rozwidlenie terminala xfce z możliwością zapisywania / przywracania sesji tylko z menu: https://github.com/repu1sion/xfce4-terminal
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.
Hyper ( https://github.com/zeit/hyper ) to dobra alternatywa dla wielu platform napisana w JavaScript i dołączona do Electron.
Jest PR, który doda obsługę zapisywania / przywracania sesji po wyjęciu z pudełka: https://github.com/zeit/hyper/pull/945