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