Add Ideas from my Development Setup: Always Tmux
This commit is contained in:
parent
cbb799f0cd
commit
f8d4a30083
|
@ -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
|
||||
```
|
Loading…
Reference in New Issue