xterm: restore env after restart

Richard Emberson remberson at edgedynamics.com
Tue Sep 26 14:22:27 UTC 2006


On KDE start, how to restore your xterms running bash to the state
they had at the previous KDE shutdown (well, mostly).

Needed an xterm script file used when you explicitly launch xterm and
a bash file used to save/restore each xterm's bash session.

mkdir $HOME/.bash_info



xterm script:

#!/bin/bash

export BASH_INFO="$HOME/.bash_info"

# find new id
declare -i BASH_ID=0
while [[ -e $BASH_INFO/xterm_$BASH_ID ]]; do
     BASH_ID=$(( $BASH_ID + 1))
done

# make unique directory based upon bash id
/bin/mkdir $BASH_INFO/xterm_$BASH_ID

# store bash id in file
LOCAL_INIT_FILE=" $BASH_INFO/xterm_$BASH_ID/LOCAL_INIT_FILE"
echo "# LOCAL_INIT_FILE" >  $LOCAL_INIT_FILE
echo "export BASH_ID=$BASH_ID" >>  $LOCAL_INIT_FILE
echo "export BASH_INFO=$HOME/.bash_info" >> $LOCAL_INIT_FILE
echo ". $BASH_INFO/INIT_FILE" >>  $LOCAL_INIT_FILE

# start xterm
/usr/bin/xterm  -bg lightgrey \
     -geometry 80x22 -sl 1500 +si \
     -fa $F -fs 12 \
      -e /bin/bash --init-file $LOCAL_INIT_FILE &

# end-of-script


xterm initialization script:

# INIT_FILE

. $HOME/.bashrc

XTERM_DIR=$BASH_INFO/xterm_$BASH_ID
export HISTFILE=$XTERM_DIR/history
export HISTSIZE=1000


if [[ -f $XTERM_DIR/CD_FILE ]]; then
    . $XTERM_DIR/CD_FILE
fi

function cd() {
     if [[ $# -eq 0 ]]; then
         builtin cd
     else
         builtin cd "$1"
     fi
     echo "cd $PWD" > $XTERM_DIR/CD_FILE
}

function on_exit() {
     echo "cd $PWD" > $XTERM_DIR/CD_FILE
     builtin exit 0
}

trap on_exit SIGTERM EXIT
# restart vi command if found
if [[ -e $HISTFILE ]]; then
     CMD=$(tail -1 $HISTFILE)
     #echo CMDO=$CMD
     if [[ "$CMD" == "exit" ]]; then
         CMD=$(tail -2 $HISTFILE | grep -v exit)
     fi
     if [[ "$CMD" == "exit" ]]; then
         CMD=$(tail -3 $HISTFILE | grep -v exit)
     fi
     #echo CMD1=$CMD
     if [[ $CMD =~ "vi" ]]; then
         eval $CMD
     fi
fi
# end-of-script


Now launch your xterms using above xterm script.
If you do a:
ps auxwww | grep xterm

you will see the running xterm commands which are the same commands
that will be stored in the KDE session manager rc file:

$HOME/.kde/share/config/ksmserverrc

so that when KDE restarts, your xterms will restart in the same
directories and vi sessions that you left them in.

If there is a better way, please post it. Thanks


Richard




Richard Emberson wrote:
> 
> I am an xterm kind of guy, I have multiple virtual desktops with
> multiple xterms per desktop. When I stop and then restart KDE
> (maybe because I have to reboot, new kernel, etc.) I get all
> of the xterms, then all come up, but not with their environments.
> The xterms are all created which the bash shell in my home
> directory. What I want is for each xterm to be in the directory
> where it was when I rebooted with the same command history.
> 
> Does anyone know how to do this (and share that info)?
> thanks
> 
> Richard
> 
> 
> 


-- 
This email message is for the sole use of the intended recipient(s) and
may contain confidential information.  Any unauthorized review, use,
disclosure or distribution is prohibited.  If you are not the intended
recipient, please contact the sender by reply email and destroy all
copies of the original message.




More information about the fedora-devel-list mailing list