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

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

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

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

13 ответов

Сохранить конфигурацию в /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 

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

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

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

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

  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 &'

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

Я изменил заголовок по умолчанию для терминала, чтобы использовать значение Intital в ~/.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 все имена вкладок восстановлены правильно. И вы также можете изменить, как вам нравится, и снова сохранить вкладки!

tmux-воскресить

Восстановить tmuxсреде после перезагрузки системы.

tmux-resurrectсохраняет все мелкие детали вашей среды tmux, чтобы ее можно было полностью восстановить после перезагрузки системы (или когда вам захочется). Настройка не требуется. Вы должны чувствовать, что никогда не выходите из tmux.

Он даже (опционально) восстанавливает сеансы vim и neovim !

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

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

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

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

Спасибо!!

Вот терминальная вилка xfce, с возможностью сохранить / восстановить сессию только из меню: https://github.com/repu1sion/xfce4-terminal

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

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

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

Расширяя ответ 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

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

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

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

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

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

Небольшое улучшение в существующем скрипте, который также проверяет установленный в системе 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
Другие вопросы по тегам