I have done this for one of my own tools ta, which is a function that switches to a tmux session, or creates it if it doesn’t exist:
# switch to existing tmux session, or create it.
# overrides workdir if session name is "Work"
function ta() {
case "$1" in
Work) workdir="${HOME}/Work/" ;;
*) workdir="${HOME}" ;;
esac
if tmux has-session -t "$@" &>/dev/null; then
tmux switch-client -t "$@"
else
tmux new-session -A -D -d -c "${workdir}" -s "$@"
tmux switch-client -t "$@"
fi
}
# complete tmux sessions
# exclude current session from completion
function _ta_completion() {
command="${1}"
completing="${2}"
previous="${3}"
[[ "${command}" != 'ta' ]] && return
current_session="$(tmux display-message -p '#S')"
IFS=$'\a' COMPREPLY=( $(tmux list-sessions -F '#{session_name}' | grep -i "^${completing}" | grep -v "^${current_session}$"| tr '\n' '\a' ) )
}
# enable completion for ta function
complete -F _ta_completion ta
Usage
$ tmux (starts session "0" by default)
$ ta Personal # create session "Personal" because it doesn't exist
$ ta Work # create session "Work" because it doesn't exist
$ ta <tab>
0 Personal
$ ta P<tab> -> $ta Personal
$ ta <tab>
0 Work
Here’s an article that does this: https://iridakos.com/programming/2018/03/01/bash-programmable-completion-tutorial
I have done this for one of my own tools
ta
, which is a function that switches to a tmux session, or creates it if it doesn’t exist:Usage