]> granicus.if.org Git - python/commitdiff
Changes by Richard Wolff:
authorGuido van Rossum <guido@python.org>
Thu, 27 Aug 1998 19:02:51 +0000 (19:02 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 27 Aug 1998 19:02:51 +0000 (19:02 +0000)
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.

Lib/cmd.py

index 35b9e0b1fc6e97337ed831c03d979d98ae4dd2cf..20c01aae89a04a58f45b31876c4837ac68cab507 100644 (file)
@@ -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
 
@@ -62,20 +65,24 @@ class Cmd:
                        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
@@ -108,7 +115,8 @@ class Cmd:
                        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
@@ -119,7 +127,7 @@ class Cmd:
                        try:
                                func = getattr(self, 'help_' + arg)
                        except:
-                               print '*** No help on', `arg`
+                               print self.nohelp % (arg,)
                                return
                        func()
                else:
@@ -138,7 +146,7 @@ class Cmd:
                                                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)