--- a/README.md +++ b/README.md @@ -142,6 +142,10 @@ as the default configuration without you having to change the system-wide configuration. +You can store default values for any option in an INI-file in +`~/config/autorandr/settings.ini` in a section `config`. The most useful +candidate for doing that is `skip-options`, if you need it. + ## Hook scripts Three more scripts can be placed in the configuration directory (as --- a/autorandr.py +++ b/autorandr.py @@ -42,6 +42,11 @@ from functools import reduce from itertools import chain +if sys.version_info.major == 2: + import ConfigParser as configparser +else: + import configparser + try: input = raw_input except NameError: @@ -49,6 +54,7 @@ virtual_profiles = [ # (name, description, callback) + ("off", "Disable all outputs", None), ("common", "Clone all connected outputs at the largest common resolution", None), ("clone-largest", "Clone all connected outputs with the largest resolution (scaled down if necessary)", None), ("horizontal", "Stack all connected outputs horizontally at their largest resolution", None), @@ -799,6 +805,11 @@ configuration[output].options["transform"] = "{},0,{},0,{},{},0,0,1".format(scale, mov_x, scale, mov_y) else: configuration[output].options["off"] = None + elif profile_name == "off": + for output in configuration: + for key in list(configuration[output].options.keys()): + del configuration[output].options[key] + configuration[output].options["off"] = None return configuration @@ -1002,6 +1013,14 @@ X11_displays_done.add(display) +def read_config(options, directory): + """Parse a configuration config.ini from directory and merge it into + the options dictionary""" + config = configparser.ConfigParser() + config.read(os.path.join(directory, "settings.ini")) + for key, value in config.items("config"): + options.setdefault("--%s" % key, value) + def main(argv): try: opts, args = getopt.getopt(argv[1:], "s:r:l:d:cfh", @@ -1040,6 +1059,7 @@ if os.path.isdir(system_profile_path): profiles.update(load_profiles(system_profile_path)) profile_symlinks.update(get_symlinks(system_profile_path)) + read_config(options, system_profile_path) # For the user's profiles, prefer the legacy ~/.autorandr if it already exists # profile_path is also used later on to store configurations profile_path = os.path.expanduser("~/.autorandr") @@ -1049,6 +1069,7 @@ if os.path.isdir(profile_path): 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"])) except Exception as e: