]> git.donarmstrong.com Git - deb_pkgs/autorandr.git/commitdiff
Update upstream source from tag 'upstream/1.5'
authorDon Armstrong <don@donarmstrong.com>
Tue, 3 Apr 2018 20:54:07 +0000 (13:54 -0700)
committerDon Armstrong <don@donarmstrong.com>
Tue, 3 Apr 2018 20:54:07 +0000 (13:54 -0700)
Update to upstream version '1.5'
with Debian dir a27bfe42bcb7c12998085929e69bad1eee3faf69

README.md
autorandr.py
setup.py

index 7268c427ae64a06918c28ad636e747429cb7a82d..999f353ceca200629b7ce82493925abba53bf65a 100644 (file)
--- a/README.md
+++ b/README.md
@@ -62,20 +62,22 @@ You can use the `autorandr.py` script as a stand-alone binary. If you'd like to
 install it as a system-wide application, there is a Makefile included that also
 places some configuration files in appropriate directories such that autorandr
 is invoked automatically when a monitor is connected or removed, the system
-wakes up from suspend, or a user logs into an X11 session.
-
-For Debian-based distributions (including Ubuntu) it is recommended to call
-`make deb` to obtain a package that can be installed and removed with `dpkg`.
-
-On Arch Linux, there is [an aur package
-available](https://aur.archlinux.org/packages/autorandr-git/).
-
-autorandr is also packaged in the [nix package manager](https://nixos.org/nix/)
-repositories.
-
-On other distributions you can install autorandr by calling `make install` and
-remove it by calling `make uninstall`. Run `make` without arguments to obtain a
-list of what exactly will be installed.
+wakes up from suspend, or a user logs into an X11 session. Run `make install`
+as root to install it.
+
+If you prefer to have a system wide install managed by your package manager,
+you can
+
+* Use the [aur package](https://aur.archlinux.org/packages/autorandr-git/) on Arch
+* Use the [official Debian package](https://packages.debian.org/sid/x11/autorandr) on sid
+* Use the [ebuild from zugaina](https://gpo.zugaina.org/x11-misc/autorandr) on Gentoo.
+* Use the
+  [nix package](https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/misc/autorandr.nix)
+  on NixOS.
+* Use the automated nightlies generated by the
+  [openSUSE build service](https://build.opensuse.org/package/show/home:phillipberndt/autorandr)
+  for various distributions (RPM and DEB based).
+* Build a .deb-file from the source tree using `make deb`.
 
 We appreciate packaging scripts for other distributions, please file a pull
 request if you write one.
@@ -90,9 +92,6 @@ or simply
 
 if you prefer to use a stable version.
 
-Automatically generated packages versions are available from the
-[openSUSE build service](https://build.opensuse.org/package/show/home:phillipberndt/autorandr).
-
 ## How to use
 
 Save your current display configuration and setup with:
@@ -146,7 +145,9 @@ 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
+## Advanced usage
+
+### Hook scripts
 
 Three more scripts can be placed in the configuration directory (as 
 (as defined by the [XDG spec](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html),
@@ -195,8 +196,23 @@ a new monitor, then you can use a `predetect` script to delay the execution.
 Write e.g. `sleep 1` into that file to make autorandr wait a second before
 running `xrandr`.
 
+### Wildcard EDID matching
+
+The EDID strings in the `~/.config/autorandr/*/setup` files may contain an
+asterisk to enable wildcard matching: Such EDIDs are matched against connected
+monitors using the usual file name globbing rules. This can be used to create
+profiles matching multiple (or any) monitors.
+
 ## Changelog
 
+**autorandr 1.5**
+
+* *2018-01-03* Add --version
+* *2018-01-04* Fixed vertical/horizontal/clone-largest virtual profiles
+* *2018-03-07* Output all non-error messages to stdout instead of stderr
+* *2018-03-25* Add --detected and --current to filter the profile list output
+* *2018-03-25* Allow wildcard matching in EDIDs
+
 **autorandr 1.4**
 
 * *2017-12-22* Fixed broken virtual profile support
index 05b2a5c6c8bed96b8ca7c0e7138a1f049b93529e..5a0a6860fea0c82bf72e1521781cbd06513f71a4 100755 (executable)
@@ -26,6 +26,7 @@ from __future__ import print_function
 
 import binascii
 import copy
+import fnmatch
 import getopt
 import hashlib
 import os
@@ -47,6 +48,8 @@ if sys.version_info.major == 2:
 else:
     import configparser
 
+__version__ = "1.5"
+
 try:
     input = raw_input
 except NameError:
@@ -71,13 +74,16 @@ Usage: autorandr [options]
 -s, --save <profile>    save your current setup to profile <profile>
 -r, --remove <profile>  remove profile <profile>
 --batch                 run autorandr for all users with active X11 sessions
+--current               only list current (active) configuration(s)
 --config                dump your current xrandr setup
 --debug                 enable verbose output
+--detected              only list detected (available) configuration(s)
 --dry-run               don't change anything, only print the xrandr commands
 --fingerprint           fingerprint your current hardware setup
 --force                 force (re)loading of a profile
 --skip-options <option> comma separated list of xrandr arguments (e.g. "gamma")
                         to skip both in detecting changes and applying a profile
+--version               show version information and exit
 
  If no suitable profile can be identified, the current configuration is kept.
  To change this behaviour and switch to a fallback configuration, specify
@@ -397,6 +403,10 @@ class XrandrOutput(object):
                 return hashlib.md5(binascii.unhexlify(other.edid)).hexdigest() == self.edid
             if len(self.edid) != 32 and len(other.edid) == 32 and not self.edid.startswith(XrandrOutput.EDID_UNAVAILABLE):
                 return hashlib.md5(binascii.unhexlify(self.edid)).hexdigest() == other.edid
+            if "*" in self.edid:
+                return fnmatch.fnmatch(other.edid, self.edid)
+            elif "*" in other.edid:
+                return fnmatch.fnmatch(self.edid, other.edid)
         return self.edid == other.edid
 
     def __ne__(self, other):
@@ -773,8 +783,8 @@ def generate_virtual_profile(configuration, modes, profile_name):
                     if a["preferred"]:
                         score += 10**6
                     return score
-                modes = sorted(modes[output], key=key)
-                mode = modes[-1]
+                output_modes = sorted(modes[output], key=key)
+                mode = output_modes[-1]
                 configuration[output].options["mode"] = mode["name"]
                 configuration[output].options["rate"] = mode["rate"]
                 configuration[output].options["pos"] = pos_specifier % shift
@@ -793,8 +803,8 @@ def generate_virtual_profile(configuration, modes, profile_name):
                     if a["preferred"]:
                         score += 10**6
                     return score
-                modes = sorted(modes[output], key=key)
-                mode = modes[-1]
+                output_modes = sorted(modes[output], key=key)
+                mode = output_modes[-1]
                 configuration[output].options["mode"] = mode["name"]
                 configuration[output].options["rate"] = mode["rate"]
                 configuration[output].options["pos"] = "0x0"
@@ -817,18 +827,18 @@ def print_profile_differences(one, another):
     "Print the differences between two profiles for debugging"
     if one == another:
         return
-    print("| Differences between the two profiles:", file=sys.stderr)
+    print("| Differences between the two profiles:")
     for output in set(chain.from_iterable((one.keys(), another.keys()))):
         if output not in one:
             if "off" not in another[output].options:
-                print("| Output `%s' is missing from the active configuration" % output, file=sys.stderr)
+                print("| Output `%s' is missing from the active configuration" % output)
         elif output not in another:
             if "off" not in one[output].options:
-                print("| Output `%s' is missing from the new configuration" % output, file=sys.stderr)
+                print("| Output `%s' is missing from the new configuration" % output)
         else:
             for line in one[output].verbose_diff(another[output]):
-                print("| [Output %s] %s" % (output, line), file=sys.stderr)
-    print("\\-", file=sys.stderr)
+                print("| [Output %s] %s" % (output, line))
+    print("\\-")
 
 
 def exit_help():
@@ -1026,7 +1036,8 @@ def main(argv):
     try:
         opts, args = getopt.getopt(argv[1:], "s:r:l:d:cfh",
                                    ["batch", "dry-run", "change", "default=", "save=", "remove=", "load=",
-                                    "force", "fingerprint", "config", "debug", "skip-options=", "help"])
+                                    "force", "fingerprint", "config", "debug", "skip-options=", "help",
+                                    "current", "detected", "version"])
     except getopt.GetoptError as e:
         print("Failed to parse options: {0}.\n"
               "Use --help to get usage information.".format(str(e)),
@@ -1038,6 +1049,14 @@ def main(argv):
     if "-h" in options or "--help" in options:
         exit_help()
 
+    if "--version" in options:
+        print("autorandr " + __version__)
+        sys.exit(0)
+
+    if "--current" in options and "--detected" in options:
+        print("--current and --detected are mutually exclusive.", file=sys.stderr)
+        sys.exit(posix.EX_USAGE)
+
     # Batch mode
     if "--batch" in options:
         if ("DISPLAY" not in os.environ or not os.environ["DISPLAY"]) and os.getuid() == 0:
@@ -1165,16 +1184,24 @@ def main(argv):
 
         for profile_name in profiles.keys():
             if profile_blocked(os.path.join(profile_path, profile_name), block_script_metadata):
-                print("%s (blocked)" % profile_name, file=sys.stderr)
+                if "--current" not in options and "--detected" not in options:
+                    print("%s (blocked)" % profile_name)
                 continue
             props = []
             if profile_name in detected_profiles:
                 props.append("(detected)")
                 if ("-c" in options or "--change" in options) and not load_profile:
                     load_profile = profile_name
+            elif "--detected" in options:
+                continue
             if profile_name in current_profiles:
                 props.append("(current)")
-            print("%s%s%s" % (profile_name, " " if props else "", " ".join(props)), file=sys.stderr)
+            elif "--current" in options:
+                continue
+            if "--current" in options or "--detected" in options:
+                print("%s" % (profile_name, ))
+            else:
+                print("%s%s%s" % (profile_name, " " if props else "", " ".join(props)))
             if not configs_are_equal and "--debug" in options and profile_name in detected_profiles:
                 print_profile_differences(config, profiles[profile_name]["config"])
 
index 7282c7c45ee05bea8d5f29ddfd5623a486391538..28562ec3d805080c65b4088b98dc18b390b37156 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -2,14 +2,14 @@ from setuptools import setup
 
 
 try:
-    long_description = open('README.md').read()
+    long_description = open('README.rst').read()
 except:
     long_description = 'Automatically select a display configuration based on connected devices'
 
 setup(
     name='autorandr',
 
-    version='1.4-1',
+    version='1.5-1',
 
     description='Automatically select a display configuration based on connected devices',
     long_description=long_description,