diff --git a/completions/screen b/completions/screen index e370c8ea..9e4b33cf 100644 --- a/completions/screen +++ b/completions/screen @@ -4,9 +4,23 @@ have screen || return _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() {