]> git.donarmstrong.com Git - deb_pkgs/autorandr.git/blobdiff - autorandr.py
Python: Python 3 compatibility restored
[deb_pkgs/autorandr.git] / autorandr.py
index 0dfd0ca8142de01970eaab1a4018852e4aa15aa0..1225491d9fc492923159a817d7b026ee142a11bc 100755 (executable)
@@ -322,6 +322,10 @@ def load_profiles(profile_path):
             else:
                 buffer.append(line)
 
+        for output_name in list(config.keys()):
+            if "off" in config[output_name].options:
+                del config[output_name]
+
         profiles[profile] = config
 
     return profiles
@@ -383,8 +387,9 @@ def apply_configuration(configuration, dry_run=False):
     for output in outputs:
         if not configuration[output].edid:
             argv += configuration[output].option_vector
-    if subprocess.call(argv) != 0:
-        return False
+    if argv != base_argv:
+        if subprocess.call(argv) != 0:
+            return False
 
     # Enable remaining outputs in pairs of two
     remaining_outputs = [ x for x in outputs if configuration[x].edid ]
@@ -392,6 +397,12 @@ def apply_configuration(configuration, dry_run=False):
         if subprocess.call((base_argv[:] + configuration[remaining_outputs[index]].option_vector + (configuration[remaining_outputs[index + 1]].option_vector if index < len(remaining_outputs) - 1 else []))) != 0:
             return False
 
+def add_unused_outputs(source_configuration, target_configuration):
+    "Add outputs that are missing in target to target, in 'off' state"
+    for output_name, output in source_configuration.items():
+        if output_name not in target_configuration:
+            target_configuration[output_name] = XrandrOutput(output_name, output.edid, { "off": None })
+
 def generate_virtual_profile(configuration, modes, profile_name):
     "Generate one of the virtual profiles"
     configuration = copy.deepcopy(configuration)
@@ -515,7 +526,12 @@ def main(argv):
         if load_profile in ( x[0] for x in virtual_profiles ):
             profile = generate_virtual_profile(config, modes, load_profile)
         else:
-            profile = profiles[load_profile]
+            try:
+                profile = profiles[load_profile]
+            except KeyError:
+                print("Failed to load profile '%s':\nProfile not found" % load_profile, file=sys.stderr)
+                sys.exit(1)
+        add_unused_outputs(config, profile)
         if profile == config and not "-f" in options and not "--force" in options:
             print("Config already loaded")
             sys.exit(0)