Faster blogging with Tmux
May 18, 2018
Writing blog articles is great, but an aspect of it that is not is getting running all the scripts to get everything setup. To start a blogging session in no particular order I need to
- Traverse to my repository
- Start an http server
- Traverse directories again
- Start pelican
- Traverse directories more
- Start vim
- Start writing
Tmux, a terminal multiplexer, makes it easier to switch between the terminals running these processes, but starting them manually is a pain
Luckily Tmux supports scripting which makes solving this problem really easy.
Tmux script
The shell script below runs all the commands needed to start a blogging environment on my computers.
# !/bin/sh
# Small script that sets up blogging environment with one command
# Kill open session
tmux kill-session -t blog || true
# Create new session
tmux new-session -d -s blog
# C-m is carriage return in tmux
tmux send-keys 'source activate blog && pelican -r -s pelicanconf.py' 'C-m'
# Start http server
tmux select-window -t blog:0
tmux split-window -v
tmux send-keys 'cd .. && python -m http.server' 'C-m'
# Ready to blog
tmux new-window -n blog_article -c $PWD"/content"
tmux att -t blog
Breaking this apart, the first thing to do is ensure that no other tmux session
is already running all the processes I need. This is done by checking
if a session named blog
is running and if so kills it.
# Kill open session
tmux kill-session -t blog || true
The next step is creating a ession to group all the windows and panes
that will be running the processes. The first done is starting a session
named blog. Next the pelican process is started. send-keys
was used
instead of running the command directly because in tmux if process stops
the pane would close, not a behavior that was desired. C-m
is a carriage
return and instructs tmux to run the command after typing it in, the same
as pressing enter does when manually typing the command.
# Create new session
tmux new-session -d -s blog
# C-m is carriage return in tmux
tmux send-keys 'source activate blog && pelican -r -s pelicanconf.py' 'C-m'
With the pelican process ready to generate the site, the next step is to start a local server to view the blog in a browser
# Start http server
tmux select-window -t blog:0
tmux split-window -v
tmux send-keys 'cd .. && python -m http.server' 'C-m'
Lastly we start a new window in the directory where the markdown files where for this blog are stored. The final command is attaching the tmux session to the running terminal to start writing.
# Ready to blog
tmux new-window -n blog_article -c $PWD"/content"
tmux att -t blog
And with that were done!
Why go through the trouble
If the task I want to do is write a blog, every step between is a distraction and a time waste. This script allows me to bypass all the manual steps and jump straight into the value add work, writing content to share with you!