X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=autorandr.py;h=5082ebd08d6489e3d092766ec463dbb189af9ef7;hb=f171c8a5ad91dd586320d89c504c316d18f3d056;hp=16b67df0ad5a28ed812e38f20be186d4ca787196;hpb=646cc03f674a485228e5ed5dcc6774479b65f017;p=deb_pkgs%2Fautorandr.git diff --git a/autorandr.py b/autorandr.py index 16b67df..5082ebd 100755 --- a/autorandr.py +++ b/autorandr.py @@ -345,6 +345,8 @@ class XrandrOutput(object): for line in configuration.split("\n"): if line: line = line.split(None, 1) + if line and line[0].startswith("#"): + continue options[line[0]] = line[1] if len(line) > 1 else None edid = None @@ -464,7 +466,7 @@ def load_profiles(profile_path): if not os.path.isfile(config_name) or not os.path.isfile(setup_name): continue - edids = dict([ x.strip().split() for x in open(setup_name).readlines() if x.strip() ]) + edids = dict([ x.split() for x in (y.strip() for y in open(setup_name).readlines()) if x and x[0] != "#" ]) config = {} buffer = [] @@ -742,6 +744,8 @@ def exec_scripts(profile_path, script_name, meta_information=None): and system-wide configuration folders, named script_name or residing in subdirectories named script_name.d. + If profile_path is None, only global scripts will be invoked. + meta_information is expected to be an dictionary. It will be passed to the block scripts in the environment, as variables called AUTORANDR_. @@ -761,13 +765,19 @@ def exec_scripts(profile_path, script_name, meta_information=None): if not os.path.isdir(user_profile_path): user_profile_path = os.path.join(os.environ.get("XDG_CONFIG_HOME", os.path.expanduser("~/.config")), "autorandr") - for folder in chain((profile_path, os.path.dirname(profile_path), user_profile_path), - (os.path.join(x, "autorandr") for x in os.environ.get("XDG_CONFIG_DIRS", "/etc/xdg").split(":"))): + candidate_directories = chain((user_profile_path,), (os.path.join(x, "autorandr") for x in os.environ.get("XDG_CONFIG_DIRS", "/etc/xdg").split(":"))) + if profile_path: + candidate_directories = chain((profile_path,), candidate_directories) + + for folder in candidate_directories: if script_name not in ran_scripts: script = os.path.join(folder, script_name) if os.access(script, os.X_OK | os.F_OK): - all_ok &= subprocess.call(script, env=env) != 0 + try: + all_ok &= subprocess.call(script, env=env) != 0 + except: + raise AutorandrException("Failed to execute user command: %s" % (script,)) ran_scripts.add(script_name) script_folder = os.path.join(folder, "%s.d" % script_name) @@ -777,7 +787,10 @@ def exec_scripts(profile_path, script_name, meta_information=None): if check_name not in ran_scripts: script = os.path.join(script_folder, file_name) if os.access(script, os.X_OK | os.F_OK): - all_ok &= subprocess.call(script, env=env) != 0 + try: + all_ok &= subprocess.call(script, env=env) != 0 + except: + raise AutorandrException("Failed to execute user command: %s" % (script,)) ran_scripts.add(check_name) return all_ok @@ -899,6 +912,7 @@ def main(argv): profile_symlinks = { k: v for k, v in profile_symlinks.items() if v in (x[0] for x in virtual_profiles) or v in profiles } + exec_scripts(None, "predetect") config, modes = parse_xrandr_output() if "--fingerprint" in options: @@ -1042,6 +1056,8 @@ def main(argv): apply_configuration(load_config, config, True) apply_configuration(load_config, config, False) exec_scripts(scripts_path, "postswitch", script_metadata) + except AutorandrException as e: + raise AutorandrException("Failed to apply profile '%s'" % load_profile, e, e.report_bug) except Exception as e: raise AutorandrException("Failed to apply profile '%s'" % load_profile, e, True)