risingthumb.xyz | Agora Zines | Webring | achtung | github | itch | site map

risingthumb.xyz Brought to you by RisingThumb!

Automating Tmux for fun and profit #

First what is a MUX? A MUX is a shorthand for Multiplexer which is used for selecting data commonly in electronics. TMUX is a Terminal Multiplexer. This means it selects Terminals to act on, as well as managing them into panes so you can easily access them. They also save the terminals in sessions, sessions can be thought of like your workspace. This means it can be used for really a lot of things actually. I use it for hosting servers without forking the process or for having processes run in the background in a tmux session rather than in a window(typically this is done with ncurses based applications as they display in your terminal). Another advantage is you can use it with vim or neovim(probably emacs too), so you can create a workspace for doing your text editing activities. In this I will provide examples of some scripts I have written using tmux, as well as some advantages. I won't be going over common keybinds and how to use tmux as a user, so if you're a newb to tmux, take some time to look for examples of using it. If you use tiling window managers, but haven't used tmux, you will feel right at home with tmux.

This blog is a very good jumping off point into using tmux

Running programs in the background #

One of the TUI(Terminal User Interface) applications I enjoy thoroughly is cmus(A music player written in C and NCurses). There's a lot of reasons to like cmus, it's easy to use, it can be used on a network, it can be controlled remotely with cmus-remote(which I use with my keybindings), however for all these advantages, it's not a daemon so it doesn't run in the background. A different music player like mpd might be suitable for this, but I chose to stick with cmus and write a script with tmux. Below is the script

tmux has-session -t cmus 2>gt;/dev/null
if [ $? != 0 ]; then
        tmux new-session -d -s cmus \; \
                send-keys 'cmus' C-m\;
fi
tmux attach-session -t cmus

What this does it firstly checks if it has a session named cmus, and writes the result to to /dev/null. I then do a check on the result of the last command's output ($? is a mysterious variable that is the output of the last command you wrote). I check it's not 0, a 0 would mean it has a session and I should attach to it. If it's not a 0, I create this session. The -d flag being to detach after creating it. The -s flag being the session name. You will observe I split this over multiple lines, when a tmux session is made I can send it keys, with send-keys. So I tell it to stard cmus, and C-m(This enters). This starts a Tmux session with cmus running in it, detached. The final line is to attach to the session cmus(you can omit this if you want to manually attach to the session. I keep it because I use this with a keybind of mine to bring cmus up when I want to listen to music).

Read the above example, and you will learn that the first advantage of tmux is being able to run, detach and attach sessions, as well as send arbitrary key inputs to run commands accordingly. I would use this to run scripts in your $PATH.

Managing windows #

But what if you want to have windows? I will ignore this for vim, because this has windows by default, you can look that up yourself, and you will find out about it, but some applications you want to do windows. For a short time I used to use a task manager called taskwarrior for doing todo lists(I don't anymore, I use a physical journal, but the code I wrote is still applicable here).

tmux has-session -t tasks 2>gt;/dev/null
if [ $? != 0 ]; then
        tmux new-session -d -s tasks \; \
                send-keys 'while true;do clear; task priority limit:3;sleep 5;done' C-m\; \
                split-window -v -p 75 \; \
                split-window -h -p 30 \; \
                send-keys 'while true;do clear; task burndown.daily;sleep 5;done' C-m\; \
                select-pane -t 1 \;
fi
tmux attach-session -t tasks

What I did in the cmus example is repeated here and built upon. I run some commands in a loop(could be replaced with a script or executable of your choice. Maybe a crypto price watcher by curling rate.sx?). So I split the window vertically by 75%, then I split the window horizontally by 30%. This will now select the 1st pane as where you handle inputs, while the 2nd pane and 0th panes are handling your scripts. What this allows is running a lot of different applications in a very specific window layout(almost like a tiling window manager...?).

I have exhausted my supply for tmux examples that I wish to demonstrate, but you can see that if you make a script with a case statement for different tmux layouts this could be useful for some people. I will personally recommend looking at the man page for tmux to see more ways this can be used, because I have barely scratched the surface.

Anyway, other uses include when you ssh into a remote server. Why? Because if you lose connection, your terminal state isn't saved normally, however if you lose connection in a tmux session, you can just reconnect and reattach to the tmux session to pickup where you were before.

I hope these examples have illuminated why I would suggest using tmux for automating your workspaces. In some cases it's not worth this effort, but for others it is. I will let you dear reader, determine what is and isn't worth the effort to apply tmux in.


Published on 2021/02/18

Articles from blogs I follow around the net

Movies: Capricorn One (1978)

When the first manned flight to Mars is deemed unsafe and scrubbed on the launch pad, anxious authorities must scramble to save face and retain their funding - and so an unthinkable plot to fake the mission is hatched. Great sci-fi movie of the 70s, it’s p…

via andrei.xyz April 7, 2026

A Sonnet for Easter Dawn

The Lord is Risen! He is risen indeed Alleluia! Heres is an extra ‘fifteenth’ sonnet for Easter Morning, which I dedicate to my friend Mary who asked me to write it, and to the memory of her husband Gavin. May … Continue reading →

via Malcolm Guite April 5, 2026

HARD LIGHT (20 PAGES), PAGE 6

HARD LIGHT (20 PAGES) PAGE 6. FEAR NOT, WE ARE QUICKLY APPROACHING THE CONCLUSION OF OUR PARADE OF TELEVISIONS. THIS PAGE COMPRISES FOUR TOTAL PANELS ARRANGED IN THREE EQUALLY-SIZED TIERS. THE FIRST TIER CONTAINS TWO TELEVISION SETS, WHILE THE FINAL TWO T…

via I'm not really Stanley Lieber. April 4, 2026

Generated by openring