Vraag Een snelle manier om tabbladen van Terminal op te slaan en te herstellen?


Ik heb een terminalvenster met een dozijn tabbladen met namen.

Ik wil de huidige configuratie opslaan en deze laten herstellen met namen en mappen.

Is er een manier om dit te doen?


70
2018-06-20 16:31


oorsprong


Zeer interessante functie, maar ik denk niet dat die beschikbaar is. - dlin
Welke terminal-applicatie gebruikt u? Gnome terminal? Konsole? enz. - gertvdijk
@gertvdijk: de zogenaamde "Terminal". Ik geloof dat het de kabouter is. - false
@false Btw., de gewonnen Xfce is ook "Terminal" genoemd. Voor iedereen die geïnteresseerd is, is het gedocumenteerd op Xfce Goodies , projecten: toepassingen: terminal :) - Nostromov
Om dit mogelijk te maken, stem je op bugzilla.gnome.org/show_bug.cgi?id=623986 - Marius Andreiana


antwoorden:


Om de configuratie op te slaan /tmp/cfg:

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

Om het terug te laden:

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

BIJWERKEN

Na het spelen met bash, heb ik het volgende script gemaakt waarin de tabnamen in het bestand worden opgeslagen /tmp/test ook:

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

Om namen correct toe te wijzen, moet u het vanaf het eerste tabblad van uw terminal uitvoeren. Het laden van hetzelfde als hiervoor:

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

UITLEG:

Ik kan het volgende gebruiken om een ​​tab-naam te krijgen:

xprop -id $WINDOWID WM_NAME

Ik kan het volgende gebruiken om naar het volgende tabblad te gaan:

xdotool key ctrl+Page_Down;

Ik krijg een aantal tabbladen na het configuratiebestand van de grepping dat ik eerder heb opgeslagen:

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

Ik kan dus de tabbladen in een lus herhalen. Ik moet "Title = titlename" -vermelding toevoegen voor elke tabbladconfiguratiesectie in het bestand dat eerder is opgeslagen. Om dit te doen, maak ik eerst een reeks regelnummers waarin ik lijnen toevoeg.

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

Ik voeg de regel "Title = titlename" aan de binnenkant van de lus toe, itererend over tabbladen:

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

44
2018-06-20 19:04



Misschien wilt u de opdracht op het scherm bekijken. Ik gebruik het niet, maar ik geloof dat het allerlei sessies kan redden en herstellen, zelfs op afstand. - Joe
Titel werkt niet? Zorg ervoor dat in het menu Bewerken \ Profielvoorkeuren het tabblad 'Titel en Opdracht' 'Wanneer terminalopdrachten hun eigen titels instellen:' HOUD EERSTE TITEL 'Hoop dat dit helpt bij titelproblemen - Sentient
Wat is het bedoelde gedrag met dit antwoord? Voor mij slaat het de tabbladen op, en ik geloof de huidige werkdirectory. Maar het slaat de vorige invoer en uitvoer niet op. De OS X-terminal doet dat. - Tyler Collier
gnome 3.18: Optie "--save-config" wordt niet langer ondersteund in deze versie van gnome-terminal. - Marius Andreiana
als iemand anders het niet wist, /tmp wordt gewist na een herstart. Dus als u de terminalconfiguratie na een herstart wilt behouden, sla dan ergens anders op. - Matthias


Een alternatief is om het gewoon te gebruiken byobu. Druk op F2 om nieuwe klemmen binnenin te openen. Gebruik F3 en F4 om naar links en rechts tussen terminals te schakelen.

Sluit het GUI-venster wanneer u maar wilt. Wanneer u Byobu opnieuw opent, worden al uw terminals hersteld :)


12
2017-07-05 04:40



Werkt het over opnieuw opstarten? Voor mij wordt het opnieuw ingesteld na opnieuw opstarten. - akshay2000
Het werkt niet over opnieuw opstarten - maxgalbu
Het opent niet alle tabbladen hier, alleen de eerste. - Leonardo Castro
Waarom is dit zelfs upmept als een antwoord als het niet werkt bij het opnieuw opstarten ?? - killjoy


Ik probeerde de onderstaande opties na het herstellen van de opgeslagen instellingen en de titel is ook goed hersteld.

  1. Ga naar Instellingen-> Profielen en selecteer het huidige profiel dat u gebruikt
  2. Klik op Bewerken en ga naar het tabblad "Titel en opdracht"
  3. Maak oorspronkelijke titel leeg
  4. Selecteer "Keep Initial Title" Option in de onderstaande vervolgkeuzelijst.

Met deze optie wordt voorkomen dat uw oorspronkelijke titelset wordt overschreven.

Hope This helps and a great script indeed. Bespaar veel tijd wanneer u opnieuw opstart en ik kan mijn virtuele box graag opnieuw opstarten.

Bedankt!!


3
2017-12-07 04:57





Ik heb nog een optie geprobeerd,

Ik heb mijn standaardtitel voor Terminal gewijzigd om de Intital-waarde in te gebruiken ~/.bashrc, in plaats van het veranderen van de ~/.profile instellingen.

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

Als u dit doet, hoeft u uw terminalprofiel niet te wijzigen.
Wanneer je uitvoert gnome-terminal --load-config alle tabnamen worden correct hersteld. En je kunt ook veranderen zoals je wilt en de tabbladen opnieuw opslaan !!


3
2017-12-11 01:56





Ik vond een manier om het te doen waarvan ik denk dat het sneller is.

  1. Creëert een profiel met de titel en de naam die je wilt, zoals Yoga zei.
  2. Type:

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

Ik maakte een alias met dit commando en het werkte prima voor mij. Ik typ gewoon workflow en een terminal verschijnt met 3 tabbladen en de titels die ik heb gekozen in de profieldefinitie die in de tabbladen zijn geplaatst.

Op mijn .bashrc bestand dat ik heb geplaatst:

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

3
2017-12-27 03:01





Scherm of Byobu zijn mijn voorkeursmethoden voor het beheren van complexe workflows in de terminal en beide maken het mogelijk uw configuraties op te slaan.


1
2017-09-24 09:08





Een kleine verbetering van het bestaande script dat ook xdotool op het systeem controleert en een variabele toevoegt voor het wijzigen van het pad

#!/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
2017-09-24 22:53





Uitbreiding op Nyakin's antwoord hierboven, dit script zal werken voor meerdere venster- en tabconfiguraties en correct tabtitels bewaren voor alle tabbladen die ze hebben.

Dit wordt momenteel getest op gnome-terminal 3.2 maar kan worden geconfigureerd voor elk terminalprogramma met een vergelijkbare save-config-functionaliteit.

Dit vereist de gereedschappen 'xprop', 'xdotool' en '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

1
2017-08-04 19:49