# bash completion for xrandr -*- shell-script -*- _xrandr() { local cur prev words cword _init_completion || return case "$prev" in -display | -d | -help | -s | --size | -r | --rate | --refresh | --screen | --fb | --fbmm | \ --dpi | --pos | --set | --scale | --transform | --crtc | --panning | --gamma | \ --newmode | --rmmode | --addmode | --delmode) return ;; --output | --left-of | --right-of | --above | --below | --same-as) local outputs=$("$1" | awk '/connected/ {print $1}') COMPREPLY=($(compgen -W "$outputs" -- "$cur")) return ;; --mode) local i output for ((i = 1; i < cword; i++)); do if [[ ${words[i]} == --output ]]; then output=${words[i + 1]} break fi done if [[ -v output ]]; then local modes=$("$1" | command sed -e "1,/^$output / d" \ -e "/connected/,$ d" \ -e "s/\([^[:space:]]\)[[:space:]].*/\1/") COMPREPLY=($(compgen -W "$modes" -- "$cur")) fi return ;; -o | --orientation) COMPREPLY=($(compgen -W 'normal inverted left right 0 1 2 3' -- \ "$cur")) return ;; --reflect) COMPREPLY=($(compgen -W 'normal x y xy' -- "$cur")) return ;; --rotate) COMPREPLY=($(compgen -W 'normal inverted left right' -- "$cur")) return ;; --setprovideroutputsource | --setprovideroffloadsink) local providers=$("$1" --listproviders 2>/dev/null | command sed -ne 's/.* name:\([^ ]*\).*/\1/p') COMPREPLY=($(compgen -W "$providers" -- "$cur")) # TODO 2nd arg needed, is that a provider as well? return ;; esac COMPREPLY=($(compgen -W '$("$1" -help 2>&1 | command sed -e "s/ or / /g" -e "s/<[^>]*>]//g" | _parse_help -)' \ -- "$cur")) } && complete -F _xrandr xrandr # ex: filetype=sh