diff --git a/knowledge base/tmux.md b/knowledge base/tmux.md new file mode 100644 index 0000000..736e4b0 --- /dev/null +++ b/knowledge base/tmux.md @@ -0,0 +1,141 @@ +# Tmux + +1. [TL;DR](#tldr) +1. [Further readings](#further-readings) + 1. [Sources](#sources) + +## TL;DR + +There are 3 main objects: _sessions_, _windows_, and _panes_. + +Sessions are collections of one or more windows managed as a single unit.
+One can have any number of sessions active at one time, but one is typically only attached to one of them.
+Each session has a **single** active window. + +Windows contain and are split into one or more panes.
+Windows can be thought of as tabs in browsers.
+Each window has a **single** currently active pane and allows to switch to any pane it manages.
+Windows are shown in the bar and the current one is marked with a `*` sign by default.
+Windows can be split into panes vertically or horizontally in a tiling fashion. + +Each pane is a split in one window and has its own active terminal session.
+Only one pane is active and can be interacted with at any time. + +Enter commands to Tmux by using the _prefix key_ (`ctrl + b` by default), followed by the command.
+See usage for details. + +
+ Installation and configuration + +```sh +brew install 'tmux' +``` + +The configuration file is `$HOME/.tmux.conf` or `$XDG_CONFIG_HOME/tmux/tmux.conf`. + +```conf +set -g default-terminal "screen-256color" # set the default terminal mode to 256 colors +set -g history-limit 100000 # set the scrollback size +set -g mouse on # enable mouse control (clickable windows, panes, resizable panes) +set -g xterm-keys on # pass xterm keys through + +setw -g automatic-rename on # rename the window to reflect the current program +set -g renumber-windows on # renumber all windows when a window is closed +``` + +
+
+ Usage + +```sh +# Reload settings. +tmux source '/path/to/config.file' + +# Start sessions if none is attached. +tmux + +# Create new named sessions. +tmux new -s 'session-name' + +# List active sessions. +tmux list-session +tmux ls + +# Attach to the most recent session. +tmux attach +tmux a + +# Attach to specific sessions. +tmux attach -t named-session +``` + +| Key combination | Effect | +| --------------------------------- | ---------------------------------------------------------- | +| `ctrl + b` | actuate | +| `ctrl + b`, then `d` | detach from the current session | +| `ctrl + b`, then `s` | list active sessions | +| `ctrl + b`, then `w` | list active sessions with preview window | +| `ctrl + b`, then `c` | create a **new** window | +| `ctrl + b`, then `n` | pass to the **next** window | +| `ctrl + b`, then `p` | pass to the **previous** window | +| `ctrl + b`, then `0` to `9` | pass to the window identified by that number | +| `ctrl + b`, then `"` | split the current window with a **horizontal** line | +| `ctrl + b`, then `%` | split the current window with a **vertical** line | +| `ctrl + b`, then arrow key | switch to the pane pointed to by the arrow key's direction | +| `ctrl + b`, then `{` | switch to the pane left to the current one | +| `ctrl + b`, then `}` | switch to the pane right to the current one | +| `ctrl + b`, then `q`, then number | switch to the pane identified by the number | +| `ctrl + b`, then `z` | toggle full screen for the current pane | +| `ctrl + b`, then `!` | turn the current pane into a window | +| `ctrl + b`, then `x` | close the current pane | + +
+
+ Real world use cases + +```sh +# Dedicate sessions to commands. +# Attaches to the session if it already exists, or creates it otherwise. +# Closes the session once the command finishes. +tmux new-session -As 'gitlab-upgrade' "dnf update 'gitlab-ee'" + +# Operate on a background session from another one. +tmux new-session -d -S 'session-name' +tmux send-keys -t 'session-name': "command" "Enter" +tmux capture-pane -t 'session-name': -S - -E - -p | cat -n +tmux kill-session -t 'session-name' +``` + +
+ +## Further readings + +- [Github] +- [Documentation] +- [Tmux Plugin Manager] + +### Sources + +- [Tmux cheat sheet & quick reference] +- [Tmux has forever changed the way I write code] +- [Sending simulated keystrokes in Bash] +- [Is it possible to send input to a tmux session without connecting to it?] + + + + + + + +[documentation]: https://github.com/tmux/tmux/wiki/ +[github]: https://github.com/tmux/tmux +[tmux plugin manager]: https://github.com/tmux-plugins/tpm + + +[is it possible to send input to a tmux session without connecting to it?]: https://unix.stackexchange.com/questions/409861/is-it-possible-to-send-input-to-a-tmux-session-without-connecting-to-it#409863 +[sending simulated keystrokes in bash]: https://superuser.com/questions/585398/sending-simulated-keystrokes-in-bash#1606615 +[tmux cheat sheet & quick reference]: https://tmuxcheatsheet.com/ +[tmux has forever changed the way i write code]: https://www.youtube.com/watch?v=DzNmUNvnB04 diff --git a/knowledge base/tmux.placeholder b/knowledge base/tmux.placeholder deleted file mode 100644 index 9c6a044..0000000 --- a/knowledge base/tmux.placeholder +++ /dev/null @@ -1,45 +0,0 @@ -# Tmux - -| Key combination | Effect | -| --------------------------- | -------------------------------------------- | -| `ctrl + b` | actuate | -| `ctrl + b`, then `c` | create a new window | -| `ctrl + b`, then `d` | detach from the current session | -| `ctrl + b`, then `n` | pass to the next window | -| `ctrl + b`, then `p` | pass to the previous window | -| `ctrl + b`, then `0` to `9` | pass to the window identified by that number | - -`tmux new -s named-session` to create a new session named `named-session` -`ctrl + b`, then `d` to detach -`tmux list-session` to list the active sessions -`tmux attach` to attach to the last session -`tmux attach -t named-session` to attach to the session named `named-session` - -.tmux.conf -```conf -set -g default-terminal "screen-256color" # set the default terminal mode to 256 colors -set -g history-limit 100000 # set the scrollback size -set -g mouse on # enable mouse control (clickable windows, panes, resizable panes) -set -g xterm-keys on # pass xterm keys through - -setw -g automatic-rename on # rename the window to reflect the current program -set -g renumber-windows on # renumber all windows when a window is closed -``` - -https://github.com/tmux/tmux/wiki/ - -```sh -# Dedicate sessions to commands. -# Attach to the session if it already exists, or create it otherwise. -tmux new-session -As 'gitlab-upgrade' "dnf update 'gitlab-ee'" -``` - -```sh -# Operate on a background session from another one. -tmux new-session -d -S 'session-name' -tmux send-keys -t 'session-name': "command" "Enter" -tmux capture-pane -t 'session-name': -S - -E - -p | cat -n -tmux kill-session -t 'session-name' -``` -https://superuser.com/questions/585398/sending-simulated-keystrokes-in-bash#1606615 -https://unix.stackexchange.com/questions/409861/is-it-possible-to-send-input-to-a-tmux-session-without-connecting-to-it#409863