Terminal sekmelerini kaydetmek ve geri yüklemek için hızlı bir yol?


80

Sekmeleri açık adlı bir düzine Terminal pencerem var.

Geçerli yapılandırmayı kaydetmek ve adlarla ve dizinlerle geri yüklemek istiyorum.

Bunu yapmanın bir yolu var mı?


Çok ilginç bir özellik, ancak bunun uygun olduğunu sanmıyorum.
34'te dlin

Hangi terminal uygulamasını kullanıyorsunuz? GNOME terminali? Konsole? vb
gertvdijk

@gertvdijk: "Terminal" adı verilen. Bunun cüceli olduğuna inanıyorum.
Yanlış

1
@ false Btw., kazandı Xfce de "Terminal" denir. İlgilenen herkes için Xfce Goodies belgesinde belgelendirildi , projeler: uygulamalar: terminal :)
Nostromov

Yanıtlar:


44

Yapılandırmayı içine kaydetmek için /tmp/cfg:

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

Geri yüklemek için:

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

GÜNCELLEME

Bash ile oynadıktan sonra sekme adlarını da dosyaya koyan aşağıdaki betiği oluşturdum /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

İsimleri doğru bir şekilde atamak için, terminalinizin ilk sekmesinden çalıştırmanız gerekir. Daha önce olduğu gibi aynı yükleniyor:

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

AÇIKLAMA:

Sekme adı almak için aşağıdakileri kullanabilirim:

xprop -id $WINDOWID WM_NAME

Bir sonraki sekmeye atlamak için aşağıdakileri kullanabilirim:

xdotool key ctrl+Page_Down;

Daha önce kaydettiğim yapılandırma dosyasını grepping yaptıktan sonra sekme sayısı alıyorum:

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

Böylece bir döngü içindeki sekmeleri yineleyebilirim. Daha önce kaydedilen dosyadaki her sekme yapılandırma bölümü için "Title = titlename" girdisini eklemem gerekiyor. Bunu yapmak için, öncelikle satır ekleyeceğim satır sayıları dizisi oluşturuyorum.

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

Sekmelerin üzerinde yinelenen döngü içinde "Title = titlename" satırı ekliyorum:

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

1
Ekran komutuna bakmak isteyebilirsiniz. Kullanmıyorum, ancak her türlü oturumu kurtarabilir ve geri yükleyebilir - uzaktakileri bile.
Joe

1
Başlık çalışmıyor mu? Düzen \ Profil Tercihleri ​​menüsünde 'Başlık ve Komut' 'sekmesini tercih ettiğinizden emin olun. Terminal komutları kendi başlıklarını belirlediklerinde:' KİTE BAŞLATMA BAŞLIĞI 'Bu başlık başlıklarında yardımcı olur
Sentient

1
Bu cevapta amaçlanan davranış nedir? Benim için sekmeleri kaydeder ve şu anki çalışma dizinine inanıyorum. Ancak önceki giriş ve çıkışı kaydetmez. OS X terminali bunu yapar.
Tyler Collier,

11
gnome 3.18: "- save-config" seçeneği artık gnome terminalinin bu sürümünde desteklenmiyor.
Marius Andreiana 14:15

2
Ubuntu 16.04: Seçenek "--save-config" artık gnome-terminalinin bu versiyonunda desteklenmiyor.
Eugene Kulabuhov

12

Bir alternatif sadece Byobu'yu kullanmaktır . Yeni terminalleri açmak için F2'ye basın. Terminaller arasında sola ve sağa geçiş yapmak için F3 ve F4 tuşlarını kullanın.

İstediğiniz zaman GUI penceresini kapatın. Byobu'yu yeniden açtığınızda tüm terminalleriniz geri yüklenir :)


1
Yeniden başlatmalar arasında çalışır mı? Benim için, yeniden başlattıktan sonra sıfırlanır.
akshay2000

3
Bu yeniden başlatmalar arasında çalışmaz
maxgalbu 15:15

1
Buradaki tüm sekmeleri yeniden açmaz, yalnızca birincisini açar.
Leonardo Castro

3
Yeniden başlatmalar arasında işe yaramazsa, bu neden bir cevap olarak daha da geliştirildi?
killjoy

3

Kaydedilen ayarları geri yükledikten sonra aşağıdaki seçenekleri denedim ve Başlık da uygun şekilde geri yüklendi.

  1. Ayarlar-> Profiller'e gidin ve kullandığınız Geçerli Profili seçin.
  2. Düzenle ve Git "Başlık ve komut" sekmesine tıklayın
  3. İlk Başlığı Boş Yap
  4. Aşağıdaki açılır kutuda "İlk Başlığı Koru" Seçeneğini seçin.

Bu seçenek başlangıç ​​başlığınızın üzerine yazılmasını önler.

Umut Bu gerçekten yardımcı olur ve harika bir senaryo. Her yeniden başlattığınızda çok fazla zaman kazanın ve sanal kutumu sık sık yeniden başlatabilirim.

Teşekkürler!!


3

Bir seçenek daha denedim.

Terminal için varsayılan başlığımı ~/.bashrc, ~/.profileayarları değiştirmek yerine Intital değerini kullanması için değiştirdim .

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

Bunu yaparsanız, Terminal Profilinizi değiştirmenize gerek yoktur. Tüm sekmeleri
yürüttüğünüzde gnome-terminal --load-configisimler uygun şekilde geri yüklenir. Ayrıca istediğiniz gibi değiştirebilir ve sekmeleri tekrar kaydedebilirsiniz!


3

Bunu yapmanın daha hızlı olduğunu düşündüğüm bir yol buldum.

  1. Yoga'nın dediği gibi, ismi ve ismi ile bir profil oluşturur.
  2. Tür:

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

Bu komutla bir takma ad yaptım ve bu benim için gayet iyi çalıştı. Sadece yazıyorum workflowve 3 sekmeli bir Terminal ve sekmelerde yer alan profil tanımında seçtiğim başlıklar beliriyor.

Dosyama .bashrcyerleştirdim:

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

1

Ekran veya Byobu terminaldeki karmaşık iş akışını yönetmek için tercih ettiğim yöntemlerdir ve her ikisi de yapılandırmalarınızı kaydetmenize izin verir.


1

Sistemde yüklü olan xdotool'u kontrol eden ve değişen yol için değişken ekleyen varolan komut dosyasında küçük bir gelişme

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

Nyakin'in cevabını yukarıda açıklayan bu komut dosyası, birden çok pencere ve sekme yapılandırması için çalışacak ve bunlara sahip olan tüm sekmeler için sekme başlıklarını doğru şekilde kaydedecektir.

Bu şu anda gnome-terminal 3.2'de test edilmiştir ancak benzer bir save-config işlevselliğine sahip herhangi bir terminal programı için yapılandırılabilir.

Bu, 'xprop', 'xdotool' ve 'wmctrl' araçlarını gerektirir.

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

Ayrıca Gnome terminalinde bu özelliği aradım ama bulamadım. Şimdiye kadar bulduğum en iyi seçenek konsole kullanmak. Sekmelerinizi yer imlerine eklemenizi sağlar, böylece yer imleri menüsünden bunları seçerek tekrar geri dönebilirsiniz. Umarım bu yardımcı olur.



0

Yoga yöntemine benzer şekilde, Düzenle >> Profil Tercihleri ​​>> Başlık ve Komut >> Başlık >> Terminal komutları kendi başlıklarını belirlediklerinde: >> " Prepend initial title "

Sonra yürütün: gnome-terminaller --save-config = terminals-cfg

terminal pencerelerini kapat

yeni bir terminal açın ve bunun içinde: gnome-terminals --load-config = terminals-cfg

Benim için iyi çalışıyor, tüm başlıkları tuttu.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.