X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=autorandr.py;h=7ad9736b136f516a7f0309a3b80b17f907b53809;hb=bfe931a2463eb5f374dfd054a53dbeea1786bff6;hp=1c4ac4ad94d315e6fb5ff38e233eb3219e67ddc6;hpb=cf4848fe0fe4db3d93477a130dca686e804fb8ff;p=deb_pkgs%2Fautorandr.git diff --git a/autorandr.py b/autorandr.py index 1c4ac4a..7ad9736 100755 --- a/autorandr.py +++ b/autorandr.py @@ -44,7 +44,7 @@ from itertools import chain try: from packaging.version import Version -except ModuleNotFound: +except ModuleNotFoundError: from distutils.version import LooseVersion as Version if sys.version_info.major == 2: @@ -80,6 +80,7 @@ Usage: autorandr [options] --batch run autorandr for all users with active X11 sessions --current only list current (active) configuration(s) --config dump your current xrandr setup +--cycle automatically load the next detected profile --debug enable verbose output --detected only list detected (available) configuration(s) --dry-run don't change anything, only print the xrandr commands @@ -1214,7 +1215,7 @@ def read_config(options, directory): def main(argv): try: opts, args = getopt.getopt(argv[1:], "s:r:l:d:cfh", - ["batch", "dry-run", "change", "default=", "save=", "remove=", "load=", + ["batch", "dry-run", "change", "cycle", "default=", "save=", "remove=", "load=", "force", "fingerprint", "config", "debug", "skip-options=", "help", "list", "current", "detected", "version"]) except getopt.GetoptError as e: @@ -1269,8 +1270,12 @@ def main(argv): profiles.update(load_profiles(profile_path)) profile_symlinks.update(get_symlinks(profile_path)) read_config(options, profile_path) - # Sort by descending mtime - profiles = OrderedDict(sorted(profiles.items(), key=lambda x: -x[1]["config-mtime"])) + # Sort by mtime + sort_direction = -1 + if "--cycle" in options: + # When cycling through profiles, put the profile least recently used to the top of the list + sort_direction = 1 + profiles = OrderedDict(sorted(profiles.items(), key=lambda x: sort_direction * x[1]["config-mtime"])) except Exception as e: raise AutorandrException("Failed to load profiles", e) @@ -1379,6 +1384,7 @@ def main(argv): print("%s (blocked)" % profile_name) continue props = [] + is_current_profile = profile_name in current_profiles if profile_name in detected_profiles: if len(detected_profiles) == 1: index = 1 @@ -1386,12 +1392,13 @@ def main(argv): else: index = detected_profiles.index(profile_name) + 1 props.append("(detected) (%d%s match)" % (index, ["st", "nd", "rd"][index - 1] if index < 4 else "th")) - if ("-c" in options or "--change" in options) and index < best_index: - load_profile = profile_name - best_index = index + if index < best_index: + if "-c" in options or "--change" in options or ("--cycle" in options and not is_current_profile): + load_profile = profile_name + best_index = index elif "--detected" in options: continue - if profile_name in current_profiles: + if is_current_profile: props.append("(current)") elif "--current" in options: continue @@ -1404,7 +1411,7 @@ def main(argv): if "-d" in options: options["--default"] = options["-d"] - if not load_profile and "--default" in options and ("-c" in options or "--change" in options): + if not load_profile and "--default" in options and ("-c" in options or "--change" in options or "--cycle" in options): load_profile = options["--default"] if load_profile: @@ -1423,7 +1430,7 @@ def main(argv): scripts_path = profile["path"] except KeyError: raise AutorandrException("Failed to load profile '%s': Profile not found" % load_profile) - if load_profile in detected_profiles and detected_profiles[0] != load_profile: + if "--dry-run" not in options: update_mtime(os.path.join(scripts_path, "config")) add_unused_outputs(config, load_config) if load_config == dict(config) and "-f" not in options and "--force" not in options: