1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import readline
- import sys
- import time
-
-
- class user_interface(dict):
- def __init__(self):
- super().__init__(self)
- self.add_command('quit', None)
-
- def run(self):
- readline.parse_and_bind("tab: complete")
- readline.set_completer(self.completer)
- print("\nEnter command: ")
- while (True):
- userfeedback = input('')
- command = userfeedback.split(' ')[0]
- if userfeedback == 'quit':
- break
- else:
- self.call_it(userfeedback)
-
- def call_it(self, userfeedback):
- args = userfeedback.split(" ")
- cmd = args.pop(0)
- cb = self.get(cmd)
- if callable(cb):
- cb(*args)
- else:
- print("Unknown command \"%s\"" % cmd)
-
- def add_command(self, name, callback):
- self[name] = callback
-
- def reduced_list(self, text):
- """
- Create reduced completation list
- """
- reduced_list = {}
- for cmd in self.keys():
- next_dot = cmd[len(text):].find('.')
- if next_dot >= 0:
- reduced_list[cmd[:len(text) + next_dot + 1]] = None
- else:
- reduced_list[cmd] = None
- return reduced_list.keys()
-
- def completer(self, text, state):
- """
- Our custom completer function
- """
- options = [x for x in self.reduced_list(text) if x.startswith(text)]
- return options[state]
|