From 663963bc958268c861a1b9e25c960c1c8586db4f Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Mon, 14 Feb 2011 21:59:13 +0000 Subject: Rewrite disp to work with any output monitors. --- scripts/disp | 88 +++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 25 deletions(-) diff --git a/scripts/disp b/scripts/disp index ed33a58..375bada 100755 --- a/scripts/disp +++ b/scripts/disp @@ -1,25 +1,63 @@ -#!/bin/sh - -set -e - -temp="$(mktemp)" -xrandr -q > "$temp" -awk ' - BEGIN { - printf "xrandr " - } - $2 == "connected" { - what = $1 - res = "" - } - /^ [0-9]/ && what != "" { - printf "--output %s --mode %s ", what, $1 - if (what == "LVDS1") printf "--same-as VGA1 " - what ="" - } - END { - printf "\n" - } -' "$temp" | sh - -rm -f "$temp" +#!/usr/bin/python +# Copyright 2011 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +import cliapp +import subprocess + + +class Disp(cliapp.Application): + + def runcmd(self, *args): + p = subprocess.Popen(args, stdout=subprocess.PIPE) + out, err = p.communicate('') + if p.returncode: + raise Exception('command failed') + return out + + def hpixels(self, mode): + return int(mode.split('x')[0]) + + def process_args(self, args): + monitors = [] + best = None + mode = None + + s = self.runcmd('xrandr', '-q') + current = None + for line in s.splitlines(): + w = line.split() + if w[1] == 'connected': + monitors.append(w[0]) + current = w[0] + elif line.startswith(' '): + if not mode or self.hpixels(mode) < self.hpixels(w[0]): + best = current + mode = w[0] + + if not monitors: + raise Exception('No monitors') + + args = ['xrandr', '--output', best, '--mode', mode] + for m in monitors: + if m != best: + args += ['--output', m, '--same-as', best] + + print args + self.runcmd(*args) + + +Disp().run() -- cgit v1.2.1