Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Changes to xrandr completion



On 15 Jan, gi1242+zsh@xxxxxxxxx wrote:
> I'd recommend against this! On some (buggy) systems running xrandr polls
> the displays / checks for connected displays, and sometimes blanks the
> screen. (It sometimes takes time too).
> 
> On nVidia hardware I'm not sure what will happen.
> 
> Any chance you would consider an opt-in version by which xrandr is not
> invoked, unless the user has an zstyle option set?

It doesn't seem to matter on my nVidia hardware. At the very least the
function should use _call_program which does make it possible to disable
it. It's also better to only run the command when it actually is needed.
The patch below does this and also takes Christian Neukirchen's nested
zsh expansions instead of the mix of sed, sort and uniq.

Oliver

Index: Completion/X/Command/_xrandr
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/X/Command/_xrandr,v
retrieving revision 1.4
diff -u -r1.4 _xrandr
--- Completion/X/Command/_xrandr	5 Jan 2013 20:46:46 -0000	1.4
+++ Completion/X/Command/_xrandr	18 Jan 2013 11:19:05 -0000
@@ -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 @@
   '--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 @@
   '--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



Messages sorted by: Reverse Date, Date, Thread, Author