У мене вікно терміналу з відкритим десяткам вкладок.
Я хотів би зберегти поточну конфігурацію та відновити її з іменами та каталогами.
Чи є спосіб це зробити?
У мене вікно терміналу з відкритим десяткам вкладок.
Я хотів би зберегти поточну конфігурацію та відновити її з іменами та каталогами.
Чи є спосіб це зробити?
Відповіді:
Щоб зберегти конфігурацію в /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;
Я отримую кількість вкладок після отримання файлу конфігурації, який я зберегла раніше:
$(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, усі ваші термінали будуть відновлені :)
Я спробував наведені нижче варіанти після відновлення збережених налаштувань, а також заголовки відновлено належним чином.
Ця опція уникає перезапису вашого початкового набору.
Сподіваюся, що це допомагає і чудовий сценарій справді. Економте багато часу під час перезавантаження, і я можу із задоволенням часто перезавантажувати свою віртуальну скриньку.
Дякую!!
Я спробував ще один варіант,
Я змінив за замовчуванням назву для Terminal, щоб використовувати значення 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
всіх імен вкладок відновлено належним чином. Ви також можете змінити, як вам подобається, і зберегти вкладки знову !!
Я знайшов спосіб зробити це, на який я думаю, що швидше.
Тип:
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 &'
Невелике вдосконалення існуючого сценарію, який також перевіряє встановлений на системі 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
Розширюючись на відповідь Някіна вище, цей сценарій буде працювати для декількох конфігурацій вікон та вкладок і правильно зберігати заголовки вкладок для всіх вкладок, які їх мають.
В даний час це тестується на gnome-терміналі 3.2, але його можна налаштувати для будь-якої термінальної програми з аналогічною функцією збереження-конфігурації.
Для цього потрібні інструменти '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
Ось термінальна вилка xfce з можливістю збереження / відновлення сеансу просто з меню: https://github.com/repu1sion/xfce4-terminal
Аналогічно методу йоги, Правка >> Налаштування профілю >> Назва та команда >> Заголовок >> Коли команди терміналів встановлюють власні заголовки: >> " Додати початковий заголовок "
Потім виконайте: gnome-terminals --save-config = terminals-cfg
закрити вікна терміналів
відкрийте новий термінал і в ньому виконайте: gnome-terminals --load-config = terminals-cfg
Для мене працює добре, усі титри зберігаються.
Hyper ( https://github.com/zeit/hyper ) - хороша альтернатива крос-платформи, написана в JavaScript та в комплекті з Electron.
Є PR, який збирається додати підтримку збереження / відновлення сеансу з коробки: https://github.com/zeit/hyper/pull/945