KDE Konsole: 현재 세션을 저장하고 복원하는 방법은 무엇입니까?

KDE Konsole: 현재 세션을 저장하고 복원하는 방법은 무엇입니까?

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 자체에 적절한 세션 지원을 추가하는 것이 좋습니다.

관련 정보