From 27c5a0d7744ffeaf677b097adbe9a094a3a49025 Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Mon, 21 Jan 2013 00:14:08 +0000 Subject: 30987: only call xrandr when necessary and use _call_program --- ChangeLog | 7 ++++++- Completion/X/Command/_xrandr | 50 +++++++++++++++++++++++++------------------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index e353225dc..cfad073d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-01-20 Oliver Kiddle + + * 30987: Completion/X/Command/_xrandr: only call xrandr when + necessary and use _call_program + 2013-01-14 Peter Stephenson * 30960: Alexey Bezhan: Completion/Unix/Command/_django: @@ -450,5 +455,5 @@ ***************************************************** * This is used by the shell to define $ZSH_PATCHLEVEL -* $Revision: 1.5786 $ +* $Revision: 1.5787 $ ***************************************************** 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 -- cgit 1.4.1