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

risingthumb.xyz Once UNKNOWN?

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

A Sonnet for Petertide, and for those being ordained

The 29th of June is St. Peter’s day, when we remember the disciple who, for all his many mistakes, knew how to recover and hold on, who, for all his waverings was called by Jesus ‘the rock’, who learned the … Continue reading →

via Malcolm Guite June 27, 2026

How I Contracted AIDS

Twin RNAs and m-RNAs are produced by the provirus. The capsides are directly produced inside the host by viral m-RNA. The virus obtains the lipid membrane when it buds from the host cell.

via goeshard.org June 27, 2026

Movies: Ray (2004)

The story of the life and career of the legendary rhythm and blues musician Ray Charles, from his humble beginnings in the South, where he went blind at age seven, to his meteoric rise to stardom during the 1950s and 1960s. Yeah, probably the best biopic o…

via andrei.xyz June 26, 2026

Generated by openring