From d2c1b08e31e71a3f05e9624d88b402fdcc01d734 Mon Sep 17 00:00:00 2001 From: Keegi Date: Wed, 1 Jun 2011 20:00:35 +0300 Subject: [PATCH] alias tab-completion and better integration to built-in help --- pronsole.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/pronsole.py b/pronsole.py index 4c7dc50..75611c8 100644 --- a/pronsole.py +++ b/pronsole.py @@ -91,7 +91,7 @@ class pronsole(cmd.Cmd): if alias_def.lower() == "/d": # delete alias if alias_name in self.aliases.keys(): - delattr(self,"do_"+alias_name) + delattr(self.__class__,"do_"+alias_name) del self.aliases[alias_name] print "Alias '"+alias_name+"' removed" return @@ -99,15 +99,27 @@ class pronsole(cmd.Cmd): print "Alias '"+alias_name+"' is not defined" return # (re)define an alias - func = lambda args,self=self,alias_def=alias_def: self.onecmd(" ".join((alias_def,args))) + func = lambda self,args,alias_def=alias_def: self.onecmd(" ".join((alias_def,args))) self.aliases[alias_name] = alias_def - setattr(self,"do_"+alias_name,func) + setattr(self.__class__,"do_"+alias_name,func) + setattr(self.__class__,"help_"+alias_name,lambda self=self,alias_name=alias_name: self.subhelp_alias(alias_name)) def help_alias(self): print "Create/modify/view aliases: alias []" print "if is not specified, displays the alias definition" print "without arguments, displays list of all defined aliases" print "To remove an alias: alias /d" + + def complete_alias(self,text,line,begidx,endidx): + if (len(line.split())==2 and line[-1] != " ") or (len(line.split())==1 and line[-1]==" "): + return [i for i in self.aliases.keys() if i.startswith(text)] + elif(len(line.split())==3 or (len(line.split())==2 and line[-1]==" ")): + return self.completenames(text) + else: + return [] + + def subhelp_alias(self,alias_name): + print "'"+alias_name+"' is alias for '"+self.aliases[alias_name]+"'" def postloop(self): self.p.disconnect()