From: Phillip Berndt Date: Fri, 27 Mar 2015 16:33:08 +0000 (+0100) Subject: Screens can be connected but unused, but also disconnected and still in use X-Git-Tag: 1.0~66 X-Git-Url: https://git.donarmstrong.com/?p=deb_pkgs%2Fautorandr.git;a=commitdiff_plain;h=89cd69bec981d3ca5e49c34f56bf1ae6103850e9 Screens can be connected but unused, but also disconnected and still in use Detect that. --- diff --git a/autorandr.py b/autorandr.py index da5217b..571409f 100755 --- a/autorandr.py +++ b/autorandr.py @@ -83,16 +83,17 @@ class XrandrOutput(object): (?: # Differentiate disconnected and connected in first line disconnected | unknown\ connection | - (?Pconnected)\s+ # If connected: - (?: + (?Pconnected) + ) + (?:\s* (?Pprimary\ )? # Might be primary screen (?P[0-9]+)x(?P[0-9]+) # Resolution (might be overridden below!) \+(?P[0-9]+)\+(?P[0-9]+)\s+ # Position (?:\(0x[0-9a-fA-F]+\)\s+)? # XID (?P(?:normal|left|right|inverted))\s+ # Rotation (?:(?PX\ and\ Y|X|Y)\ axis)? # Reflection - )? # .. but everything of the above only if the screen is in use. - ).* + )? # .. but everything of the above only if the screen is in use. + (?:[\ \t]*\(.+)? (?:\s*(?: # Properties of the output Gamma: (?P[0-9\.: ]+) | # Gamma value Transform: (?P(?:[\-0-9\. ]+\s+){3}) | # Transformation matrix @@ -158,6 +159,8 @@ class XrandrOutput(object): def sort_key(self): "Return a key to sort the outputs for xrandr invocation" if not self.edid: + return -2 + if "off" in self.options: return -1 if "pos" in self.options: x, y = map(float, self.options["pos"].split("x")) @@ -210,11 +213,12 @@ class XrandrOutput(object): options = {} if not match["connected"]: - options["off"] = None edid = None - elif not match["width"]: - options["off"] = None + else: edid = "".join(match["edid"].strip().split()) if match["edid"] else "%s-%s" % (XrandrOutput.EDID_UNAVAILABLE, match["output"]) + + if not match["width"]: + options["off"] = None else: if match["mode_width"]: options["mode"] = "%sx%s" % (match["mode_width"], match["mode_height"]) @@ -246,7 +250,6 @@ class XrandrOutput(object): options["gamma"] = gamma if match["rate"]: options["rate"] = match["rate"] - edid = "".join(match["edid"].strip().split()) if match["edid"] else "%s-%s" % (XrandrOutput.EDID_UNAVAILABLE, match["output"]) return XrandrOutput(match["output"], edid, options), modes