Какой-нибудь быстрый способ сохранить и восстановить вкладки терминала?

80

У меня есть окно терминала с дюжиной открытых вкладок.

Я хотел бы сохранить текущую конфигурацию и восстановить ее с именами и каталогами.

Есть ли способ сделать это?

ложный
источник
Очень интересная функция, но я не думаю, что это доступно.
Длин
Какое терминальное приложение вы используете? Терминал гномов? Konsole? и т. д.
gertvdijk
@gertvdijk: Тот, который называется «Терминал». Я считаю, что это гном.
ложь
1
@false Кстати, Xfce Won также называется «Терминал». Для всех, кто интересуется, это задокументировано на Xfce Goodies , проекты: Applications: Terminal :)
Nostromov
2
Чтобы сделать это возможным, проголосуйте по адресу bugzilla.gnome.org/show_bug.cgi?id=623986
Мариус Андреяна

Ответы:

44

Чтобы сохранить конфигурацию в /tmp/cfg:

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

Чтобы загрузить его обратно:

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

ОБНОВИТЬ

После игры с bash я создал следующий скрипт, который также сохраняет имена вкладок в файл /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

Чтобы правильно назначить имена, вы должны запустить его с первой вкладки вашего терминала. Загрузка такая же, как и раньше:

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

ОБЪЯСНЕНИЕ:

Я могу использовать следующее, чтобы получить имя вкладки:

xprop -id $WINDOWID WM_NAME

Я могу использовать следующее, чтобы перейти к следующей вкладке:

xdotool key ctrl+Page_Down;

Я получаю количество вкладок после grepping файла конфигурации, который я сохранил ранее:

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

Так что я могу перебирать вкладки внутри цикла. Я должен добавить запись "Title = titlename" для каждого раздела конфигурации вкладки в файле, сохраненном ранее. Для этого сначала я создаю массив номеров строк, в который я буду добавлять строки.

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

Я добавляю строку "Title = titlename" внутри цикла итерации по вкладкам:

sed -ri "$((${LINES[$i]}+$i))s/.*/&\nTitle=$TITLE/" /tmp/test 
Nykakin
источник
1
Вы можете посмотреть на экранную команду. Я не использую его, но я верю, что он может сохранять и восстанавливать все виды сеансов, даже удаленных.
Джо
1
Название не работает? Убедитесь, что в меню «Правка» \ «Настройки профиля» имеется вкладка «Заголовок и команда». Когда терминальные команды устанавливают свои собственные заголовки: «СОХРАНИТЬ НАЧАЛЬНОЕ НАЗВАНИЕ». Надеюсь, это поможет с проблемами с заголовками
Sentient
1
Каково предполагаемое поведение с этим ответом? Для меня это сохраняет вкладки, и я считаю текущий рабочий каталог. Но это не сохраняет предыдущий ввод и вывод. Терминал OS X делает это.
Тайлер Коллиер
11
GNOME 3.18: опция "--save-config" больше не поддерживается в этой версии терминала GNOME.
Мариус Андреяна
2
Ubuntu 16.04: опция "--save-config" больше не поддерживается в этой версии gnome-терминала.
Евгений Кулабухов
12

Альтернативой является просто использовать Byobu . Нажмите F2, чтобы открыть новые терминалы внутри него. Используйте F3 и F4 для переключения влево и вправо между клеммами.

Закройте окно GUI в любое время. При повторном открытии Byobu все ваши терминалы будут восстановлены :)

Эшвин Нанджаппа
источник
1
Это работает через перезагрузки? Для меня он сбрасывается обратно после перезагрузки.
akshay2000
3
Не работает через перезагрузки
maxgalbu
1
Здесь не открываются все вкладки, только первая.
Леонардо Кастро
3
Почему это даже проголосовало как ответ, если это не работает через перезагрузки ??
killjoy
3

Я попробовал перечисленные ниже варианты после восстановления сохраненных настроек, и название также было восстановлено должным образом.

  1. Зайдите в Настройки-> Профили и выберите текущий профиль, который вы используете
  2. Нажмите на Редактировать и перейдите на вкладку «Название и команда»
  3. Сделать начальный заголовок пустым
  4. Выберите опцию «Сохранить начальный заголовок» в раскрывающемся списке ниже.

Эта опция позволяет избежать перезаписи исходного набора заголовков.

Надеюсь, что это помогает и отличный сценарий действительно. Экономьте много времени всякий раз, когда вы перезагружаетесь, и я могу с радостью часто перезагружать виртуальную коробку

Спасибо!!

йога
источник
3

Я попробовал еще один вариант,

Я изменил заголовок по умолчанию для терминала, чтобы использовать значение Inital ~/.bashrcвместо изменения ~/.profileнастроек.

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

Если вы сделаете это, вам не нужно менять свой профиль терминала.
При выполнении gnome-terminal --load-configвсе имена вкладок восстанавливаются правильно. И вы также можете изменить, как вам нравится, и снова сохранить вкладки!

йога
источник
3

Я нашел способ сделать это, я думаю, быстрее.

  1. Создает профиль с названием и именем, которое вы хотите, как сказал Йога.
  2. Тип:

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

Я сделал псевдоним с этой командой, и он работал довольно хорошо для меня. Я просто печатаю, workflowи появляется Терминал с 3 вкладками и названиями, которые я выбрал в определении профиля, которые размещены на вкладках.

На моем .bashrcфайле я разместил:

alias workflow='gnome-terminal --tab-with-profile=Git --tab-with-profile=Run | sublime-text &'
giacobo1
источник
1

Screen или Byobu - мои предпочтительные методы управления сложным рабочим процессом в терминале, и оба позволяют сохранять ваши конфигурации.

orbatos
источник
1

Небольшое улучшение в существующем скрипте, который также проверяет установленный в системе xdotool и добавляет переменную для изменения пути

#!/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 выше, этот сценарий будет работать для нескольких конфигураций окон и вкладок и правильно сохранять заголовки вкладок для всех вкладок, у которых они есть.

В настоящее время это тестируется на терминале gnome 3.2, но его можно настроить для любой терминальной программы с аналогичной функциональностью save-config.

Для этого требуются инструменты «xprop», «xdotool» и «wmctrl».

Код:

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

Я также искал эту функцию в терминале Gnome, но не смог ее найти. Лучший вариант, который я нашел, - это использовать консоль. Это позволяет вам создавать закладки для ваших вкладок, чтобы вы могли вернуться к ним, выбрав их в меню закладок. Надеюсь, это поможет.

fitsum
источник
0

Подобно методу Йоги, Правка >> Настройки профиля >> Заголовок и команда >> Заголовок >> Когда терминальные команды устанавливают свои собственные заголовки: >> « Предварительно добавить начальный заголовок »

Затем выполните: gnome-Terminal --save-config = Terminal-CFG

закрыть терминалы окна

откройте новый терминал и выполните в нем: gnome-Terminal --load-config = Terminal-cfg

Работает хорошо для меня, все названия сохранены.

ImLeo
источник
0

Hyper ( https://github.com/zeit/hyper ) - это хорошая кроссплатформенная альтернатива, написанная на JavaScript и связанная с Electron.

Есть PR, который собирается добавить поддержку для сохранения / восстановления сессии из коробки: https://github.com/zeit/hyper/pull/945

Евгений Кулабухов
источник