Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   python cmd.Cmd auto complete feature (http://www.velocityreviews.com/forums/t744803-python-cmd-cmd-auto-complete-feature.html)

Jean-Michel Pichavant 03-08-2011 05:28 PM

python cmd.Cmd auto complete feature
 
Hello folks,

I'm trying to autoexpand values as well as arguments using the builtin
cmd.Cmd class.

I.E.
Consider the following command and arguments:

> sayHello target=Georges

'Hello Georges !'

I can easily make 'tar' expand into 'target=' however I'd like to be
able to expand the value as well, choosing the target within a
predefined list. ie.
> sayHello target=<tab>

target=Georges target=Charles

However I have the feeling that cmd.Cmd consider the '=' character in
the way it will not try to expand anything beyond. When double tabbing
after the '=' it will print the list of available arguemnt (i.e
['target'] in the exemple above).
Ddd anyone successfuly expand values with cmd.Cmd ?

JM

Here a code sample illutrating the issue, type the linde "sayHello
target=<tab><tab>" to trigger the problem:

import cmd

class SayHello(cmd.Cmd):
def do_sayHello(self, line):
print 'Hello %s !' % line.split('=')[1]

def complete_sayHello(self, text, line, begidx, endidx):
cmds = ['target', 'anotherCmd']
targets = ['Georges', 'Charles']
if text.startswith('target='):
completions = [target for target in ['target=Georges',
'target=Charles'] if target.startswith(text)]
else:
completions = [_cmd for _cmd in cmds if _cmd.startswith(text)]
return completions

def do_EOF(self, line):
return True

if __name__ == '__main__':
SayHello().cmdloop()


All times are GMT. The time now is 09:06 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.