X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=autorandr.py;h=ad4b22b0fbeec18e7e89695d4c9a481f76cc74a9;hb=20fe858e0852cf40dc9b7e045f9e66bebc4ca022;hp=f62ad073b5b9ab118104a58d699df51debbf640e;hpb=ff75a031efc63ef6c6f645a971180f3f1f8ebc8c;p=deb_pkgs%2Fautorandr.git diff --git a/autorandr.py b/autorandr.py index f62ad07..ad4b22b 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,8 +765,11 @@ 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) @@ -836,6 +843,9 @@ def dispatch_call_to_sessions(argv): process_environ[name] = value display = process_environ["DISPLAY"] if "DISPLAY" in process_environ else None + # To allow scripts to detect batch invocation (especially useful for predetect) + process_environ["AUTORANDR_BATCH_PID"] = os.getpid() + if display and display not in X11_displays_done: try: pwent = pwd.getpwuid(uid) @@ -871,6 +881,9 @@ def main(argv): file=sys.stderr) sys.exit(posix.EX_USAGE) + if "-h" in options or "--help" in options: + exit_help() + # Batch mode if "--batch" in options: if ("DISPLAY" not in os.environ or not os.environ["DISPLAY"]) and os.getuid() == 0: @@ -905,6 +918,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: @@ -964,9 +978,6 @@ def main(argv): raise AutorandrException("Failed to remove profile '%s'" % (options["--remove"],), e) sys.exit(0) - if "-h" in options or "--help" in options: - exit_help() - detected_profiles = find_profiles(config, profiles) load_profile = False