Skip to content

Commit

Permalink
Changes by Richard Wolff:
Browse files Browse the repository at this point in the history
1) I added a command queue which is helpful to me (at least so far) and
   would also allow syntax like 's;s' (step; step) in conjunction with precmd
2) doc_leader allows the derived class to print a message before the help
   output.  Defaults to current practise of a blank line
3) nohelp allows one to override the 'No help on' message.  I need
    'Undefined command: "%s".  Try "help".'
4) Pass line to self.precmd to allow one to do some parsing: change first
   word to lower case, strip out a leading number, whatever.
5) Pass the result of onecmd and the input line to postcmd.  This allows
   one to ponder the stop result before it is effective.
6) emptyline() requires a   if self.lastcmd:  conditional because if the
   first command is null (<cr>), you get an infinite recursion with the
   code as it stands.
  • Loading branch information
gvanrossum committed Aug 27, 1998
1 parent de57030 commit b9f4860
Showing 1 changed file with 21 additions and 13 deletions.
34 changes: 21 additions & 13 deletions Lib/cmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,13 @@ class Cmd:
identchars = IDENTCHARS
ruler = '='
lastcmd = ''
cmdqueue = []
intro = None
doc_leader = ""
doc_header = "Documented commands (type help <topic>):"
misc_header = "Miscellaneous help topics:"
undoc_header = "Undocumented commands:"
nohelp = "*** No help on %s"

def __init__(self): pass

Expand All @@ -62,20 +65,24 @@ def cmdloop(self, intro=None):
print self.intro
stop = None
while not stop:
try:
line = raw_input(self.prompt)
except EOFError:
line = 'EOF'
self.precmd()
if self.cmdqueue:
line = self.cmdqueue[0]
del self.cmdqueue[0]
else:
try:
line = raw_input(self.prompt)
except EOFError:
line = 'EOF'
line = self.precmd(line)
stop = self.onecmd(line)
self.postcmd()
stop = self.postcmd(stop, line)
self.postloop()

def precmd(self):
pass
def precmd(self, line):
return line

def postcmd(self):
pass
def postcmd(self, stop, line):
return stop

def preloop(self):
pass
Expand Down Expand Up @@ -108,7 +115,8 @@ def onecmd(self, line):
return func(arg)

def emptyline(self):
return self.onecmd(self.lastcmd)
if self.lastcmd:
return self.onecmd(self.lastcmd)

def default(self, line):
print '*** Unknown syntax:', line
Expand All @@ -119,7 +127,7 @@ def do_help(self, arg):
try:
func = getattr(self, 'help_' + arg)
except:
print '*** No help on', `arg`
print self.nohelp % (arg,)
return
func()
else:
Expand All @@ -138,7 +146,7 @@ def do_help(self, arg):
del help[cmd]
else:
cmds_undoc.append(cmd)
print
print self.doc_leader
self.print_topics(self.doc_header, cmds_doc, 15,80)
self.print_topics(self.misc_header, help.keys(),15,80)
self.print_topics(self.undoc_header, cmds_undoc, 15,80)
Expand Down

0 comments on commit b9f4860

Please sign in to comment.