From a016c0a4153c1efa7c768abd54d0de32f72ad286 Mon Sep 17 00:00:00 2001 From: aviau Date: Sun, 9 Jan 2022 12:57:42 -0500 Subject: [PATCH] create `--ignore-lid` flag --- README.md | 1 + autorandr.1 | 3 +++ autorandr.py | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e66f9da..d13080c 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ Contributors to this version of autorandr are: * Tomasz Bogdal * Victor Häggqvist * Jan-Oliver Kaiser +* Alexandre Viau ## Installation/removal diff --git a/autorandr.1 b/autorandr.1 index d20264b..4e7d4d1 100644 --- a/autorandr.1 +++ b/autorandr.1 @@ -56,6 +56,9 @@ Fingerprint the current hardware setup .BR \-\-match-edid Match displays based on edid instead of name .TP +.BR \-\-ignore-lid +By default, closed lids are considered as disconnected if other outputs are detected. This flag disables this behaviour. +.TP .BR \-\-force Force loading or reloading of a profile .TP diff --git a/autorandr.py b/autorandr.py index 6d0163c..b7940bc 100755 --- a/autorandr.py +++ b/autorandr.py @@ -541,7 +541,10 @@ def debug_regexp(pattern, string): return "Debug information would be available if the `regex' module was installed." -def parse_xrandr_output(): +def parse_xrandr_output( + *, + ignore_lid, +): "Parse the output of `xrandr --verbose' into a list of outputs" xrandr_output = os.popen("xrandr -q --verbose").read() if not xrandr_output: @@ -564,7 +567,11 @@ def parse_xrandr_output(): modes[output_name] = output_modes # consider a closed lid as disconnected if other outputs are connected - if sum(o.edid != None for o in outputs.values()) > 1: + if not ignore_lid and sum( + o.edid != None + for o + in outputs.values() + ) > 1: for output_name in outputs.keys(): if is_closed_lid(output_name): outputs[output_name].edid = None @@ -1281,10 +1288,32 @@ def read_config(options, directory): def main(argv): try: - opts, args = getopt.getopt(argv[1:], "s:r:l:d:cfh", - ["batch", "dry-run", "change", "cycle", "default=", "save=", "remove=", "load=", - "force", "fingerprint", "config", "debug", "skip-options=", "help", - "list", "current", "detected", "version", "match-edid"]) + opts, args = getopt.getopt( + argv[1:], + "s:r:l:d:cfh", + [ + "batch", + "dry-run", + "change", + "cycle", + "default=", + "save=", + "remove=", + "load=", + "force", + "fingerprint", + "config", + "debug", + "skip-options=", + "help", + "list", + "current", + "detected", + "version", + "match-edid", + "ignore-lid" + ] + ) except getopt.GetoptError as e: print("Failed to parse options: {0}.\n" "Use --help to get usage information.".format(str(e)), @@ -1341,7 +1370,12 @@ def main(argv): raise AutorandrException("Failed to load profiles", e) exec_scripts(None, "predetect") - config, modes = parse_xrandr_output() + + ignore_lid = "--ignore-lid" in options + + config, modes = parse_xrandr_output( + ignore_lid=ignore_lid, + ) if "--match-edid" in options: update_profiles_edid(profiles, config) @@ -1533,7 +1567,9 @@ def main(argv): raise AutorandrException("Failed to apply profile '%s'" % load_profile, e, True) if "--dry-run" not in options and "--debug" in options: - new_config, _ = parse_xrandr_output() + new_config, _ = parse_xrandr_output( + ignore_lid=ignore_lid, + ) if not is_equal_configuration(new_config, load_config): print("The configuration change did not go as expected:") print_profile_differences(new_config, load_config)