When I switched over to Ruby development, I said goodbye to Eclipse and IDEA. I was never one to shy away from a terminal so the transition back to a text editor (I tend to use TextMate and ViM) and iTerm was an easy one.
At ThoughtWorks I worked on one client project at a time, and maybe one or two open source ones. Now at Relevance there are weeks when I work on four client projects and a half dozen open source projects (thanks to open source Fridays). To make things more difficult, I've got a mix of Subversion and Git projects.
To ease the transition back and forth between projects I:
- Got scm information in the bash prompt. This is something the git folks have been doing for long time.
- Abstracted out the scm commands I use most frequently. In other words, I can now type
svn up / git pullvs
svn commit / git commit && git push.
- Created an alias that takes me back to the root of my project by guessing it from the SCM structure.
- Showed the current project in iTerm's tab title.
- Displayed the previously executed command in the tab title (next to the project).
- Rounded out the tab title by alternatively showing the currently running command if one was currently running.
- Made it notice new projects as I checked them by implementing automatic aliases to project directories.
None of these was especially difficult but each of them has improved my shell environment. Thanks to Alan Cooper and Edward Tufte, I am beginning to understand that good usability doesn't necessarily require difficult technical solutions. Indeed, coming up with each idea and a seamless UI for it was harder than implementing it.
The features described above came down to making my shell environment:
- Tell me about my current context.
- Adjust based on the context.
I think that part of the reason we use MacOS is because it does some of this for us. It changes the menus based on which app is in focus. CoverFlow gives us a visual indication of where we are in the stack of files we're looking at. Maximizing a Safari.app window only maximizes it as far as it needs to in order to horizontally fit the content.
What else do you think your shell environment should do for you? Why?