blob: bdfb0fa1f48e4a9a9582e9f5c982c9fcc7c2be0c [file] [log] [blame]
import os
import sys
import string
class cli:
prompt = '# '
def __init__(self):
try:
import readline
readline.set_completer(self.complete)
readline.parse_and_bind("tab: complete")
except:
pass
def cmdloop(self):
stop = None
while not stop:
try:
line = raw_input(self.prompt)
except EOFError:
print
break
line = self.precmd(line)
stop = self.onecmd(line)
stop = self.postcmd(stop, line)
self.postloop()
def postloop(self):
pass
def precmd(self, line):
return line
def postcmd(self, stop, line):
return stop
def onecmd(self, line):
line = string.strip(line)
if not line:
return None
tokens = string.split(line)
help = 0
if tokens[0] == 'help' or tokens[0] == 'man':
help = 1
del(tokens[0])
func = None
for i in range(len(tokens), 0, -1):
try:
func = getattr(self, 'do_' + string.join(tokens[:i], '_'))
args = tokens[i:]
except AttributeError:
func = None
else:
break
if help:
self.do_help(func)
elif func:
return func(args)
else:
print "%s: no such command" % (tokens[0])
return None
def do_help(self, func):
"""Welcome to the help system"""
if func:
if func.__doc__:
print func.__doc__
else:
print "No help available"
else:
sortedkeys = self.__class__.__dict__.keys()
sortedkeys.sort()
for i in sortedkeys:
if i[0:3] == 'do_':
print " %-20s %s" % \
( string.replace(i[3:], '_', ' '),
string.split(self.__class__.__dict__[i].__doc__, "\n")[0])
return None
def complete(self, text, state):
#import readline
#print
#print "DEBUG bidx =", readline.get_begidx()
#print "DEBUG eidx =", readline.get_endidx()
#print "DEBUG line =", readline.get_line_buffer()
#print "DEBUG text =", text
if state == 0:
self.matches = self.global_matches(text)
try:
return self.matches[state]
except IndexError:
return None
def global_matches(self, text):
matches = []
n = len(text)
for word in self.__class__.__dict__.keys():
if word[0:3] == 'do_':
word = string.join(string.split(word, '_')[1:], ' ')
if word[:n] == text:
matches.append(word)
return matches