From: Phillip Berndt Date: Fri, 16 Jan 2015 06:51:53 +0000 (+0100) Subject: Revert "Removed non-trivial code by Stefan Tomanek" X-Git-Tag: 1.0~106 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=1cf769de2fbb0506fc65d7cea1be96b4dc821d03;p=deb_pkgs%2Fautorandr.git Revert "Removed non-trivial code by Stefan Tomanek" This reverts commit bbe8f8b547256542ad332bfee1614cf7137f9e5d. See https://github.com/wertarbyte/autorandr/issues/24 Conflicts: autorandr --- diff --git a/autorandr b/autorandr index 1b7c16e..8cbf175 100755 --- a/autorandr +++ b/autorandr @@ -2,10 +2,7 @@ # # Automatically select a display configuration based on connected devices # -# autorandr was originally written by Stefan Tomanek -# For licensing reasons, this version does not contain non-trivial code from the -# original version and from authors that did not consent with OSS licensing this -# program. +# Copyright (c) 2013 Stefan Tomanek # # # @@ -26,9 +23,51 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # +# +# +# How to use: +# +# Save your current display configuration and setup with: +# $ autorandr --save mobile +# +# Connect an additional display, configure your setup and save it: +# $ autorandr --save docked +# +# Now autorandr can detect which hardware setup is active: +# $ autorandr +# mobile +# docked (detected) +# +# To automatically reload your setup, just append --change to the command line +# +# To manually load a profile, you can use the --load option. +# +# autorandr tries to avoid reloading an identical configuration. To force the +# (re)configuration, apply --force. +# +# To prevent a profile from being loaded, place a script call "block" in its +# directory. The script is evaluated before the screen setup is inspected, and +# in case of it returning a value of 0 the profile is skipped. This can be used +# to query the status of a docking station you are about to leave. +# +# If no suitable profile can be identified, the current configuration is kept. +# To change this behaviour and switch to a fallback configuration, specify +# --default +# +# Another script called "postswitch "can be placed in the directory +# ~/.autorandr as well as in all profile directories: The scripts are executed +# after a mode switch has taken place and can notify window managers or other +# applications about it. +# +# +# While the script uses xrandr by default, calling it by the name "autodisper" +# or "auto-disper" forces it to use the "disper" utility, which is useful for +# controlling nvidia chipsets. The formats for fingerprinting the current setup +# and saving/loading the current configuration are adjusted accordingly. XRANDR=/usr/bin/xrandr DISPER=/usr/bin/disper +XDPYINFO=/usr/bin/xdpyinfo PROFILES=~/.autorandr CONFIG=~/.autorandr.conf RESERVED_PROFILE_NAMES=`cat <&2 + FP_METHODS="setup_fp_disper" CURRENT_CFG_METHOD="current_cfg_disper" LOAD_METHOD="load_cfg_disper" fi @@ -88,21 +128,31 @@ setup_fp_sysfs_edid() { done } +setup_fp_disper() { + $DISPER -l | grep '^display ' +} + setup_fp() { - FINGERPRINT="" - for METHOD in $FP_METHODS; do - FINGERPRINT="$($METHOD)" - [ -n "$FINGERPRINT" ] && break + local FP=""; + for M in $FP_METHODS; do + FP="$($M)" + if [ -n "$FP" ]; then + break + fi done - if [ -z "$FINGERPRINT" ]; then - echo "Unable to fingerprint display configuration." >&2 - return 0 + if [ -z "$FP" ]; then + echo "Unable to fingerprint display configuration" >&2 + return fi echo "$FINGERPRINT" | sort } current_cfg_xrandr() { - $XRANDR -q | awk ' + local PRIMARY_SETUP=""; + if [ -x "$XDPYINFO" ]; then + PRIMARY_SETUP="$($XDPYINFO -ext XINERAMA | awk '/^ head #0:/ {printf $3 $5}')" + fi + $XRANDR -q | awk -v primary_setup="${PRIMARY_SETUP}" ' # display is connected and has a mode /^[^ ]+ connected [^(]/ { print "output "$1; @@ -113,6 +163,8 @@ current_cfg_xrandr() { } else { split($3, A, "+"); + if (A[1] A[2] "," A[3] == primary_setup) + print "primary"; } if (($4 == "left") || ($4 == "right")) { split(A[1], B, "x"); @@ -235,16 +287,20 @@ current_cfg() { } blocked() { - [ ! -x "$PROFILES/$1/block" ] && return 1 - "$PROFILES/$1/block" "$1" + local PROFILE="$1" + [ ! -x "$PROFILES/$PROFILE/block" ] && return 1 + + "$PROFILES/$PROFILE/block" "$PROFILE" } config_equal() { - if [ "$(cat "$PROFILES/$1/config")" = "$(current_cfg)" ]; then - echo "Config already loaded." >&2 + local PROFILE="$1" + if [ "$(cat "$PROFILES/$PROFILE/config")" = "$(current_cfg)" ]; then + echo "Config already loaded" return 0 + else + return 1 fi - return 1 } load_cfg_xrandr() { @@ -354,13 +410,12 @@ Usage: $SCRIPTNAME [options] To change this behaviour and switch to a fallback configuration, specify --default . - Another script called "postswitch" can be placed in the directory + Another script called "postswitch "can be placed in the directory ~/.autorandr as well as in any profile directories: The scripts are executed - after a mode switch has taken place and can notify window managers. The same - goes for "preswitch", which will be executed before a mode switch. + after a mode switch has taken place and can notify window managers. When called by the name "autodisper" or "auto-disper", the script uses "disper" - instead of "xrandr" to configure and save the display configuration. + instead of "xrandr" to detect, configure and save the display configuration. If xrandr is used, the following virtual configurations are available: ${RESERVED_PROFILE_NAMES} @@ -407,11 +462,11 @@ if [ -n "$LOAD_PROFILE" ]; then exit $? fi -for PROFILE_PATH in $PROFILES/*; do - PROFILE="$(basename "$PROFILE_PATH")" - SETUP_FILE="${PROFILE_PATH}/setup" - - [ -e $SETUP_FILE ] || continue +for SETUP_FILE in $PROFILES/*/setup; do + if ! [ -e $SETUP_FILE ]; then + break + fi + PROFILE="$(basename $(dirname "$SETUP_FILE"))" echo -n "$PROFILE" if blocked "$PROFILE"; then