summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2011-02-14 21:59:13 +0000
committerLars Wirzenius <liw@liw.fi>2011-02-14 21:59:13 +0000
commit663963bc958268c861a1b9e25c960c1c8586db4f (patch)
treea3e7772e2e4d0288ba59d5c98e1c9845e9850b31
parent3779e403cf657c41c776612a2eb3e48f2d590e75 (diff)
downloadliw-automation-663963bc958268c861a1b9e25c960c1c8586db4f.tar.gz
Rewrite disp to work with any output monitors.
-rwxr-xr-xscripts/disp88
1 files 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 <http://www.gnu.org/licenses/>.
+
+
+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()