diff options
Diffstat (limited to 'completions/screen')
-rw-r--r-- | completions/screen | 60 |
1 files changed, 44 insertions, 16 deletions
diff --git a/completions/screen b/completions/screen index 952d9766..7132d064 100644 --- a/completions/screen +++ b/completions/screen @@ -1,18 +1,29 @@ -# bash completion for screen +# bash completion for screen -*- shell-script -*- -have screen && _screen_sessions() { - COMPREPLY=( $( compgen -W "$( command screen -ls | sed -ne \ - 's|^\t\{1,\}\([0-9]\{1,\}\.[^\t]\{1,\}\).*'"$1"'.*$|\1|p' )" \ - -- "$cur" ) ) + local sessions=( $( command screen -ls | sed -ne \ + 's|^\t\{1,\}\([0-9]\{1,\}\.[^\t]\{1,\}\).*'"$1"'.*$|\1|p' ) ) + if [[ $cur == +([0-9])?(.*) ]]; then + # Complete sessions including pid prefixes + COMPREPLY=( $( compgen -W '${sessions[@]}' -- "$cur" ) ) + else + # Create unique completions, dropping pids where possible + local -A res + local i tmp + for i in ${sessions[@]}; do + res[${i/#+([0-9])./}]+=" $i" + done + for i in ${!res[@]}; do + [[ ${res[$i]} == \ *\ * ]] && tmp+=" ${res[$i]}" || tmp+=" $i" + done + COMPREPLY=( $( compgen -W '$tmp' -- "$cur" ) ) + fi } && _screen() { local cur prev words cword - - COMPREPLY=() - _get_comp_words_by_ref cur prev words cword + _init_completion || return if ((cword > 2)); then case ${words[cword-2]} in @@ -23,6 +34,22 @@ _screen() esac fi + local i + for (( i=1; i <= cword; i++ )); do + case ${words[i]} in + -r|-R|-d|-D|-x|-s|-c|-T|-e|-h|-p|-S|-t) + (( i++ )) + continue + ;; + -*) + continue + ;; + esac + + _command_offset $i + return + done + case $prev in -[rR]) # list detached @@ -47,20 +74,21 @@ _screen() _filedir return 0 ;; + -T) + _terms + return 0 + ;; + -e|-h|-p|-S|-t) + return 0 + ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '-a -A -c -d -D -e -f -fn -fa -h -i -ln \ - -list -L -m -O -p -q -r -R -s -S -t -U -v -wipe -x -X --help \ + -list -L -m -O -p -q -r -R -s -S -t -T -U -v -wipe -x -X --help \ --version' -- "$cur" ) ) fi } && -complete -F _screen -o default screen +complete -F _screen screen -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: # ex: ts=4 sw=4 et filetype=sh |