mirror of
				https://github.com/ohmybash/oh-my-bash.git
				synced 2024-05-11 05:55:37 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			189 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#! bash oh-my-bash.module
 | 
						|
 | 
						|
# tmux completion
 | 
						|
# See: http://www.debian-administration.org/articles/317 for how to write more.
 | 
						|
# Usage: Put "source bash_completion_tmux.sh" into your .bashrc
 | 
						|
# Based upon the example at http://paste-it.appspot.com/Pj4mLycDE
 | 
						|
 | 
						|
_tmux_expand ()
 | 
						|
{
 | 
						|
    [ "$cur" != "${cur%\\}" ] && cur="$cur"'\';
 | 
						|
    if [[ "$cur" == \~*/* ]]; then
 | 
						|
        eval cur=$cur;
 | 
						|
    else
 | 
						|
        if [[ "$cur" == \~* ]]; then
 | 
						|
            cur=${cur#\~};
 | 
						|
            COMPREPLY=($( compgen -P '~' -u $cur ));
 | 
						|
            return ${#COMPREPLY[@]};
 | 
						|
        fi;
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
_tmux_filedir ()
 | 
						|
{
 | 
						|
    local IFS='
 | 
						|
';
 | 
						|
    _tmux_expand || return 0;
 | 
						|
    if [ "$1" = -d ]; then
 | 
						|
        COMPREPLY=(${COMPREPLY[@]} $( compgen -d -- $cur ));
 | 
						|
        return 0;
 | 
						|
    fi;
 | 
						|
    COMPREPLY=(${COMPREPLY[@]} $( eval compgen -f -- \"$cur\" ))
 | 
						|
}
 | 
						|
 | 
						|
function _tmux_complete_client() {
 | 
						|
    local IFS=$'\n'
 | 
						|
    local cur="${1}"
 | 
						|
    COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux -q list-clients 2>/dev/null | cut -f 1 -d ':')" -- "${cur}") )
 | 
						|
}
 | 
						|
function _tmux_complete_session() {
 | 
						|
    local IFS=$'\n'
 | 
						|
    local cur="${1}"
 | 
						|
    COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux -q list-sessions 2>/dev/null | cut -f 1 -d ':')" -- "${cur}") )
 | 
						|
}
 | 
						|
function _tmux_complete_window() {
 | 
						|
    local IFS=$'\n'
 | 
						|
    local cur="${1}"
 | 
						|
    local session_name="$(echo "${cur}" | sed 's/\\//g' | cut -d ':' -f 1)"
 | 
						|
    local sessions
 | 
						|
 | 
						|
    sessions="$(tmux -q list-sessions 2>/dev/null | sed -re 's/([^:]+:).*$/\1/')"
 | 
						|
    if [[ -n "${session_name}" ]]; then
 | 
						|
        sessions="${sessions}
 | 
						|
        $(tmux -q list-windows -t "${session_name}" 2>/dev/null | sed -re 's/^([^:]+):.*$/'"${session_name}"':\1/')"
 | 
						|
    fi
 | 
						|
    cur="$(echo "${cur}" | sed -e 's/:/\\\\:/')"
 | 
						|
    sessions="$(echo "${sessions}" | sed -e 's/:/\\\\:/')"
 | 
						|
    COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "${sessions}" -- "${cur}") )
 | 
						|
}
 | 
						|
 | 
						|
function _tmux {
 | 
						|
    local cur prev
 | 
						|
    local i cmd cmd_index option option_index
 | 
						|
    local opts=""
 | 
						|
    COMPREPLY=()
 | 
						|
    cur="${COMP_WORDS[COMP_CWORD]}"
 | 
						|
    prev="${COMP_WORDS[COMP_CWORD-1]}"
 | 
						|
 | 
						|
    if [ ${prev} == -f ]; then
 | 
						|
        _tmux_filedir
 | 
						|
    else
 | 
						|
    # Search for the command
 | 
						|
    local skip_next=0
 | 
						|
    for ((i=1; $i<=$COMP_CWORD; i++)); do
 | 
						|
        if [[ ${skip_next} -eq 1 ]]; then
 | 
						|
            #echo "Skipping"
 | 
						|
            skip_next=0;
 | 
						|
        elif [[ ${COMP_WORDS[i]} != -* ]]; then
 | 
						|
            cmd="${COMP_WORDS[i]}"
 | 
						|
            cmd_index=${i}
 | 
						|
            break
 | 
						|
        elif [[ ${COMP_WORDS[i]} == -f ]]; then
 | 
						|
            skip_next=1
 | 
						|
        fi
 | 
						|
    done
 | 
						|
 | 
						|
    # Search for the last option command
 | 
						|
    skip_next=0
 | 
						|
    for ((i=1; $i<=$COMP_CWORD; i++)); do
 | 
						|
        if [[ ${skip_next} -eq 1 ]]; then
 | 
						|
            #echo "Skipping"
 | 
						|
            skip_next=0;
 | 
						|
        elif [[ ${COMP_WORDS[i]} == -* ]]; then
 | 
						|
            option="${COMP_WORDS[i]}"
 | 
						|
            option_index=${i}
 | 
						|
            if [[ ${COMP_WORDS[i]} == -- ]]; then
 | 
						|
                break;
 | 
						|
            fi
 | 
						|
        elif [[ ${COMP_WORDS[i]} == -f ]]; then
 | 
						|
            skip_next=1
 | 
						|
        fi
 | 
						|
    done
 | 
						|
 | 
						|
    if [[ $COMP_CWORD -le $cmd_index ]]; then
 | 
						|
        # The user has not specified a command yet
 | 
						|
        COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux start-server \; list-commands | cut -d' ' -f1)" -- "${cur}") )
 | 
						|
    else
 | 
						|
        case ${cmd} in
 | 
						|
            attach-session|attach)
 | 
						|
            case "$prev" in
 | 
						|
                -t) _tmux_complete_session "${cur}" ;;
 | 
						|
                *) options="-t -d" ;;
 | 
						|
            esac ;;
 | 
						|
            detach-client|detach)
 | 
						|
            case "$prev" in
 | 
						|
                -t) _tmux_complete_client "${cur}" ;;
 | 
						|
                *) options="-t" ;;
 | 
						|
            esac ;;
 | 
						|
            lock-client|lockc)
 | 
						|
            case "$prev" in
 | 
						|
                -t) _tmux_complete_client "${cur}" ;;
 | 
						|
                *) options="-t" ;;
 | 
						|
            esac ;;
 | 
						|
            lock-session|locks)
 | 
						|
            case "$prev" in
 | 
						|
                -t) _tmux_complete_session "${cur}" ;;
 | 
						|
                *) options="-t -d" ;;
 | 
						|
            esac ;;
 | 
						|
            new-session|new)
 | 
						|
            case "$prev" in
 | 
						|
                -t) _tmux_complete_session "${cur}" ;;
 | 
						|
                -[n|d|s]) options="-d -n -s -t --" ;;
 | 
						|
                *)
 | 
						|
                if [[ ${COMP_WORDS[option_index]} == -- ]]; then
 | 
						|
                    _command_offset ${option_index}
 | 
						|
                else
 | 
						|
                    options="-d -n -s -t --"
 | 
						|
                fi
 | 
						|
                ;;
 | 
						|
            esac
 | 
						|
            ;;
 | 
						|
            refresh-client|refresh)
 | 
						|
            case "$prev" in
 | 
						|
                -t) _tmux_complete_client "${cur}" ;;
 | 
						|
                *) options="-t" ;;
 | 
						|
            esac ;;
 | 
						|
            rename-session|rename)
 | 
						|
            case "$prev" in
 | 
						|
                -t) _tmux_complete_session "${cur}" ;;
 | 
						|
                *) options="-t" ;;
 | 
						|
            esac ;;
 | 
						|
            source-file|source) _tmux_filedir ;;
 | 
						|
            has-session|has|kill-session)
 | 
						|
            case "$prev" in
 | 
						|
                -t) _tmux_complete_session "${cur}" ;;
 | 
						|
                *) options="-t" ;;
 | 
						|
            esac ;;
 | 
						|
            suspend-client|suspendc)
 | 
						|
            case "$prev" in
 | 
						|
                -t) _tmux_complete_client "${cur}" ;;
 | 
						|
                *) options="-t" ;;
 | 
						|
            esac ;;
 | 
						|
            switch-client|switchc)
 | 
						|
            case "$prev" in
 | 
						|
                -c) _tmux_complete_client "${cur}" ;;
 | 
						|
                -t) _tmux_complete_session "${cur}" ;;
 | 
						|
                *) options="-l -n -p -c -t" ;;
 | 
						|
            esac ;;
 | 
						|
 | 
						|
            send-keys|send)
 | 
						|
            case "$option" in
 | 
						|
                -t) _tmux_complete_window "${cur}" ;;
 | 
						|
                *) options="-t" ;;
 | 
						|
            esac ;;
 | 
						|
          esac # case ${cmd}
 | 
						|
        fi # command specified
 | 
						|
      fi # not -f
 | 
						|
 | 
						|
      if [[ -n "${options}" ]]; then
 | 
						|
          COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "${options}" -- "${cur}") )
 | 
						|
      fi
 | 
						|
 | 
						|
      return 0
 | 
						|
 | 
						|
}
 | 
						|
complete -F _tmux tmux
 | 
						|
 | 
						|
# END tmux completion
 | 
						|
 |