Catalyst + Screen
I'm an old-school developer, doing all my hacking using terms, the command line, and vim, not a heavyweight IDE. Hacking perl Catalyst projects (and I imagine other MVC-type frameworks) can be slightly more challenging in this kind of environment because of the widely-branching directory structure. A single conceptual change can easily touch controller classes, model classes, view templates, and static javascript or css files, for instance.
I've found GNU screen to work really
well in this environment. I use per-project screen sessions set up
specifically for Catalyst - for my 'usercss' project, for instance, I have
a ~/.screenrc-usercss
config that looks like this:
source $HOME/.screenrc setenv PROJDIR ~/work/usercss setenv PROJ UserCSS screen -t home stuff "cd ~^Mclear^M" screen -t top stuff "cd $PROJDIR^Mclear^M" screen -t lib stuff "cd $PROJDIR/lib/$PROJ^Mclear^M" screen -t controller stuff "cd $PROJDIR/lib/Controller^Mclear^M" screen -t schema stuff "cd $PROJDIR/lib/$PROJ/Schema/Result^Mclear^M" screen -t htdocs stuff "cd $PROJDIR/root/htdocs^Mclear^M" screen -t static stuff "cd $PROJDIR/root/static^Mclear^M" screen -t sql stuff "cd $PROJDIR^Mclear^M" select 0
(the ^M
sequences there are actual Ctrl-M newline characters).
So a:
screen -c ~/.screenrc-usercss
will give me a set of eight labelled screen windows: home, top, lib, controller, schema, htdocs, static, and sql. I usually run a couple of these in separate terms, like this:
To make this completely brainless, I also have the following bash function
defined in my ~/.bashrc
file:
sc () { SC_SESSION=$(screen -ls | egrep -e "\.$1.*Detached" | \ awk '{ print $1 }' | head -1); if [ -n "$SC_SESSION" ]; then xtitle $1; screen -R $SC_SESSION; elif [ -f ~/.screenrc-$1 ]; then xtitle $1; screen -S $1 -c ~/.screenrc-$1 else echo "Unknown session type '$1'!" fi }
which lets me just do sc usercss
, which reattaches to the first detached
'usercss' screen session, if one is available, or starts up a new one.
Fast, flexible, lightweight. Choose any 3.
blog comments powered by Disqus