X-Git-Url: https://git.ralfj.de/saartuer.git/blobdiff_plain/6e7d90d419547705cb125adc7fe3626d9dc0fd49..bf408ef82859e90b60f30fd8edf6503c7e88394f:/tyshell diff --git a/tyshell b/tyshell index 34ef515..0b9b943 100755 --- a/tyshell +++ b/tyshell @@ -9,17 +9,18 @@ import socket tuerSock = "/run/tuer.sock" # use a histfile -histfile = os.path.join(os.path.expanduser("~"), ".pyshellhist") +histfile = os.path.join(os.path.expanduser("~"), ".tyshellhist") try: readline.read_history_file(histfile) except IOError: pass import atexit atexit.register(readline.write_history_file, histfile) +atexit.register(print, "Bye") # available commands -def help(c): - print("Available commands: %s" % ", ".join(sorted(commands.keys()))) +def helpcmd(c): + print("Available commands: %s" % ", ".join(sorted(longcommands.keys()))) def extcmd(cmd): def run(c): @@ -41,14 +42,50 @@ def sendcmd(addr, cmd): print("Received unexpected answer %s" % str(data)) return run +def exitcmd(c): + sys.exit(0) + commands = { - 'exit': None, # catched below, quits the loop - 'help': help, + 'exit': exitcmd, + 'help': helpcmd, 'open': sendcmd(tuerSock, 'open'), 'close': sendcmd(tuerSock, 'close'), 'buzz': sendcmd(tuerSock, 'buzz'), } +# command convenience shortcuts +def filterCommonPrefix (strings, length): + # ignores duplicates in the string list "strings" + toremove=[] + for a in strings: + for b in strings: + if a != b: + if a[:length] == b[:length]: + toremove.append(a) + toremove.append(b) + ret = list(strings) # copy + for x in toremove: + try: + ret.remove(x) + except ValueError: + pass + return ret + +def shortcutify (dic): + maxlen = 0 + for x in dic.keys(): + if len(x) > maxlen: + maxlen = len(x) + for i in range(maxlen): + shortable = filterCommonPrefix (dic.keys(), i) + for x in shortable: + dic[x[:i]] = dic[x] + return dic # only for convenience, as dic is passed by reference + +longcommands = commands.copy() +shortcutify (commands) + + # input loop print("Welcome to tyshell. Use help to see what you can do.") while True: @@ -60,13 +97,11 @@ while True: command = shlex.split(command) if not len(command): continue # execute command - if command[0] == "exit": - break - elif command[0] in commands: + if command[0] in commands: try: commands[command[0]](command) except Exception as e: print("Error while executing %s: %s" % (command[0], str(e))) else: print("Command %s not found. Use help." % command[0]) -print("Bye") +