From f8d4a3008302217e052e9f96c991ef9a3067c289 Mon Sep 17 00:00:00 2001 From: Ceda EI Date: Wed, 30 Sep 2020 20:36:54 +0530 Subject: [PATCH] Add Ideas from my Development Setup: Always Tmux --- .../ideas-from-my-dev-setup-always-tmux.md | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 content/posts/ideas-from-my-dev-setup-always-tmux.md diff --git a/content/posts/ideas-from-my-dev-setup-always-tmux.md b/content/posts/ideas-from-my-dev-setup-always-tmux.md new file mode 100644 index 0000000..46b15ec --- /dev/null +++ b/content/posts/ideas-from-my-dev-setup-always-tmux.md @@ -0,0 +1,97 @@ ++++ +title = "Ideas from my Development Setup: Always Tmux" +date = "2020-09-30" +author = "Ceda EI" +tags = ["tmux", "development"] +keywords = ["tmux", "development"] +description = "Use tmux at all times in my dev setup" +showFullContent = false ++++ + +Back when I first learnt tmux, I realized it was a really valuable tool. Soon +afterwards, I found myself in need of wanting to make a split only to find out +I wasn't in tmux. This would lead to: + +- Killing the running process. +- Starting tmux. +- Restarting the previous process. + +In pursuit of an ideal solution, I added a tiny script in my scripts directory +which was called by my bashrc. + +## Current Workflow + +My current workflow simply starts by opening the terminal. Instead of the bash +prompt, I am greeted by this. + +``` +Choose the terminal to attach: +1 - 12: 3 windows (created Wed Sep 30 14:26:37 2020) (attached) +2 - tana: 3 windows (created Wed Sep 30 18:17:24 2020) (attached) +3 - userbot: 1 windows (created Tue Sep 29 18:37:19 2020) +4 - ytc: 1 windows (created Tue Sep 29 18:37:19 2020) + +Create a new session by entering a name for it +``` + +At this point, I either + +- enter a number (in this case from 1 to 4) to connect to an existing session. +- enter a name to create a named tmux session. +- hit enter (or C-D) to create an unnamed session (tmux will name it + sequentially). +- type nil and hit enter to drop to shell without starting tmux + + +## Implementation + +In my `.bashrc`, live these lines. + +```bash +if [[ ! -v TMUX && $TERM_PROGRAM != "vscode" ]]; then + tmux_chooser && exit +fi +``` + +Although I use vim as my sole editor, I needed to demo something in VSCode and +for that case I have added an exception so that the script does not run the +`tmux_chooser` in VSCode's integrated terminal. + +Here is the source of `tmux_chooser` called above. + +```bash +#!/usr/bin/bash +# shellcheck disable=SC2207 + +# Doesn't let you press Ctrl-C +function ctrl_c() { + echo -e "\renter nil to drop to normal prompt" +} + +trap ctrl_c SIGINT + +no_of_terminals=$(tmux list-sessions | wc -l) +IFS=$'\n' +output=($(tmux list-sessions)) +output_names=($(tmux list-sessions -F\#S)) +k=1 +echo "Choose the terminal to attach: " +for i in "${output[@]}"; do + echo "$k - $i" + ((k++)) +done +echo +echo "Create a new session by entering a name for it" +read -r input +if [[ $input == "" ]]; then + tmux new-session +elif [[ $input == 'nil' ]]; then + exit 1 +elif [[ $input =~ ^[0-9]+$ ]] && [[ $input -le $no_of_terminals ]]; then + terminal_name="${output_names[input - 1]}" + tmux attach -t "$terminal_name" +else + tmux new-session -s "$input" +fi +exit 0 +```