nix/home/program/bash/module/Tmux.nix

99 lines
2.3 KiB
Nix
Raw Normal View History

2024-04-06 03:03:58 +03:00
{ ... }: {
text = ''
# Create/attach to named session.
# By default uses current dir name.
# Usage: ta [NAME]
function ta() {
local name="''${1}"
# Set default name.
# [[ "''${name}" = "" ]] && name="main"
[[ "''${name}" = "" ]] && name=$(parse_alnum "''${PWD##*/}")
# Create session.
tmux new-session -s "''${name}" -d &> /dev/null
# Attach to session.
if _is_tmux; then
tmux switch-client -t "''${name}"
else
tmux attach-session -t "''${name}"
fi
}
# Detach from running session.
function td() {
tmux detach-client
}
# Detach all other tmux clients.
function tda() {
tmux detach-client -s $(tmux display-message -p '#S')
}
# List running sessions.
function tl() {
tmux list-sessions
}
# Assign name to session. Uses current dir name by default.
# Usage: tns [NAME]
function tns() {
local name="''${1}"
[[ "''${name}" = "" ]] && name=$(parse_alnum "''${PWD##*/}")
tmux rename-session "''${name}"
}
# Assign name to window. Uses current dir name by default.
# Usage: tnw [NAME]
function tnw() {
local name="''${1}"
[[ "''${name}" = "" ]] && name=$(parse_alnum "''${PWD##*/}")
tmux rename-window "''${name}"
}
# Kill specified session.
# By default uses current dir name.
# Usage: tk [NAME]
function tk() {
local name="''${1}"
[[ "''${name}" = "" ]] && name=$(parse_alnum "''${PWD##*/}")
tmux kill-session -t "''${name}"
}
# Kill all sessions.
function tka() {
local sessions=$(tmux list-sessions | sed -e 's/:.*//')
for session in $sessions; do
tmux kill-session -t "$session"
done
}
# Autocomplete with running sessions once.
function _complete_tmux_session() {
_autocomplete_first "$(tmux list-sessions 2> /dev/null | sed -e 's/:.*//')"
}
# Autocomplete with running sessions.
function _complete_tmux_sessions() {
_autocomplete "$(tmux list-sessions 2> /dev/null | sed -e 's/:.*//')"
}
# Autocomplete with current dir name and dirs inside this one.
function _complete_tmux_name() {
_autocomplete_first "''${PWD##*/}"$'\n'$(ls --classify | grep /$ | sed -e 's/\/$//')
}
complete -F _complete_tmux_session ta
complete -F _complete_tmux_sessions tk
complete -o nosort -F _complete_tmux_name tns tnw
'';
}