From f541a82be95d8aba98fce51ca72b0de2164eb044 Mon Sep 17 00:00:00 2001 From: Dustin Kirkland Date: Tue, 8 Jan 2013 22:30:04 -0600 Subject: [PATCH] * debian/control, debian/rules, usr/bin/byobu-config, usr/bin/byobu- select-session: LP: #1043048 - get our python code pep8 compliant + except use tabs instead of spaces, and allow lines longer than 80 characters - this should get byobu's python code working better with python3 --- debian/changelog | 6 + debian/control | 2 +- debian/rules | 5 + usr/bin/byobu-config | 547 ++++++++++++++++++----------------- usr/bin/byobu-select-session | 37 ++- 5 files changed, 322 insertions(+), 275 deletions(-) diff --git a/debian/changelog b/debian/changelog index 81926cce..e15cd3e1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -27,6 +27,12 @@ byobu (5.23) unreleased; urgency=low - simplify, removing detail * usr/lib/byobu/distro, usr/lib/byobu/logo: LP: #1094716 - try to improve logo printing and distro detection on Mac + * debian/control, debian/rules, usr/bin/byobu-config, usr/bin/byobu- + select-session: LP: #1043048 + - get our python code pep8 compliant + + except use tabs instead of spaces, and allow lines longer than + 80 characters + - this should get byobu's python code working better with python3 [ Dustin Kirkland and Philip Muškovac ] * usr/lib/byobu/battery: LP: #1090831 diff --git a/debian/control b/debian/control index eb841cbd..50474691 100644 --- a/debian/control +++ b/debian/control @@ -5,7 +5,7 @@ Maintainer: Dustin Kirkland DM-Upload-Allowed: yes Uploaders: Antoine Beaupré Standards-Version: 3.9.3 -Build-Depends: debhelper (>= 7.0.50~), gettext-base, automake, autoconf +Build-Depends: debhelper (>= 7.0.50~), gettext-base, automake, autoconf, pep8 Homepage: http://byobu.co Vcs-Bzr: http://bazaar.launchpad.net/~kirkland/byobu/trunk diff --git a/debian/rules b/debian/rules index 8d92fbb3..ae3b3d30 100755 --- a/debian/rules +++ b/debian/rules @@ -2,6 +2,11 @@ %: dh $@ +override_dh_auto_build: + # Check syntax + pep8 --verbose --repeat --ignore W191,E501 usr/bin/byobu-config usr/bin/byobu-select-session + dh_auto_build + override_dh_perl: dh_perl -d diff --git a/usr/bin/byobu-config b/usr/bin/byobu-config index 52c99c32..42810dbf 100755 --- a/usr/bin/byobu-config +++ b/usr/bin/byobu-config @@ -21,28 +21,35 @@ # If you change any strings, please generate localization information with: # ./debian/rules get-po - -import sys, os, os.path, time, string, commands, gettext, glob, snack +import sys +import os +import os.path +import time +import string +import commands +import gettext +import glob +import snack from ConfigParser import SafeConfigParser from snack import * -PKG="byobu" -HOME=os.getenv("HOME") -USER=os.getenv("USER") -BYOBU_CONFIG_DIR=os.getenv("BYOBU_CONFIG_DIR", HOME+"/.byobu") -BYOBU_BACKEND=os.getenv("BYOBU_BACKEND", "tmux") -BYOBU_SOCKETDIR=os.getenv("SOCKETDIR", "/var/run/screen") +PKG = "byobu" +HOME = os.getenv("HOME") +USER = os.getenv("USER") +BYOBU_CONFIG_DIR = os.getenv("BYOBU_CONFIG_DIR", HOME + "/.byobu") +BYOBU_BACKEND = os.getenv("BYOBU_BACKEND", "tmux") +BYOBU_SOCKETDIR = os.getenv("SOCKETDIR", "/var/run/screen") BYOBU_PREFIX = os.getenv("BYOBU_PREFIX", "/usr") -SHARE=BYOBU_PREFIX+'/share/'+PKG -DOC=BYOBU_PREFIX+'/share/doc/'+PKG +SHARE = BYOBU_PREFIX + '/share/' + PKG +DOC = BYOBU_PREFIX + '/share/doc/' + PKG if not os.path.exists(SHARE): - SHARE = BYOBU_CONFIG_DIR+"/"+SHARE + SHARE = BYOBU_CONFIG_DIR + "/" + SHARE if not os.path.exists(DOC): - DOC = BYOBU_CONFIG_DIR+"/"+DOC -DEF_ESC="A" + DOC = BYOBU_CONFIG_DIR + "/" + DOC +DEF_ESC = "A" RELOAD = "If you are using the default set of keybindings, press\n or to activate these changes.\n\nOtherwise, exit this session and start a new one." -RELOAD_FLAG="%s/reload-required" % (BYOBU_CONFIG_DIR) -RELOAD_CMD="%s -X at 0 source %s/profile" % (BYOBU_BACKEND, BYOBU_CONFIG_DIR) +RELOAD_FLAG = "%s/reload-required" % (BYOBU_CONFIG_DIR) +RELOAD_CMD = "%s -X at 0 source %s/profile" % (BYOBU_BACKEND, BYOBU_CONFIG_DIR) ESC = '' snack.hotkeys[ESC] = ord(ESC) snack.hotkeys[ord(ESC)] = ESC @@ -50,283 +57,307 @@ if commands.getstatusoutput('which gsed')[0] == 0: BYOBU_SED = "gsed" else: BYOBU_SED = "sed" -gettext.bindtextdomain(PKG, SHARE+'/po') +gettext.bindtextdomain(PKG, SHARE + '/po') gettext.textdomain(PKG) _ = gettext.gettext -def ioctl_GWINSZ(fd): #### TABULATION FUNCTIONS - try: ### Discover terminal width - import fcntl, termios, struct, os - cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234')) - except: - return None - return cr + +def ioctl_GWINSZ(fd): + # Discover terminal width + try: + import fcntl + import termios + import struct + import os + cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234')) + except: + return None + return cr + def reload_required(): - try: - if not os.path.exists(BYOBU_CONFIG_DIR): - os.makedirs(BYOBU_CONFIG_DIR, 0755) - f = open(RELOAD_FLAG,'w') - f.close() - commands.getoutput(RELOAD_CMD) - except: - True + try: + if not os.path.exists(BYOBU_CONFIG_DIR): + os.makedirs(BYOBU_CONFIG_DIR, 0755) + f = open(RELOAD_FLAG, 'w') + f.close() + commands.getoutput(RELOAD_CMD) + except: + True + + +def terminal_size(): + # decide on some terminal size + cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) + # try open fds + if not cr: + # ...then ctty + try: + fd = os.open(os.ctermid(), os.O_RDONLY) + cr = ioctl_GWINSZ(fd) + os.close(fd) + except: + pass + if not cr: + # env vars or finally defaults + try: + cr = (env['LINES'], env['COLUMNS']) + except: + cr = (25, 80) + # reverse rows, cols + return int(cr[1] - 5), int(cr[0] - 5) -def terminal_size(): ### decide on *some* terminal size - cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) # try open fds - if not cr: # ...then ctty - try: - fd = os.open(os.ctermid(), os.O_RDONLY) - cr = ioctl_GWINSZ(fd) - os.close(fd) - except: - pass - if not cr: # env vars or finally defaults - try: - cr = (env['LINES'], env['COLUMNS']) - except: - cr = (25, 80) - return int(cr[1]-5), int(cr[0]-5) # reverse rows, cols def menu(snackScreen, size, isInstalled): - if isInstalled: - installtext=_("Byobu currently launches at login (toggle off)") - else: - installtext=_("Byobu currently does not launch at login (toggle on)") - li = Listbox(height = 6, width = 60, returnExit = 1) - li.append(_("Help -- Quick Start Guide"), 1) - li.append(_("Toggle status notifications"), 2) - li.append(_("Change escape sequence"), 3) - li.append(installtext, 4) - bb = ButtonBar(snackScreen, (("Exit", "exit", ESC),), compact=1) - g = GridForm(snackScreen, _(" Byobu Configuration Menu"), 1, 2) - g.add(li, 0, 0, padding=(4,2,4,2)) - g.add(bb, 0, 1, padding=(1,1,0,0)) - if bb.buttonPressed(g.runOnce()) == "exit": - return 0 - else: - return li.current() + if isInstalled: + installtext = _("Byobu currently launches at login (toggle off)") + else: + installtext = _("Byobu currently does not launch at login (toggle on)") + li = Listbox(height=6, width=60, returnExit=1) + li.append(_("Help -- Quick Start Guide"), 1) + li.append(_("Toggle status notifications"), 2) + li.append(_("Change escape sequence"), 3) + li.append(installtext, 4) + bb = ButtonBar(snackScreen, (("Exit", "exit", ESC),), compact=1) + g = GridForm(snackScreen, _(" Byobu Configuration Menu"), 1, 2) + g.add(li, 0, 0, padding=(4, 2, 4, 2)) + g.add(bb, 0, 1, padding=(1, 1, 0, 0)) + if bb.buttonPressed(g.runOnce()) == "exit": + return 0 + else: + return li.current() + + +def messagebox(snackScreen, width, height, title, text, scroll=0, buttons=((_("Okay"), "okay"), (_("Cancel"), "cancel", ESC))): + t = Textbox(width, height, text, scroll=scroll) + bb = ButtonBar(snackScreen, buttons, compact=1) + g = GridForm(snackScreen, title, 1, 2) + g.add(t, 0, 0, padding=(0, 0, 0, 0)) + g.add(bb, 0, 1, padding=(1, 1, 0, 0)) + return bb.buttonPressed(g.runOnce()) -def messagebox(snackScreen, width, height, title, text, scroll=0, \ - buttons=((_("Okay"), "okay"),(_("Cancel"), "cancel", ESC)) ): - t = Textbox(width, height, text, scroll=scroll ) - bb = ButtonBar(snackScreen, buttons, compact = 1) - g = GridForm(snackScreen, title, 1, 2) - g.add(t, 0, 0, padding=(0,0,0,0)) - g.add(bb, 0, 1, padding=(1,1,0,0)) - return bb.buttonPressed(g.runOnce()) def help(snackScreen, size, config): - f=file(DOC+'/help.'+BYOBU_BACKEND+'.txt') - text=f.read() - f.close() - text=text.replace("", getesckey(), 1) - text=text.replace("_VER_", commands.getoutput("byobu -v | head -n1 | " + BYOBU_SED + " 's/.* //'"), 1) - t = Textbox(67, 16, text, scroll=1, wrap=1) - bb = ButtonBar(snackScreen, ((_("Menu"), "menu", ESC),), compact = 1) - g = GridForm(snackScreen, _("Byobu Help"), 2, 4) - g.add(t, 1, 0) - g.add(bb, 1, 1, padding=(1,1,0,0)) - button = bb.buttonPressed(g.runOnce()) - return 100 + f = file(DOC + '/help.' + BYOBU_BACKEND + '.txt') + text = f.read() + f.close() + text = text.replace("", getesckey(), 1) + text = text.replace("_VER_", commands.getoutput("byobu -v | head -n1 | " + BYOBU_SED + " 's/.* //'"), 1) + t = Textbox(67, 16, text, scroll=1, wrap=1) + bb = ButtonBar(snackScreen, ((_("Menu"), "menu", ESC),), compact=1) + g = GridForm(snackScreen, _("Byobu Help"), 2, 4) + g.add(t, 1, 0) + g.add(bb, 1, 1, padding=(1, 1, 0, 0)) + button = bb.buttonPressed(g.runOnce()) + return 100 + def readstatus(): - status={} - glo = {} - loc = {} - for f in [SHARE+'/status/status', BYOBU_CONFIG_DIR+'/status']: - if os.path.exists(f): - try: - execfile(f, glo, loc) - except: - error("Invalid configuration [%s]" % f) - if BYOBU_BACKEND == "tmux": - items = "%s %s" % (loc["tmux_left"], loc["tmux_right"]) - else: - items = "%s %s %s %s" % (loc["screen_upper_left"], loc["screen_upper_right"], loc["screen_lower_left"], loc["screen_lower_right"]) - for i in items.split(): - if i.startswith("#"): - i = i.replace("#", "") - status[i] = "0" - else: - status[i] = "1" - li=[] - keys = status.keys() - keys.sort() - for i in keys: - window=[int(status[i]), i] - li.append(window) - return li + status = {} + glo = {} + loc = {} + for f in [SHARE + '/status/status', BYOBU_CONFIG_DIR + '/status']: + if os.path.exists(f): + try: + execfile(f, glo, loc) + except: + error("Invalid configuration [%s]" % f) + if BYOBU_BACKEND == "tmux": + items = "%s %s" % (loc["tmux_left"], loc["tmux_right"]) + else: + items = "%s %s %s %s" % (loc["screen_upper_left"], loc["screen_upper_right"], loc["screen_lower_left"], loc["screen_lower_right"]) + for i in items.split(): + if i.startswith("#"): + i = i.replace("#", "") + status[i] = "0" + else: + status[i] = "1" + li = [] + keys = status.keys() + keys.sort() + for i in keys: + window = [int(status[i]), i] + li.append(window) + return li + def genstatusstring(s, status): - new = "" - glo = {} - loc = {} - execfile(SHARE+'/status/status', glo, loc) - for i in loc[s].split(): - if i.startswith("#"): - i = i.replace("#", "") - if status[i] == 1: - new += " " + i - else: - new += " #" + i - return new + new = "" + glo = {} + loc = {} + execfile(SHARE + '/status/status', glo, loc) + for i in loc[s].split(): + if i.startswith("#"): + i = i.replace("#", "") + if status[i] == 1: + new += " " + i + else: + new += " #" + i + return new + def writestatus(items): - status={} - path = BYOBU_CONFIG_DIR+'/status' - for i in items: - status[i[1]] = i[0] - # BYOBU_SED is hacky here, but effective - if BYOBU_BACKEND == "tmux": - for key in ["tmux_left", "tmux_right"]: - val = genstatusstring(key, status) - commands.getoutput("%s -i -e '/^%s=/d' %s" % (BYOBU_SED, key, path)) - commands.getoutput("echo '%s=\"%s\"' >> %s" % (key, val, path)) - else: - for key in ["screen_upper_left", "screen_upper_right", "screen_lower_left", "screen_lower_right"]: - val = genstatusstring(key, status) - commands.getoutput("%s -i -e '/^%s=/d' %s" % (BYOBU_SED, key, path)) - commands.getoutput("echo '%s=\"%s\"' >> %s" % (key, val, path)) + status = {} + path = BYOBU_CONFIG_DIR + '/status' + for i in items: + status[i[1]] = i[0] + # BYOBU_SED is hacky here, but effective + if BYOBU_BACKEND == "tmux": + for key in ["tmux_left", "tmux_right"]: + val = genstatusstring(key, status) + commands.getoutput("%s -i -e '/^%s=/d' %s" % (BYOBU_SED, key, path)) + commands.getoutput("echo '%s=\"%s\"' >> %s" % (key, val, path)) + else: + for key in ["screen_upper_left", "screen_upper_right", "screen_lower_left", "screen_lower_right"]: + val = genstatusstring(key, status) + commands.getoutput("%s -i -e '/^%s=/d' %s" % (BYOBU_SED, key, path)) + commands.getoutput("echo '%s=\"%s\"' >> %s" % (key, val, path)) + def togglestatus(snackScreen, size): - itemlist=readstatus() - rl=Label("") - r=CheckboxTree(12, scroll=1) - count=0 - for item in itemlist: - if item[0] != -1: - r.append(item[1],count,selected=item[0]) - count=count+1 - bb = ButtonBar(snackScreen, ((_("Apply"), "apply"), (_("Cancel"), "cancel", ESC)), compact = 1) - g = GridForm(snackScreen, _("Toggle status notifications"), 2, 4 ) - g.add(rl, 0, 0, anchorLeft=1, anchorTop=1, padding=(4,0,0,1)) - g.add(r, 1, 0) - g.add(bb, 1, 1, padding=(4,1,0,0)) - if bb.buttonPressed(g.runOnce()) != "cancel": - count=0 - for item in itemlist: - if item[0] != -1: - item[0] = r.getEntryValue(count)[1] - count=count+1 - writestatus(itemlist) - reload_required() - return 100 + itemlist = readstatus() + rl = Label("") + r = CheckboxTree(12, scroll=1) + count = 0 + for item in itemlist: + if item[0] != -1: + r.append(item[1], count, selected=item[0]) + count = count + 1 + bb = ButtonBar(snackScreen, ((_("Apply"), "apply"), (_("Cancel"), "cancel", ESC)), compact=1) + g = GridForm(snackScreen, _("Toggle status notifications"), 2, 4) + g.add(rl, 0, 0, anchorLeft=1, anchorTop=1, padding=(4, 0, 0, 1)) + g.add(r, 1, 0) + g.add(bb, 1, 1, padding=(4, 1, 0, 0)) + if bb.buttonPressed(g.runOnce()) != "cancel": + count = 0 + for item in itemlist: + if item[0] != -1: + item[0] = r.getEntryValue(count)[1] + count = count + 1 + writestatus(itemlist) + reload_required() + return 100 + def install(snackScreen, size, isInstalled): - if isInstalled: - out = commands.getoutput("byobu-launcher-uninstall") - if out == "": - out = _("Byobu will not be launched next time you login.") - button = messagebox(snackScreen, 60, 2, _("Message"), out, buttons=((_("Menu"), ))) - return 101 - else: - out = commands.getoutput("byobu-launcher-install") - if out == "": - out = _("Byobu will be launched automatically next time you login.") - button = messagebox(snackScreen, 60, 2, "Message", out, buttons=((_("Menu"), ))) - return 100 + if isInstalled: + out = commands.getoutput("byobu-launcher-uninstall") + if out == "": + out = _("Byobu will not be launched next time you login.") + button = messagebox(snackScreen, 60, 2, _("Message"), out, buttons=((_("Menu"), ))) + return 101 + else: + out = commands.getoutput("byobu-launcher-install") + if out == "": + out = _("Byobu will be launched automatically next time you login.") + button = messagebox(snackScreen, 60, 2, "Message", out, buttons=((_("Menu"), ))) + return 100 + def appendtofile(p, s): - f = open(p, 'a') - try: - f.write(s) - except IOError: - f.close() - return - f.close() - return + f = open(p, 'a') + try: + f.write(s) + except IOError: + f.close() + return + f.close() + return + def getesckey(): - if BYOBU_BACKEND == "tmux": - path=BYOBU_CONFIG_DIR+'/keybindings.tmux' - line = commands.getoutput("grep '^set -g prefix ' "+path) - else: - path=BYOBU_CONFIG_DIR+'/keybindings' - line = commands.getoutput("grep ^escape "+path) - if not os.path.exists(path): - return DEF_ESC - if line == "": - return DEF_ESC - esc = line[line.find('^')+1] - if esc == "`": - esc = " " - return esc + if BYOBU_BACKEND == "tmux": + path = BYOBU_CONFIG_DIR + '/keybindings.tmux' + line = commands.getoutput("grep '^set -g prefix ' " + path) + else: + path = BYOBU_CONFIG_DIR + '/keybindings' + line = commands.getoutput("grep ^escape " + path) + if not os.path.exists(path): + return DEF_ESC + if line == "": + return DEF_ESC + esc = line[line.find('^') + 1] + if esc == "`": + esc = " " + return esc + def setesckey(key): - if key.isalpha(): - out = commands.getoutput("byobu-ctrl-a screen %s" % key) + if key.isalpha(): + out = commands.getoutput("byobu-ctrl-a screen %s" % key) + def chgesc(snackScreen, size): - esc=Entry(2, text=getesckey(), returnExit=1) - escl=Label(_("Escape key: ctrl-")) - bb = ButtonBar(snackScreen, ((_("Apply"), "apply"), (_("Cancel"), "cancel", ESC)), compact = 1) - g = GridForm(snackScreen, _("Change escape sequence"), 2, 4 ) - g.add(escl, 0, 0, anchorLeft=1, padding=(1,0,0,1)) - g.add(esc, 1, 0, anchorLeft=1) - g.add(bb, 1, 1) - g.setTimer(100) - loop=1 - while loop: - which=g.run() - if which == "TIMER": - val=esc.value() - if len(val) > 1: - esc.set(val[1]) - # Ensure that escape sequence is not \ or / - if val == '/' or val == '\\': - esc.set(DEF_ESC) - # Ensure that the escape sequence is not set to a number - try: - dummy = int(esc.value()) - esc.set(DEF_ESC) - except: - # do nothing - dummy = "foo" - else: - loop=0 - snackScreen.popWindow() - button = bb.buttonPressed(which) - if button != "cancel": - setesckey(esc.value()) - reload_required() - if button == "exit": - return 0 - return 100 + esc = Entry(2, text=getesckey(), returnExit=1) + escl = Label(_("Escape key: ctrl-")) + bb = ButtonBar(snackScreen, ((_("Apply"), "apply"), (_("Cancel"), "cancel", ESC)), compact=1) + g = GridForm(snackScreen, _("Change escape sequence"), 2, 4) + g.add(escl, 0, 0, anchorLeft=1, padding=(1, 0, 0, 1)) + g.add(esc, 1, 0, anchorLeft=1) + g.add(bb, 1, 1) + g.setTimer(100) + loop = 1 + while loop: + which = g.run() + if which == "TIMER": + val = esc.value() + if len(val) > 1: + esc.set(val[1]) + # Ensure that escape sequence is not \ or / + if val == '/' or val == '\\': + esc.set(DEF_ESC) + # Ensure that the escape sequence is not set to a number + try: + dummy = int(esc.value()) + esc.set(DEF_ESC) + except: + # do nothing + dummy = "foo" + else: + loop = 0 + snackScreen.popWindow() + button = bb.buttonPressed(which) + if button != "cancel": + setesckey(esc.value()) + reload_required() + if button == "exit": + return 0 + return 100 + def autolaunch(): - if os.path.exists(BYOBU_CONFIG_DIR+"/disable-autolaunch"): + if os.path.exists(BYOBU_CONFIG_DIR + "/disable-autolaunch"): + return 0 + if commands.getstatusoutput('grep -qs byobu-launch %s/.profile' % HOME)[0] == 0: + return 1 + if os.path.exists("/etc/profile.d/Z98-%s.sh" % PKG): + return 1 return 0 - if commands.getstatusoutput('grep -qs byobu-launch %s/.profile' % HOME)[0] == 0: - return 1 - if os.path.exists("/etc/profile.d/Z98-%s.sh" % PKG): - return 1 - return 0 def main(): - """This is the main loop of our utility - """ - size = terminal_size() - snackScreen = SnackScreen() - snackScreen.drawRootText(1,0,_('Byobu Configuration Menu')) - snackScreen.pushHelpLine(_(' between elements | selects | exits')) - config = SafeConfigParser() - isInstalled = autolaunch() - tag = 100 - while tag > 0 : - tag = menu(snackScreen, size, isInstalled) - if tag == 1: - tag = help(snackScreen, size, config) - elif tag == 2: - tag = togglestatus(snackScreen, size) - elif tag == 3: - tag = chgesc(snackScreen, size) - elif tag == 4: - tag = install(snackScreen, size, isInstalled) - isInstalled = autolaunch() - snackScreen.finish() - sys.exit(0) + """This is the main loop of our utility""" + size = terminal_size() + snackScreen = SnackScreen() + snackScreen.drawRootText(1, 0, _('Byobu Configuration Menu')) + snackScreen.pushHelpLine(_(' between elements | selects | exits')) + config = SafeConfigParser() + isInstalled = autolaunch() + tag = 100 + while tag > 0: + tag = menu(snackScreen, size, isInstalled) + if tag == 1: + tag = help(snackScreen, size, config) + elif tag == 2: + tag = togglestatus(snackScreen, size) + elif tag == 3: + tag = chgesc(snackScreen, size) + elif tag == 4: + tag = install(snackScreen, size, isInstalled) + isInstalled = autolaunch() + snackScreen.finish() + sys.exit(0) -if __name__ == "__main__": main() +if __name__ == "__main__": + main() diff --git a/usr/bin/byobu-select-session b/usr/bin/byobu-select-session index 54de9dff..049243e1 100755 --- a/usr/bin/byobu-select-session +++ b/usr/bin/byobu-select-session @@ -20,27 +20,30 @@ # along with this program. If not, see . -import commands, os, re, sys, subprocess +import commands +import os +import re +import sys +import subprocess PKG = "byobu" SHELL = os.getenv("SHELL", "/bin/bash") -HOME=os.getenv("HOME") -BYOBU_CONFIG_DIR=os.getenv("BYOBU_CONFIG_DIR", HOME+"/.byobu") -BYOBU_BACKEND=os.getenv("BYOBU_BACKEND", "tmux") +HOME = os.getenv("HOME") +BYOBU_CONFIG_DIR = os.getenv("BYOBU_CONFIG_DIR", HOME + "/.byobu") +BYOBU_BACKEND = os.getenv("BYOBU_BACKEND", "tmux") choice = "" sessions = [] text = [] -BYOBU_UPDATE_ENVVARS=["DISPLAY", "DBUS_SESSION_BUS_ADDRESS", "SESSION_MANAGER", "GPG_AGENT_INFO", - "XDG_SESSION_COOKIE", "XDG_SESSION_PATH", "GNOME_KEYRING_CONTROL", - "GNOME_KEYRING_PID", "GPG_AGENT_INFO", "SSH_AUTH_SOCK", "SSH_AGENT_PID"] +BYOBU_UPDATE_ENVVARS = ["DISPLAY", "DBUS_SESSION_BUS_ADDRESS", "SESSION_MANAGER", "GPG_AGENT_INFO", "XDG_SESSION_COOKIE", "XDG_SESSION_PATH", "GNOME_KEYRING_CONTROL", "GNOME_KEYRING_PID", "GPG_AGENT_INFO", "SSH_AUTH_SOCK", "SSH_AGENT_PID"] + def get_sessions(): sessions = [] i = 0 if BYOBU_BACKEND == "screen": output = commands.getstatusoutput("screen -ls") - if output[0] >= 0: + if output[0] >= 0: for s in output[1].split("\n"): s = re.sub(r'\s+', ' ', s) # Ignore hidden sessions (named sessions that start with a ".") @@ -51,7 +54,7 @@ def get_sessions(): i += 1 if BYOBU_BACKEND == "tmux": output = commands.getstatusoutput("tmux list-sessions") - if output[0] == 0: + if output[0] == 0: for s in output[1].split("\n"): text.append("tmux: %s" % s.strip()) items = s.split(":") @@ -59,6 +62,7 @@ def get_sessions(): i += 1 return sessions + def update_environment(session): backend, session_name = session.split("____", 2) for var in BYOBU_UPDATE_ENVVARS: @@ -71,6 +75,7 @@ def update_environment(session): print "Sending variable: %s" % (cmd, ) subprocess.call(cmd, stdout=open(os.devnull, "w")) + def attach_session(session): print("Attaching: [%s]\n" % session) update_environment(session) @@ -99,13 +104,13 @@ if len(sessions) > 1: sys.stdout.write(" %d. %s\n" % (i, s)) i += 1 try: - choice = int(raw_input("\nChoose 1-%d [1]: " % (i-1))) + choice = int(raw_input("\nChoose 1-%d [1]: " % (i - 1))) if choice >= 1 and choice < i: break else: tries += 1 choice = "" - sys.stderr.write("\nERROR: Invalid input\n"); + sys.stderr.write("\nERROR: Invalid input\n") except KeyboardInterrupt: print sys.exit(0) @@ -115,7 +120,7 @@ if len(sessions) > 1: break tries += 1 choice = "" - sys.stderr.write("\nERROR: Invalid input\n"); + sys.stderr.write("\nERROR: Invalid input\n") elif len(sessions) == 1: # Auto-select the only session choice = 1 @@ -127,17 +132,17 @@ elif len(sessions) == 1: sys.exit(1) if choice: - if sessions[choice-1] == "NEW": + if sessions[choice - 1] == "NEW": # Create a new session if BYOBU_BACKEND == "tmux": os.execvp("byobu", ["", "new-session", SHELL]) else: os.execvp("byobu", ["", SHELL]) - elif sessions[choice-1] == "SHELL": + elif sessions[choice - 1] == "SHELL": os.execvp(SHELL, [SHELL]) else: - # Attach to the chosen session; must use the binary, not the wrapper! - attach_session(sessions[choice-1]) + # Attach to the chosen session; must use the binary, not the wrapper! + attach_session(sessions[choice - 1]) # No valid selection, default to the youngest session, create if necessary if BYOBU_BACKEND == "tmux":