# ╭──────╮ # │ tmux │ # ╰──────╯ # ╭──────┬───────────┬────────╮ # │ tmux │ constants │ values │ # ╰──────┴───────────┴────────╯ RWX_TMUX_MAIN_BACKGROUND="#080808" RWX_TMUX_MAIN_FOREGROUND="white" RWX_TMUX_MESSAGE_BACKGROUND="red" RWX_TMUX_MESSAGE_FOREGROUND="white" # ╭──────┬───────────┬──────────╮ # │ tmux │ constants │ commands │ # ╰──────┴───────────┴──────────╯ RWX_TMUX_BORDER_BACKGROUND="#[bg=##181818]" RWX_TMUX_ITEM_BACKGROUND="#[bg=##282828]" RWX_TMUX_ITEM_FOREGROUND="#[fg=yellow]" RWX_TMUX_PATH_FOREGROUND="#[fg=cyan]" RWX_TMUX_PREFIX_CHARACTER="p" RWX_TMUX_PREFIX_FOREGROUND="#[fg=red]" RWX_TMUX_RESET="\ #[bg=default]\ #[fg=default]\ " RWX_TMUX_SESSION_MANY="#[fg=red]" RWX_TMUX_SESSION_ONE="#[fg=green]" # ╭──────┬───────────╮ # │ tmux │ functions │ # ╰──────┴───────────╯ # attach #= tma rwx_tmux_attach() { local server="${1}" if [ -n "${server}" ]; then tmux -L "${server}" attach-session else rwx_tmux_list fi } # kill #= tmk rwx_tmux_kill() { local server="${1}" if [ -n "${server}" ]; then tmux -L "${server}" kill-server 2>"/dev/null" else rwx_tmux_list fi } # list #= tml rwx_tmux_list() { local user_id user_id="$(id --user)" ls "/tmp/tmux-${user_id}" } # ╭──────┬──────╮ # │ tmux │ help │ # ╰──────┴──────╯ # display key bindings #= tmh rwx_tmux_help() { # TODO pad constants rwx_log "\ ╭─────────────────────┬─────────────╮ │ rwx │ tmux │ ├───────────┬─────────┼─────┬───────┤ │ -n │ F12 │ -n │ C-b │ ╭───────────────────┼───────────┼─────────┼─────┼───────┤ │ command-prompt │ │ │ │ : │ │ copy-mode │ │ │ │ PPage │ │ detach-client │ F6 │ │ │ d │ │ kill-server │ │ k │ │ │ │ kill-session │ S-M-Up │ │ │ │ │ kill-window │ S-M-Left │ │ │ │ │ new-session │ S-M-Down │ │ │ │ │ new-window │ S-M-Right │ │ │ c │ │ next-window │ M-Right │ │ │ n │ │ previous-window │ M-Left │ │ │ p │ │ rename-session │ │ C-s │ │ │ │ rename-window │ │ C-w │ │ │ │ resize-pane -Z │ │ │ │ z │ │ select-layout -n │ M-Home │ │ │ │ │ select-layout -p │ M-End │ │ │ │ │ select-pane -D │ C-S-Down │ │ │ │ │ select-pane -L │ C-S-Left │ │ │ │ │ select-pane -R │ C-S-Right │ │ │ │ │ select-pane -U │ C-S-Up │ │ │ │ │ set -g mouse │ │ M │ │ │ │ set -g status off │ C-F6 │ │ │ │ │ set -g status on │ C-F1 │ │ │ │ │ set -g status 2 │ C-F2 │ │ │ │ │ set -g status 3 │ C-F3 │ │ │ │ │ set -g status 4 │ C-F4 │ │ │ │ │ set -g status 5 │ C-F5 │ │ │ │ │ source-file │ │ r │ │ │ │ split-window -h │ │ h │ │ % │ │ split-window -v │ │ v │ │ \" │ │ swap-window -t -1 │ │ M-Left │ │ │ │ swap-window -t +1 │ │ M-Right │ │ │ │ switch-client -n │ M-Down │ │ │ │ │ switch-client -p │ M-Up │ │ │ │ │ synchronize-panes │ │ S │ │ │ ╰───────────────────┴───────────┴─────────┴─────┴───────╯ " } # ╭──────┬──────╮ # │ tmux │ item │ # ╰──────┴──────╯ rwx_tmux_item_date() { printf "%s" "\ ${RWX_TMUX_ITEM_FOREGROUND}\ ${RWX_TMUX_BORDER_BACKGROUND} \ ${RWX_TMUX_ITEM_BACKGROUND}%Y-%m-%d\ ${RWX_TMUX_BORDER_BACKGROUND} \ " } rwx_tmux_item_host() { printf "%s" "\ ${RWX_TMUX_ITEM_FOREGROUND}\ ${RWX_TMUX_BORDER_BACKGROUND} \ ${RWX_TMUX_ITEM_BACKGROUND}#{host}\ ${RWX_TMUX_BORDER_BACKGROUND} \ " } rwx_tmux_item_session() { printf "%s" "\ #{?session_many_attached,${RWX_TMUX_SESSION_MANY},\ #{?session_attached,${RWX_TMUX_SESSION_ONE},${RWX_TMUX_ITEM_FOREGROUND}}}\ ${RWX_TMUX_BORDER_BACKGROUND} \ ${RWX_TMUX_ITEM_BACKGROUND}#{session_name}\ ${RWX_TMUX_BORDER_BACKGROUND} \ " } rwx_tmux_item_time() { printf "%s" "\ ${RWX_TMUX_ITEM_FOREGROUND}\ ${RWX_TMUX_BORDER_BACKGROUND} \ ${RWX_TMUX_ITEM_BACKGROUND}%H:%M:%S\ ${RWX_TMUX_BORDER_BACKGROUND}#{?client_prefix,\ ${RWX_TMUX_PREFIX_FOREGROUND}${RWX_TMUX_PREFIX_CHARACTER}, }\ " } rwx_tmux_item_user() { # TODO constants printf "%s" "\ #{?uid,#[fg=green],#[fg=red]}\ ${RWX_TMUX_BORDER_BACKGROUND} \ ${RWX_TMUX_ITEM_BACKGROUND}#{user}\ ${RWX_TMUX_BORDER_BACKGROUND} \ " } rwx_tmux_item_window() { printf "%s" "\ ${RWX_TMUX_BORDER_BACKGROUND}#{?window_zoomed_flag,\ #{?pane_synchronized,#[fg=magenta][,#[fg=red][},\ #{?pane_synchronized,#[fg=blue][, }}\ \ #{?window_active,#[fg=green],\ #{?window_activity_flag,#[fg=red],${RWX_TMUX_ITEM_FOREGROUND}}}\ ${RWX_TMUX_ITEM_BACKGROUND}#{window_name}\ \ ${RWX_TMUX_BORDER_BACKGROUND}#{?window_zoomed_flag,\ #{?pane_synchronized,#[fg=magenta]],#[fg=red]]},\ #{?pane_synchronized,#[fg=blue]], }}\ " } # ╭──────┬───────╮ # │ tmux │ setup │ # ╰──────┴───────╯ #= tms #/ tmux_setup rwx_tmux_setup() { local file script if rwx_root; then file="/etc/tmux.conf" script="/etc/tmux.sh" else file="${HOME}/.tmux.conf" script="${HOME}/.tmux.sh" fi # FIXME skip parsing these functions rwx_file_write "${script}" "\ # ╭─────┬──────┬────────╮ # │ rwx │ tmux │ script │ # ╰─────┴──────┴────────╯ # return current server socket name rwx_tmux_server() { basename \"\${TMUX}\" | cut \\ --delimiter \",\" \\ --fields \"1\" } # return active & current servers socket names rwx_tmux_servers() { local active name root sockets text active=\"\$(rwx_tmux_server)\" root=\"\$(dirname \"\${TMUX}\")\" sockets=\"\$(find \"\${root}\" -type s -printf \"%P\\n\")\" while IFS= read -r name; do if tmux -L \"\${name}\" list-sessions >/dev/null; then text=\"\${text}\\ ${RWX_TMUX_RESET} \\ \" if [ \"\${name}\" = \"\${active}\" ]; then text=\"\${text}#[fg=green]\" else text=\"\${text}${RWX_TMUX_ITEM_FOREGROUND}\" fi text=\"\${text}\\ ${RWX_TMUX_BORDER_BACKGROUND} \\ ${RWX_TMUX_ITEM_BACKGROUND}\${name}\\ ${RWX_TMUX_BORDER_BACKGROUND} \\ \" fi done <