Jag använder programmet screen väldigt ofta för att kunna återansluta till sesisoner på maskiner jag loggar in och ut från. Dels behålls alla inställningar och startade program fortsätter köra, dels ser jag att när screen är avslutat så har maskinen bootat om. Problemet är att i grundutförande finns det lite småsaker jag stör mig på:
- en splash screen som känns onödig
- jag vill gärna starta med fler än en session
- det vore trevligt med datum och hostname i statusfältet
- färgerna kunde vara lite mer dämpade
Det visade sig att även om konfigfilen ser ganska rörig ut så var allt utom statusfältet ganska rättframt. Min ~/.screenrc
# ----- Use scroll mouse for the scrolling -----
termcapinfo xterm|xterms|xs|rxvt ti@:te@
# ----- Start two named sessions -----
screen -t emacs emacs -nw
screen -t console
screen -t console
# ----- Misc settings -----
defscrollback 2000
startup_message off
bind f eval "hardstatus alwaysignore"
bind F eval "hardstatus alwayslastline"
# ----- The status bar at the bottom -----
hardstatus on
hardstatus alwayslastline
hardstatus string "%{= kC}%H| %{ =g}%-w%{= W}%f%t%{-}%+w %-= %{C}|%Y-%d-%m %{W}%c%{g} "
...och här är resultatet:
En sak jag länge har stört mig på med GNU Screen är att när man stänger terminaler i oordning och öppnar nya så startar nyöppnade terminaler där det "finns hål" i nummerordningen. Jag vill att alla nya terminaler skall hamna bredvid varandra och vill alltså kunna "defragmentera" min session då och då.
Jag har inte kunnat hitta ett snyggt sätt att göra det på då jag inte kan dumpa en fönsterlistning till stdout och använda för omnumreringen. Istället tvingades jag loopa från 0 till EttHögtTal<TM> och dumpa skärminnehållet i varje. Med den informationen kan man sedan organisera om. Fult, men fantastiskt behändigt!
defragscreen.sh
#!/bin/bash
tmpdir=$HOME/tmp/screen
[ -d $tmpdir ] && \rm $tmpdir/*
[ ! -d $tmpdir ] && mkdir -p $tmpdir
for win in {0..100}
do
screen -X at $win hardcopy $tmpdir/$win
done
cd $tmpdir
i=0
for win in `echo *`
do
if [ $win != $i ]
then
screen -X at $win number $i
echo "$win -> $i"
fi
let "i++"
done