diff options
author | Oliver Kiddle <opk@users.sourceforge.net> | 2013-01-21 00:14:08 +0000 |
---|---|---|
committer | Oliver Kiddle <opk@users.sourceforge.net> | 2013-01-21 00:14:08 +0000 |
commit | 27c5a0d7744ffeaf677b097adbe9a094a3a49025 (patch) | |
tree | 20e5279474f589177a6c4efc5105a5fbaf57e05b /Completion/X | |
parent | 0969fb91fa3dcf461a52f8dbda5313475c39f603 (diff) | |
download | zsh-27c5a0d7744ffeaf677b097adbe9a094a3a49025.tar.gz zsh-27c5a0d7744ffeaf677b097adbe9a094a3a49025.tar.xz zsh-27c5a0d7744ffeaf677b097adbe9a094a3a49025.zip |
30987: only call xrandr when necessary and use _call_program
Diffstat (limited to 'Completion/X')
-rw-r--r-- | Completion/X/Command/_xrandr | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/Completion/X/Command/_xrandr b/Completion/X/Command/_xrandr index 9058610b2..9d9323c69 100644 --- a/Completion/X/Command/_xrandr +++ b/Completion/X/Command/_xrandr @@ -1,13 +1,9 @@ #compdef xrandr -local context state line -typeset -A opt_args -local outputs modes expl -# User configurable. TODO -- styles? -outputs=($(xrandr|sed -ne 's/^\([^[[:space:]]\+]*\) connected .*$/\1/p')) -modes=($(xrandr|sed -ne 's/^[[:space:]]\+\([[:digit:]]\+x[[:digit:]]\+\).*$/\1/p'|sort -nr|uniq)) +local curcontext="$curcontext" state line expl +typeset -A opt_args -_arguments \ +_arguments -C \ '(-d -display)'{-d,-display}':X display:_x_display' \ '-help[display help]' \ '(-o --orientation)'{-o,--orientation}':rotation:(normal inverted left right 0 1 2 3)' \ @@ -25,18 +21,18 @@ _arguments \ '--fb:size:' \ '--fbmm:size:' \ '--dpi:dpi:' \ - "*--output:output to reconfigure:($outputs)" \ + "*--output:output to reconfigure:->outputs" \ '*--auto' \ - "*--mode:mode:($modes)" \ + "*--mode:mode:->modes" \ '*--preferred' \ '*--pos:position:' \ '*--reflect:axes:(normal x y xy)' \ '*--rotate:rotation:(normal inverted left right)' \ - "*--left-of:relative position to:($outputs)" \ - "*--right-of:relative position to:($outputs)" \ - "*--above:relative position to:($outputs)" \ - "*--below:relative position to:($outputs)" \ - "*--same-as:relative position to:($outputs)" \ + "*--left-of:relative position to:->outputs" \ + "*--right-of:relative position to:->outputs" \ + "*--above:relative position to:->outputs" \ + "*--below:relative position to:->outputs" \ + "*--same-as:relative position to:->outputs" \ '*--set:property:(Backlight scaling\ mode):value:->value' \ '*--scale:output scaling:' \ '*--transform:transformation matrix:' \ @@ -48,15 +44,25 @@ _arguments \ '--noprimary' \ '*--newmode:name: :clock MHz: :hdisp: :hsync-start: :hsync-end: :htotal: :vdisp: :vsync-start: :vsync-end: :vtotal:' \ '*--rmmode:Mode name:' \ - "*--addmode:output:($outputs):name:" \ - "*--delmode:output:($outputs):name:" \ + "*--addmode:output:->outputs:name" \ + "*--delmode:output:->outputs:name" \ && return 0 -if [[ $state == value ]]; then +case $state in + value) case $words[CURRENT-1] in - (scaling* mode) - _description value expl "output property 'scaling mode'" - compadd "$@" "$expl[@]" None Full Center Full\ aspect && return 0 - ;; + (scaling* mode) + _description value expl "output property 'scaling mode'" + compadd "$@" "$expl[@]" None Full Center Full\ aspect && return 0 + ;; esac -fi + ;; + outputs) + _wanted outputs expl output compadd \ + ${(uo)${(M)${(f)"$(_call_program outputs xrandr)"}:#* connected*}%% *} && return 0 + ;; + modes) + _wanted modes expl mode compadd \ + ${(Mun)$(_call_program modes xrandr):#[0-9]##x[0-9]##} && return 0 + ;; +esac |