我有一个终端窗口,其中打开了十二个命名选项卡。
我想保存当前配置,并使用名称和目录还原它。
有没有办法做到这一点?
我有一个终端窗口,其中打开了十二个命名选项卡。
我想保存当前配置,并使用名称和目录还原它。
有没有办法做到这一点?
Answers:
要将配置保存到/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-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
扩展上面Nyakin的回答,此脚本将适用于多种窗口和选项卡配置,并为所有具有它们的选项卡正确保存选项卡标题。
当前已在gnome-terminal 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
这是一个xfce终端分叉,可以仅通过菜单保存/恢复会话:https : //github.com/repu1sion/xfce4-terminal
Hyper(https://github.com/zeit/hyper)是一个很好的跨平台替代方案,用JavaScript编写并与Electron捆绑在一起。
有一个PR即将增加对会话保存/恢复的支持:https : //github.com/zeit/hyper/pull/945