KDE Konsole 没有保存当前会话的功能(打开的选项卡、当前目录等)
我们如何保存/恢复当前会话?
答案1
创建~/.konsole/watcher.sh
并使其可执行 ( chmod 755 watcher.sh
),然后将其添加到启动应用程序中。
konsole --tabs-from-file ~/.konsole/current-tabs
我们可以使用或 来以恢复模式启动 konsole ~/.konsole/watcher.sh restore
。
#!/bin/bash
# ~/.konsole/watcher.sh
# Watches the konsole qdbus messages and saves session state changes so they can be restored easily
# https://docs.kde.org/trunk5/en/applications/konsole/command-line-options.html
# Configuration
COMMAND=''
WATCH_INTERVAL_SECONDS=15
SAVEFILE_TERMINAL="${HOME}/.konsole/current-tabs"
# Restore if asked to
if [ "$1" = "restore" ] ; then
echo "Restoring..."
konsole --tabs-from-file ${SAVEFILE_TERMINAL} -e 'bash -c exit'&
fi
# Function to get the current sessions and write them to a file
function getSessions {
pid=$(pgrep konsole -u $USER)
local SESSIONS=$(qdbus org.kde.konsole-$pid | grep /Sessions/)
if [[ ${SESSIONS} ]] ; then
echo "# Most recent session list " $(date) > ${SAVEFILE_TERMINAL}
for i in ${SESSIONS}; do
local FORMAT=$(qdbus org.kde.konsole-$pid $i tabTitleFormat 0)
local PROCESSID=$(qdbus org.kde.konsole-$pid $i processId)
local CWD=$(pwdx ${PROCESSID} | sed -e "s/^[0-9]*: //")
if [[ $(pgrep --parent ${PROCESSID}) ]] ; then
CHILDPID=$(pgrep --parent ${PROCESSID})
COMMAND=$(ps -p ${CHILDPID} -o args=)
fi
echo "workdir: ${CWD};; title: ${FORMAT};; command:${COMMAND}" >> ${SAVEFILE_TERMINAL}
COMMAND=''
done
fi
}
#Update the Konsole sessions every WATCH_INTERVAL_SECONDS seconds
while true; do sleep ${WATCH_INTERVAL_SECONDS}; getSessions; done &
答案2
启发通过另一个答案,我创建了自己的脚本来保存和加载 Konsole 快照:
https://github.com/denilsonsa/small_scripts/blob/master/konsole_snapshot.py
用法非常简单:
./konsole_snapshot.py --help
# Use this to save a snapshot:
./konsole_snapshot.py --save
# Use this to load a snapshot (i.e. launch Konsole):
./konsole_snapshot.py --load
我的脚本旨在修复我在其中发现的所有缺点其他答案。具体来说,您可以将此脚本命名为任何您想要的名称,并且它支持一次保存多个窗口。
它有一些限制:不支持拆分或不同布局(使用当前的 Konsole API 很难实现),它不保存自定义选项卡标题(可以实现,但在一定限制内),它不保存当前命令(这很好,否则可能有潜在危险)。为了克服这些限制,最好在 Konsole 本身中添加适当的会话支持,而不是破解更复杂的脚本。