* 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
This commit is contained in:
Dustin Kirkland 2013-01-08 22:30:04 -06:00
commit f541a82be9
5 changed files with 322 additions and 275 deletions

6
debian/changelog vendored
View file

@ -27,6 +27,12 @@ byobu (5.23) unreleased; urgency=low
- simplify, removing detail - simplify, removing detail
* usr/lib/byobu/distro, usr/lib/byobu/logo: LP: #1094716 * usr/lib/byobu/distro, usr/lib/byobu/logo: LP: #1094716
- try to improve logo printing and distro detection on Mac - 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 ] [ Dustin Kirkland and Philip Muškovac ]
* usr/lib/byobu/battery: LP: #1090831 * usr/lib/byobu/battery: LP: #1090831

2
debian/control vendored
View file

@ -5,7 +5,7 @@ Maintainer: Dustin Kirkland <kirkland@ubuntu.com>
DM-Upload-Allowed: yes DM-Upload-Allowed: yes
Uploaders: Antoine Beaupré <anarcat@koumbit.org> Uploaders: Antoine Beaupré <anarcat@koumbit.org>
Standards-Version: 3.9.3 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 Homepage: http://byobu.co
Vcs-Bzr: http://bazaar.launchpad.net/~kirkland/byobu/trunk Vcs-Bzr: http://bazaar.launchpad.net/~kirkland/byobu/trunk

5
debian/rules vendored
View file

@ -2,6 +2,11 @@
%: %:
dh $@ 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: override_dh_perl:
dh_perl -d dh_perl -d

View file

@ -21,28 +21,35 @@
# If you change any strings, please generate localization information with: # If you change any strings, please generate localization information with:
# ./debian/rules get-po # ./debian/rules get-po
import sys
import sys, os, os.path, time, string, commands, gettext, glob, snack import os
import os.path
import time
import string
import commands
import gettext
import glob
import snack
from ConfigParser import SafeConfigParser from ConfigParser import SafeConfigParser
from snack import * from snack import *
PKG="byobu" PKG = "byobu"
HOME=os.getenv("HOME") HOME = os.getenv("HOME")
USER=os.getenv("USER") USER = os.getenv("USER")
BYOBU_CONFIG_DIR=os.getenv("BYOBU_CONFIG_DIR", HOME+"/.byobu") BYOBU_CONFIG_DIR = os.getenv("BYOBU_CONFIG_DIR", HOME + "/.byobu")
BYOBU_BACKEND=os.getenv("BYOBU_BACKEND", "tmux") BYOBU_BACKEND = os.getenv("BYOBU_BACKEND", "tmux")
BYOBU_SOCKETDIR=os.getenv("SOCKETDIR", "/var/run/screen") BYOBU_SOCKETDIR = os.getenv("SOCKETDIR", "/var/run/screen")
BYOBU_PREFIX = os.getenv("BYOBU_PREFIX", "/usr") BYOBU_PREFIX = os.getenv("BYOBU_PREFIX", "/usr")
SHARE=BYOBU_PREFIX+'/share/'+PKG SHARE = BYOBU_PREFIX + '/share/' + PKG
DOC=BYOBU_PREFIX+'/share/doc/'+PKG DOC = BYOBU_PREFIX + '/share/doc/' + PKG
if not os.path.exists(SHARE): if not os.path.exists(SHARE):
SHARE = BYOBU_CONFIG_DIR+"/"+SHARE SHARE = BYOBU_CONFIG_DIR + "/" + SHARE
if not os.path.exists(DOC): if not os.path.exists(DOC):
DOC = BYOBU_CONFIG_DIR+"/"+DOC DOC = BYOBU_CONFIG_DIR + "/" + DOC
DEF_ESC="A" DEF_ESC = "A"
RELOAD = "If you are using the default set of keybindings, press\n<F5> or <ctrl-a-R> to activate these changes.\n\nOtherwise, exit this session and start a new one." RELOAD = "If you are using the default set of keybindings, press\n<F5> or <ctrl-a-R> to activate these changes.\n\nOtherwise, exit this session and start a new one."
RELOAD_FLAG="%s/reload-required" % (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) RELOAD_CMD = "%s -X at 0 source %s/profile" % (BYOBU_BACKEND, BYOBU_CONFIG_DIR)
ESC = '' ESC = ''
snack.hotkeys[ESC] = ord(ESC) snack.hotkeys[ESC] = ord(ESC)
snack.hotkeys[ord(ESC)] = ESC snack.hotkeys[ord(ESC)] = ESC
@ -50,91 +57,106 @@ if commands.getstatusoutput('which gsed')[0] == 0:
BYOBU_SED = "gsed" BYOBU_SED = "gsed"
else: else:
BYOBU_SED = "sed" BYOBU_SED = "sed"
gettext.bindtextdomain(PKG, SHARE+'/po') gettext.bindtextdomain(PKG, SHARE + '/po')
gettext.textdomain(PKG) gettext.textdomain(PKG)
_ = gettext.gettext _ = gettext.gettext
def ioctl_GWINSZ(fd): #### TABULATION FUNCTIONS
try: ### Discover terminal width def ioctl_GWINSZ(fd):
import fcntl, termios, struct, os # Discover terminal width
try:
import fcntl
import termios
import struct
import os
cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234')) cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234'))
except: except:
return None return None
return cr return cr
def reload_required(): def reload_required():
try: try:
if not os.path.exists(BYOBU_CONFIG_DIR): if not os.path.exists(BYOBU_CONFIG_DIR):
os.makedirs(BYOBU_CONFIG_DIR, 0755) os.makedirs(BYOBU_CONFIG_DIR, 0755)
f = open(RELOAD_FLAG,'w') f = open(RELOAD_FLAG, 'w')
f.close() f.close()
commands.getoutput(RELOAD_CMD) commands.getoutput(RELOAD_CMD)
except: except:
True True
def terminal_size(): ### decide on *some* terminal size
cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) # try open fds def terminal_size():
if not cr: # ...then ctty # 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: try:
fd = os.open(os.ctermid(), os.O_RDONLY) fd = os.open(os.ctermid(), os.O_RDONLY)
cr = ioctl_GWINSZ(fd) cr = ioctl_GWINSZ(fd)
os.close(fd) os.close(fd)
except: except:
pass pass
if not cr: # env vars or finally defaults if not cr:
# env vars or finally defaults
try: try:
cr = (env['LINES'], env['COLUMNS']) cr = (env['LINES'], env['COLUMNS'])
except: except:
cr = (25, 80) cr = (25, 80)
return int(cr[1]-5), int(cr[0]-5) # reverse rows, cols # reverse rows, cols
return int(cr[1] - 5), int(cr[0] - 5)
def menu(snackScreen, size, isInstalled): def menu(snackScreen, size, isInstalled):
if isInstalled: if isInstalled:
installtext=_("Byobu currently launches at login (toggle off)") installtext = _("Byobu currently launches at login (toggle off)")
else: else:
installtext=_("Byobu currently does not launch at login (toggle on)") installtext = _("Byobu currently does not launch at login (toggle on)")
li = Listbox(height = 6, width = 60, returnExit = 1) li = Listbox(height=6, width=60, returnExit=1)
li.append(_("Help -- Quick Start Guide"), 1) li.append(_("Help -- Quick Start Guide"), 1)
li.append(_("Toggle status notifications"), 2) li.append(_("Toggle status notifications"), 2)
li.append(_("Change escape sequence"), 3) li.append(_("Change escape sequence"), 3)
li.append(installtext, 4) li.append(installtext, 4)
bb = ButtonBar(snackScreen, (("Exit", "exit", ESC),), compact=1) bb = ButtonBar(snackScreen, (("Exit", "exit", ESC),), compact=1)
g = GridForm(snackScreen, _(" Byobu Configuration Menu"), 1, 2) g = GridForm(snackScreen, _(" Byobu Configuration Menu"), 1, 2)
g.add(li, 0, 0, padding=(4,2,4,2)) g.add(li, 0, 0, padding=(4, 2, 4, 2))
g.add(bb, 0, 1, padding=(1,1,0,0)) g.add(bb, 0, 1, padding=(1, 1, 0, 0))
if bb.buttonPressed(g.runOnce()) == "exit": if bb.buttonPressed(g.runOnce()) == "exit":
return 0 return 0
else: else:
return li.current() return li.current()
def messagebox(snackScreen, width, height, title, text, scroll=0, \
buttons=((_("Okay"), "okay"),(_("Cancel"), "cancel", ESC)) ): def messagebox(snackScreen, width, height, title, text, scroll=0, buttons=((_("Okay"), "okay"), (_("Cancel"), "cancel", ESC))):
t = Textbox(width, height, text, scroll=scroll ) t = Textbox(width, height, text, scroll=scroll)
bb = ButtonBar(snackScreen, buttons, compact = 1) bb = ButtonBar(snackScreen, buttons, compact=1)
g = GridForm(snackScreen, title, 1, 2) g = GridForm(snackScreen, title, 1, 2)
g.add(t, 0, 0, padding=(0,0,0,0)) g.add(t, 0, 0, padding=(0, 0, 0, 0))
g.add(bb, 0, 1, padding=(1,1,0,0)) g.add(bb, 0, 1, padding=(1, 1, 0, 0))
return bb.buttonPressed(g.runOnce()) return bb.buttonPressed(g.runOnce())
def help(snackScreen, size, config): def help(snackScreen, size, config):
f=file(DOC+'/help.'+BYOBU_BACKEND+'.txt') f = file(DOC + '/help.' + BYOBU_BACKEND + '.txt')
text=f.read() text = f.read()
f.close() f.close()
text=text.replace("<esckey>", getesckey(), 1) text = text.replace("<esckey>", getesckey(), 1)
text=text.replace("_VER_", commands.getoutput("byobu -v | head -n1 | " + BYOBU_SED + " 's/.* //'"), 1) text = text.replace("_VER_", commands.getoutput("byobu -v | head -n1 | " + BYOBU_SED + " 's/.* //'"), 1)
t = Textbox(67, 16, text, scroll=1, wrap=1) t = Textbox(67, 16, text, scroll=1, wrap=1)
bb = ButtonBar(snackScreen, ((_("Menu"), "menu", ESC),), compact = 1) bb = ButtonBar(snackScreen, ((_("Menu"), "menu", ESC),), compact=1)
g = GridForm(snackScreen, _("Byobu Help"), 2, 4) g = GridForm(snackScreen, _("Byobu Help"), 2, 4)
g.add(t, 1, 0) g.add(t, 1, 0)
g.add(bb, 1, 1, padding=(1,1,0,0)) g.add(bb, 1, 1, padding=(1, 1, 0, 0))
button = bb.buttonPressed(g.runOnce()) button = bb.buttonPressed(g.runOnce())
return 100 return 100
def readstatus(): def readstatus():
status={} status = {}
glo = {} glo = {}
loc = {} loc = {}
for f in [SHARE+'/status/status', BYOBU_CONFIG_DIR+'/status']: for f in [SHARE + '/status/status', BYOBU_CONFIG_DIR + '/status']:
if os.path.exists(f): if os.path.exists(f):
try: try:
execfile(f, glo, loc) execfile(f, glo, loc)
@ -150,19 +172,20 @@ def readstatus():
status[i] = "0" status[i] = "0"
else: else:
status[i] = "1" status[i] = "1"
li=[] li = []
keys = status.keys() keys = status.keys()
keys.sort() keys.sort()
for i in keys: for i in keys:
window=[int(status[i]), i] window = [int(status[i]), i]
li.append(window) li.append(window)
return li return li
def genstatusstring(s, status): def genstatusstring(s, status):
new = "" new = ""
glo = {} glo = {}
loc = {} loc = {}
execfile(SHARE+'/status/status', glo, loc) execfile(SHARE + '/status/status', glo, loc)
for i in loc[s].split(): for i in loc[s].split():
if i.startswith("#"): if i.startswith("#"):
i = i.replace("#", "") i = i.replace("#", "")
@ -172,9 +195,10 @@ def genstatusstring(s, status):
new += " #" + i new += " #" + i
return new return new
def writestatus(items): def writestatus(items):
status={} status = {}
path = BYOBU_CONFIG_DIR+'/status' path = BYOBU_CONFIG_DIR + '/status'
for i in items: for i in items:
status[i[1]] = i[0] status[i[1]] = i[0]
# BYOBU_SED is hacky here, but effective # BYOBU_SED is hacky here, but effective
@ -189,30 +213,32 @@ def writestatus(items):
commands.getoutput("%s -i -e '/^%s=/d' %s" % (BYOBU_SED, key, path)) commands.getoutput("%s -i -e '/^%s=/d' %s" % (BYOBU_SED, key, path))
commands.getoutput("echo '%s=\"%s\"' >> %s" % (key, val, path)) commands.getoutput("echo '%s=\"%s\"' >> %s" % (key, val, path))
def togglestatus(snackScreen, size): def togglestatus(snackScreen, size):
itemlist=readstatus() itemlist = readstatus()
rl=Label("") rl = Label("")
r=CheckboxTree(12, scroll=1) r = CheckboxTree(12, scroll=1)
count=0 count = 0
for item in itemlist: for item in itemlist:
if item[0] != -1: if item[0] != -1:
r.append(item[1],count,selected=item[0]) r.append(item[1], count, selected=item[0])
count=count+1 count = count + 1
bb = ButtonBar(snackScreen, ((_("Apply"), "apply"), (_("Cancel"), "cancel", ESC)), compact = 1) bb = ButtonBar(snackScreen, ((_("Apply"), "apply"), (_("Cancel"), "cancel", ESC)), compact=1)
g = GridForm(snackScreen, _("Toggle status notifications"), 2, 4 ) g = GridForm(snackScreen, _("Toggle status notifications"), 2, 4)
g.add(rl, 0, 0, anchorLeft=1, anchorTop=1, padding=(4,0,0,1)) g.add(rl, 0, 0, anchorLeft=1, anchorTop=1, padding=(4, 0, 0, 1))
g.add(r, 1, 0) g.add(r, 1, 0)
g.add(bb, 1, 1, padding=(4,1,0,0)) g.add(bb, 1, 1, padding=(4, 1, 0, 0))
if bb.buttonPressed(g.runOnce()) != "cancel": if bb.buttonPressed(g.runOnce()) != "cancel":
count=0 count = 0
for item in itemlist: for item in itemlist:
if item[0] != -1: if item[0] != -1:
item[0] = r.getEntryValue(count)[1] item[0] = r.getEntryValue(count)[1]
count=count+1 count = count + 1
writestatus(itemlist) writestatus(itemlist)
reload_required() reload_required()
return 100 return 100
def install(snackScreen, size, isInstalled): def install(snackScreen, size, isInstalled):
if isInstalled: if isInstalled:
out = commands.getoutput("byobu-launcher-uninstall") out = commands.getoutput("byobu-launcher-uninstall")
@ -227,6 +253,7 @@ def install(snackScreen, size, isInstalled):
button = messagebox(snackScreen, 60, 2, "Message", out, buttons=((_("Menu"), ))) button = messagebox(snackScreen, 60, 2, "Message", out, buttons=((_("Menu"), )))
return 100 return 100
def appendtofile(p, s): def appendtofile(p, s):
f = open(p, 'a') f = open(p, 'a')
try: try:
@ -237,40 +264,43 @@ def appendtofile(p, s):
f.close() f.close()
return return
def getesckey(): def getesckey():
if BYOBU_BACKEND == "tmux": if BYOBU_BACKEND == "tmux":
path=BYOBU_CONFIG_DIR+'/keybindings.tmux' path = BYOBU_CONFIG_DIR + '/keybindings.tmux'
line = commands.getoutput("grep '^set -g prefix ' "+path) line = commands.getoutput("grep '^set -g prefix ' " + path)
else: else:
path=BYOBU_CONFIG_DIR+'/keybindings' path = BYOBU_CONFIG_DIR + '/keybindings'
line = commands.getoutput("grep ^escape "+path) line = commands.getoutput("grep ^escape " + path)
if not os.path.exists(path): if not os.path.exists(path):
return DEF_ESC return DEF_ESC
if line == "": if line == "":
return DEF_ESC return DEF_ESC
esc = line[line.find('^')+1] esc = line[line.find('^') + 1]
if esc == "`": if esc == "`":
esc = " " esc = " "
return esc return esc
def setesckey(key): def setesckey(key):
if key.isalpha(): if key.isalpha():
out = commands.getoutput("byobu-ctrl-a screen %s" % key) out = commands.getoutput("byobu-ctrl-a screen %s" % key)
def chgesc(snackScreen, size): def chgesc(snackScreen, size):
esc=Entry(2, text=getesckey(), returnExit=1) esc = Entry(2, text=getesckey(), returnExit=1)
escl=Label(_("Escape key: ctrl-")) escl = Label(_("Escape key: ctrl-"))
bb = ButtonBar(snackScreen, ((_("Apply"), "apply"), (_("Cancel"), "cancel", ESC)), compact = 1) bb = ButtonBar(snackScreen, ((_("Apply"), "apply"), (_("Cancel"), "cancel", ESC)), compact=1)
g = GridForm(snackScreen, _("Change escape sequence"), 2, 4 ) g = GridForm(snackScreen, _("Change escape sequence"), 2, 4)
g.add(escl, 0, 0, anchorLeft=1, padding=(1,0,0,1)) g.add(escl, 0, 0, anchorLeft=1, padding=(1, 0, 0, 1))
g.add(esc, 1, 0, anchorLeft=1) g.add(esc, 1, 0, anchorLeft=1)
g.add(bb, 1, 1) g.add(bb, 1, 1)
g.setTimer(100) g.setTimer(100)
loop=1 loop = 1
while loop: while loop:
which=g.run() which = g.run()
if which == "TIMER": if which == "TIMER":
val=esc.value() val = esc.value()
if len(val) > 1: if len(val) > 1:
esc.set(val[1]) esc.set(val[1])
# Ensure that escape sequence is not \ or / # Ensure that escape sequence is not \ or /
@ -284,7 +314,7 @@ def chgesc(snackScreen, size):
# do nothing # do nothing
dummy = "foo" dummy = "foo"
else: else:
loop=0 loop = 0
snackScreen.popWindow() snackScreen.popWindow()
button = bb.buttonPressed(which) button = bb.buttonPressed(which)
if button != "cancel": if button != "cancel":
@ -294,8 +324,9 @@ def chgesc(snackScreen, size):
return 0 return 0
return 100 return 100
def autolaunch(): def autolaunch():
if os.path.exists(BYOBU_CONFIG_DIR+"/disable-autolaunch"): if os.path.exists(BYOBU_CONFIG_DIR + "/disable-autolaunch"):
return 0 return 0
if commands.getstatusoutput('grep -qs byobu-launch %s/.profile' % HOME)[0] == 0: if commands.getstatusoutput('grep -qs byobu-launch %s/.profile' % HOME)[0] == 0:
return 1 return 1
@ -305,16 +336,15 @@ def autolaunch():
def main(): def main():
"""This is the main loop of our utility """This is the main loop of our utility"""
"""
size = terminal_size() size = terminal_size()
snackScreen = SnackScreen() snackScreen = SnackScreen()
snackScreen.drawRootText(1,0,_('Byobu Configuration Menu')) snackScreen.drawRootText(1, 0, _('Byobu Configuration Menu'))
snackScreen.pushHelpLine(_('<Tab> between elements | <Enter> selects | <Esc> exits')) snackScreen.pushHelpLine(_('<Tab> between elements | <Enter> selects | <Esc> exits'))
config = SafeConfigParser() config = SafeConfigParser()
isInstalled = autolaunch() isInstalled = autolaunch()
tag = 100 tag = 100
while tag > 0 : while tag > 0:
tag = menu(snackScreen, size, isInstalled) tag = menu(snackScreen, size, isInstalled)
if tag == 1: if tag == 1:
tag = help(snackScreen, size, config) tag = help(snackScreen, size, config)
@ -329,4 +359,5 @@ def main():
sys.exit(0) sys.exit(0)
if __name__ == "__main__": main() if __name__ == "__main__":
main()

View file

@ -20,20 +20,23 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import commands, os, re, sys, subprocess import commands
import os
import re
import sys
import subprocess
PKG = "byobu" PKG = "byobu"
SHELL = os.getenv("SHELL", "/bin/bash") SHELL = os.getenv("SHELL", "/bin/bash")
HOME=os.getenv("HOME") HOME = os.getenv("HOME")
BYOBU_CONFIG_DIR=os.getenv("BYOBU_CONFIG_DIR", HOME+"/.byobu") BYOBU_CONFIG_DIR = os.getenv("BYOBU_CONFIG_DIR", HOME + "/.byobu")
BYOBU_BACKEND=os.getenv("BYOBU_BACKEND", "tmux") BYOBU_BACKEND = os.getenv("BYOBU_BACKEND", "tmux")
choice = "" choice = ""
sessions = [] sessions = []
text = [] text = []
BYOBU_UPDATE_ENVVARS=["DISPLAY", "DBUS_SESSION_BUS_ADDRESS", "SESSION_MANAGER", "GPG_AGENT_INFO", 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"]
"XDG_SESSION_COOKIE", "XDG_SESSION_PATH", "GNOME_KEYRING_CONTROL",
"GNOME_KEYRING_PID", "GPG_AGENT_INFO", "SSH_AUTH_SOCK", "SSH_AGENT_PID"]
def get_sessions(): def get_sessions():
sessions = [] sessions = []
@ -59,6 +62,7 @@ def get_sessions():
i += 1 i += 1
return sessions return sessions
def update_environment(session): def update_environment(session):
backend, session_name = session.split("____", 2) backend, session_name = session.split("____", 2)
for var in BYOBU_UPDATE_ENVVARS: for var in BYOBU_UPDATE_ENVVARS:
@ -71,6 +75,7 @@ def update_environment(session):
print "Sending variable: %s" % (cmd, ) print "Sending variable: %s" % (cmd, )
subprocess.call(cmd, stdout=open(os.devnull, "w")) subprocess.call(cmd, stdout=open(os.devnull, "w"))
def attach_session(session): def attach_session(session):
print("Attaching: [%s]\n" % session) print("Attaching: [%s]\n" % session)
update_environment(session) update_environment(session)
@ -99,13 +104,13 @@ if len(sessions) > 1:
sys.stdout.write(" %d. %s\n" % (i, s)) sys.stdout.write(" %d. %s\n" % (i, s))
i += 1 i += 1
try: 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: if choice >= 1 and choice < i:
break break
else: else:
tries += 1 tries += 1
choice = "" choice = ""
sys.stderr.write("\nERROR: Invalid input\n"); sys.stderr.write("\nERROR: Invalid input\n")
except KeyboardInterrupt: except KeyboardInterrupt:
print print
sys.exit(0) sys.exit(0)
@ -115,7 +120,7 @@ if len(sessions) > 1:
break break
tries += 1 tries += 1
choice = "" choice = ""
sys.stderr.write("\nERROR: Invalid input\n"); sys.stderr.write("\nERROR: Invalid input\n")
elif len(sessions) == 1: elif len(sessions) == 1:
# Auto-select the only session # Auto-select the only session
choice = 1 choice = 1
@ -127,17 +132,17 @@ elif len(sessions) == 1:
sys.exit(1) sys.exit(1)
if choice: if choice:
if sessions[choice-1] == "NEW": if sessions[choice - 1] == "NEW":
# Create a new session # Create a new session
if BYOBU_BACKEND == "tmux": if BYOBU_BACKEND == "tmux":
os.execvp("byobu", ["", "new-session", SHELL]) os.execvp("byobu", ["", "new-session", SHELL])
else: else:
os.execvp("byobu", ["", SHELL]) os.execvp("byobu", ["", SHELL])
elif sessions[choice-1] == "SHELL": elif sessions[choice - 1] == "SHELL":
os.execvp(SHELL, [SHELL]) os.execvp(SHELL, [SHELL])
else: else:
# Attach to the chosen session; must use the binary, not the wrapper! # Attach to the chosen session; must use the binary, not the wrapper!
attach_session(sessions[choice-1]) attach_session(sessions[choice - 1])
# No valid selection, default to the youngest session, create if necessary # No valid selection, default to the youngest session, create if necessary
if BYOBU_BACKEND == "tmux": if BYOBU_BACKEND == "tmux":