summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--Completion/X/Command/_xrandr50
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 <opk@zsh.org>
+
+ * 30987: Completion/X/Command/_xrandr: only call xrandr when
+ necessary and use _call_program
+
2013-01-14 Peter Stephenson <p.stephenson@samsung.com>
* 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