Un moyen rapide de sauvegarder et de restaurer les onglets de Terminal?

80

J'ai une fenêtre de terminal avec une douzaine d'onglets nommés ouverts.

Je voudrais enregistrer la configuration actuelle et la faire restaurer avec des noms et des répertoires.

Y a-t-il un moyen de faire cela?

faux
la source
Fonctionnalité très intéressante, mais je ne pense pas que ce soit disponible.
mardi
Quelle application de terminal utilisez-vous? Terminal Gnome? Konsole? etc.
gertvdijk
@gertvdijk: Celui appelé "Terminal". Je crois que c'est le gnome one.
faux
1
@false Btw., le Xfce won s'appelle également "Terminal". Pour les personnes intéressées, il est documenté à Xfce Goodies , projets: applications: terminal :)
Nostromov
2
Pour ce faire, votez à l' adresse bugzilla.gnome.org/show_bug.cgi?id=623986
Marius Andreiana le

Réponses:

44

Pour enregistrer la configuration dans /tmp/cfg:

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

Pour le recharger:

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

MISE À JOUR

Après avoir joué avec bash, j'ai créé le script suivant qui stocke également les noms d'onglets dans un fichier /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

Pour attribuer des noms correctement, vous devez l'exécuter à partir du premier onglet de votre terminal. Chargement en cours comme avant:

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

EXPLICATION:

Je peux utiliser ce qui suit pour obtenir le nom de l'onglet:

xprop -id $WINDOWID WM_NAME

Je peux utiliser ce qui suit pour accéder à l'onglet suivant:

xdotool key ctrl+Page_Down;

J'obtiens le nombre d'onglets après avoir enregistré le fichier de configuration que j'ai enregistré auparavant:

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

Je peux donc parcourir des onglets dans une boucle. Je dois ajouter l'entrée "Title = titlename" pour chaque section de configuration d'onglet dans le fichier enregistré auparavant. Pour ce faire, je crée d'abord un tableau de numéros de ligne où je vais ajouter des lignes.

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

J'ajoute la ligne "Title = titlename" à l'intérieur de la boucle, itérant sur les onglets:

sed -ri "$((${LINES[$i]}+$i))s/.*/&\nTitle=$TITLE/" /tmp/test 
Nykakin
la source
1
Vous voudrez peut-être regarder dans la commande d'écran. Je ne l'utilise pas, mais je crois qu'il peut sauvegarder et restaurer toutes sortes de sessions, même distantes.
Joe
1
Titre ne fonctionne pas? Assurez-vous que dans le menu Edition \ Préférences de profil l'onglet 'Titre et commande' 'lorsque les commandes du terminal définissent leurs propres titres:' GARDER LE TITRE INITIAL 'J'espère que cela vous aidera avec les problèmes de titre
Sentient
1
Quel est le comportement souhaité avec cette réponse? Pour moi, il enregistre les onglets, et je crois le répertoire de travail actuel. Mais cela n'enregistre pas les entrées et sorties précédentes. Le terminal OS X le fait.
Tyler Collier
11
gnome 3.18: L'option "--save-config" n'est plus prise en charge dans cette version de gnome-terminal.
Marius Andreiana
2
Ubuntu 16.04: L’option "--save-config" n’est plus supportée dans cette version de gnome-terminal.
Eugene Kulabuhov
12

Une alternative consiste simplement à utiliser Byobu . Appuyez sur F2 pour ouvrir de nouveaux terminaux. Utilisez F3 et F4 pour basculer entre les terminaux à gauche et à droite.

Fermez la fenêtre de l'interface graphique à tout moment. Lorsque vous rouvrez Byobu, tous vos terminaux sont restaurés :)

Ashwin Nanjappa
la source
1
Est-ce que ça marche après les redémarrages? Pour moi, il est réinitialisé après le redémarrage.
akshay2000
3
Cela ne fonctionne pas après les redémarrages
maxgalbu
1
Il ne rouvre pas tous les onglets ici, seulement le premier.
Leonardo Castro
3
Pourquoi est-ce encore plus voté comme réponse si cela ne fonctionne pas après les redémarrages?
killjoy
3

J'ai essayé les options ci-dessous après avoir restauré les paramètres enregistrés et le titre est également restauré correctement.

  1. Allez dans Paramètres-> Profils et sélectionnez le profil actuel que vous utilisez
  2. Cliquez sur Éditer et allez à l'onglet "Titre et commande"
  3. Rendre le titre initial vierge
  4. Sélectionnez l'option "Conserver le titre initial" dans la liste déroulante ci-dessous.

Cette option évite que votre titre initial ne soit écrasé.

Espérons que cela aide et un bon script en effet. Gagnez beaucoup de temps chaque fois que vous redémarrez et je peux facilement redémarrer ma boîte virtuelle fréquemment.

Merci!!

Yoga
la source
3

J'ai essayé une autre option,

J'ai changé le titre par défaut pour que Terminal utilise la valeur Intital ~/.bashrc, plutôt que de modifier les ~/.profileparamètres.

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

Si vous faites cela, il n'est pas nécessaire de changer votre profil de terminal.
Lorsque vous exécutez gnome-terminal --load-configtous les noms d'onglets sont restaurés correctement. Et vous pouvez aussi changer à votre guise et sauvegarder à nouveau les onglets !!

Yoga
la source
3

J'ai trouvé un moyen de le faire que je pense est plus rapide.

  1. Crée un profil avec le titre et le nom que vous voulez, comme le dit Yoga.
  2. Type:

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

J'ai fait un alias avec cette commande et cela a très bien fonctionné pour moi. Je viens de taper workflowet un terminal apparaît avec 3 onglets et les titres que j'ai choisis dans la définition du profil qui sont placés dans les onglets.

Sur mon .bashrcdossier j'ai placé:

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

Screen ou Byobu sont mes méthodes préférées de gestion de flux de travail complexes dans le terminal. Ils permettent tous deux d’enregistrer vos configurations.

orbatos
la source
1

Une petite amélioration au script existé qui vérifie également xdotool installé sur le système et ajoute une variable pour changer de chemin

#!/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
impulsion
la source
1

En développant la réponse de Nyakin ci-dessus, ce script fonctionnera pour plusieurs configurations de fenêtres et d'onglets et enregistrera correctement les titres d'onglets pour tous les onglets qui les contiennent.

Ceci est actuellement testé sur gnome-terminal 3.2 mais pourrait être configuré pour tout programme de terminal avec une fonctionnalité similaire de sauvegarde-configuration.

Cela nécessite les outils 'xprop', 'xdotool' et '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
la source
1

J'ai également cherché cette fonctionnalité dans le terminal Gnome mais je ne l'ai pas trouvée. La meilleure option que j'ai trouvée jusqu'à présent est d'utiliser la konsole. Il vous permet de marquer vos onglets afin que vous puissiez y revenir en les choisissant dans un menu de favoris. J'espère que ça aide.

fit
la source
0

Similaire à la méthode de Yoga, Éditer >> Préférences de profil >> Titre et commande >> Titre >> Lorsque les commandes du terminal définissent leurs propres titres: >> " Ajouter le titre initial au début "

Puis exécutez: gnome-terminaux --save-config = terminaux-cfg

fermer les fenêtres des terminaux

ouvrez un nouveau terminal et exécutez-y: gnome-terminaux --load-config = terminaux-cfg

Cela fonctionne bien pour moi, tous les titres sont conservés.

ImLeo
la source