As front-end development becomes more and more automated, the introduction of task runners such as grunt and gulp are helping developers cut out the manual repetition of day to day actions. Automation however does have a manual process; opening all the terminal windows to run those tasks.
I like to keep a few windows open for the different types of tasks I'm running, rests, gulp/grunt watch tasks etc. Doing this increases my manual step at the beginning of each day. I wanted to make this a little bit easier for me.
My Daily chore.
Everyday, before I could begin working on a project I would open 2 or three terminal windows. 1 to start my web app or website (nodejs application), 1 to run my tasks and 1 to run my tests. For every terminal window I opened I would manually type commands to navigate to the correct directory before I could instruct my task runner to perform its task.
I would also have to open my text editor of choice to begin work on a particular project.
The more windows I opened the more frustrated I became with the amount of time I was wasting each morning.
Automating my automation
We have automation for all other tasks, why isn't there a task I could run to perform all this manual processing I was putting myself through.
I decided I was going to try to remove my frustration. I looked at a few options.
Bash script was first on my list to try to write a script to do this. I managed it to a point but I didn't like the ugly .command file that I had to create. I'm sure there is a way around this, but I didn't hang around to find out.
I quickly turned my attention to AppleScript which would allow me to create an app that I could pick up and drop in any project.
on openInSublime(folder) tell application "Sublime Text 2" open folder activate end tell end openInSublime tell application "Finder" set sel to item 1 of (get selection) if class of sel is folder then set currentDir to sel as text else set currentDir to (container of sel) as text end if end tell openInSublime(currentDir) tell application "Terminal" activate end tell tell application "System Events" tell process "Terminal" to keystroke "n" using command down end tell tell application "Terminal" activate do script with command "cd " & (quoted form of POSIX path of currentDir) in window 2 do script with command "cd " & (quoted form of POSIX path of currentDir) in window 1 do script with command "node website.js" in window 2 do script with command "gulp" in window 1 end tell
You can take this script and create your own little mac app. Use it, tweak it to suit your needs.
Here are the steps to create your own.
- Open Script Editor. Applications > Utilities > Script Editor.
- Write code (or copy from link above)
- File > Save (chose application from the file format)
That's it. Drag your application into any folder where your project resides. For the script above it needs to be at the root where your gulp file is.
Double click the application and it should open the relevant programs and windows for you.