commit 89ee39d115b28154ad9fc503f200d93a96678e2b from: Matthias Schmidt date: Mon Jul 01 13:28:52 2013 UTC Update with more features - More options (-m, -n, -l, -r) - Fix bug in clone mode commit - a984dfeb2bd1319e07d3a1a967d9a0b20a55f0e5 commit + 89ee39d115b28154ad9fc503f200d93a96678e2b blob - c1bce00035d7a19140741a5574d8b1fa52c07453 blob + 0107c40e909fca9021d1bea91ba71cf0bbb31e9a --- dtoogle.sh +++ dtoogle.sh @@ -6,13 +6,6 @@ # # License GNU GPL -# ----------------------------------------------------------------------- -# Add your own additional options for xrandr here -# ----------------------------------------------------------------------- -XRANDROPTS="--dryrun" -# ----------------------------------------------------------------------- - - function choose_profile() { local PROFILE=$1 @@ -41,11 +34,12 @@ function choose_profile() # INTERN="LVDS1" # EXTERN[0]="VGA1" # ... + # EXTERN[n]="VGAn" # ;; # ----------------------------------------------------------------------- *) usage - echo "ERROR: Profile not found" + pr "Profile $PROFILE not found" exit 1 ;; esac @@ -55,11 +49,15 @@ function choose_profile() build_xrandr_string "--auto" "--off" # Clone screen on all displays elif [ $CFLAG -eq 1 ]; then - RES=`xrandr -q | egrep "^ *[0-9]*x[0-9]*" | awk {'print $1'} | sort -g -r | uniq -d | head -1` + RES=`xrandr -q | egrep "^ *[0-9]*x[0-9]*" | awk {'print $1'} | sort | uniq -d | head -1` build_xrandr_string "--mode $RES" "--same-as $INTERN" # Turn internal display off elif [ $EFLAG -eq 1 ]; then - build_xrandr_string "--off" "--auto" "--left-of" + if [ $RIGHTOF -eq 1 ]; then + build_xrandr_string "--off" "--auto" "--right-of" + else + build_xrandr_string "--off" "--auto" "--left-of" + fi # Internal on and extend screen on all displays by default else build_xrandr_string "--auto" "--auto" @@ -78,9 +76,8 @@ function build_xrandr_string() i=0 for d in ${EXTERN[*]}; do if [ $CFLAG -eq 1 ]; then - CMDEXT="${CMDEXT} --output ${DOEXTERN} --mode ${RES}" + CMDEXT="${CMDEXT} --output $d ${DOEXTERN} --mode ${RES}" elif [ ! -z $POSITION ]; then - # xrandr --output $INTERN --auto --output $EXTERN --auto --right-of $INTERN if [ $i -eq 0 ]; then CMDEXT="${CMDEXT} --output $d ${DOEXTERN} ${POSITION} $INTERN" else @@ -93,29 +90,58 @@ function build_xrandr_string() done CMD="$CMD $CMDEXT" - echo $CMD + [ $VERBOSE -eq 1 ] && { + echo "I'll run the following command:" + pg "$CMD" + } } function run_xrandr() { - exec "$CMD XRANDROPTS" + echo "$CMD $XRANDROPTS" | sh } function usage() { - echo "$0 [-ceim] [-p profile]" + echo "`basename $0` [-ceix] [-mnv] [-lr] -p profile" echo + echo "Display Options:" echo " -c Clone screen on all displays" echo " -e Enable external display(s) and disable internal" echo " -i Enable only the internal display" + echo -n " -x Extend screen to all displays " + pg "[default]" + echo + echo "General Options:" echo " -m Show all available modes" + echo " -n Dry run. Do not run xrand. Implies -v" + echo " -v Be more verbose" echo + echo "Position:" + echo " -l Display n is left of display (n+1)" + echo -n " -r Display n is right of display (n+1) " + pg "[default]" + echo + echo "Profile:" echo " -p profile Enable the specified profile" echo - echo "DEFAULT: Extend screen to all displays" - echo } +RED='\e[0;31m' +GREEN='\e[0;32m' +BLUE='\e[0;34m' +NC="\e[0;37;40m" + +function pg() +{ + echo -e "${GREEN}${1}${NC}" +} + +function pr() +{ + echo -e "${RED}${1}${NC}" +} + CMD= PROFILE= INTERN= @@ -131,8 +157,14 @@ CFLAG=0 EFLAG=0 # Enable only the internal display IFLAG=0 +# Verbosity +VERBOSE=0 +# Display n is right of display (n+1) [default] +RIGHTOF=1 +# Additional options for xrandr +XRANDROPTS="" -while getopts "ciemp:" opt; do +while getopts "ciemnrlp:vx" opt; do case $opt in c) CFLAG=1 @@ -143,14 +175,31 @@ while getopts "ciemp:" opt; do e) EFLAG=1 ;; + v) + VERBOSE=1 + ;; + n) + XRANDROPTS="--dryrun" + VERBOSE=1 + ;; + r) + RIGHTOF=1 + ;; + l) + RIGHTOF=0 + ;; m) exec xrandr -q ;; + x) + # Do nothing here since its the default + ;; p) [ ! -z "$OPTARG" ] && PROFILE=$OPTARG ;; *) usage + pr "Option not found" exit 1 ;; esac @@ -158,11 +207,11 @@ done if [ $((CFLAG + $IFLAG + $EFLAG)) -gt 1 ]; then usage - echo "Please specify either -c or -e or -i" + pr "Please specify either -c or -e or -i" exit 1 fi choose_profile $PROFILE run_xrandr -exit $? \ No newline at end of file +exit $?