From bf408ef82859e90b60f30fd8edf6503c7e88394f Mon Sep 17 00:00:00 2001
From: Constantin Berhard <constantin@exxxtremesys.lu>
Date: Thu, 26 Sep 2013 11:55:42 +0200
Subject: [PATCH] tyshell: convenience command shortcuts

---
 tyshell | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/tyshell b/tyshell
index 9350e12..0b9b943 100755
--- a/tyshell
+++ b/tyshell
@@ -20,7 +20,7 @@ atexit.register(print, "Bye")
 
 # available commands
 def helpcmd(c):
-	print("Available commands: %s" % ", ".join(sorted(commands.keys())))
+	print("Available commands: %s" % ", ".join(sorted(longcommands.keys())))
 
 def extcmd(cmd):
 	def run(c):
@@ -53,6 +53,39 @@ commands = {
 	'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:
-- 
2.39.5