diff cmd2.py @ 199:12c2d23caf19

added unit check for doublepipe
author catherine@dellzilla
date Thu, 26 Feb 2009 12:50:22 -0500
parents 770c77152051
children 05c0e28306d3
line wrap: on
line diff
--- a/cmd2.py	Wed Feb 25 14:24:59 2009 -0500
+++ b/cmd2.py	Thu Feb 26 12:50:22 2009 -0500
@@ -170,6 +170,7 @@
     defaultExtension = 'txt'
     defaultFileName = 'command.txt'
     settable = ['prompt', 'continuationPrompt', 'defaultFileName', 'editor', 'caseInsensitive', 'echo', 'timing']
+    settable.sort()
     
     editor = os.environ.get('EDITOR')
     _STOP_AND_EXIT = 2
@@ -277,6 +278,13 @@
         - pipeTo:  piped
         - statement: ['simple', '']
           - command: simple
+        >>> print c.parser.parseString('double-pipe || is not a pipe').dump()
+        ['double', '-pipe || is not a pipe']
+        - args: -pipe || is not a pipe
+        - command: double
+        - statement: ['double', '-pipe || is not a pipe']
+          - args: -pipe || is not a pipe
+          - command: double
         >>> print c.parser.parseString('command with args, terminator;sufx | piped').dump()
         ['command', 'with args, terminator', ';', 'sufx', '|', ' piped']
         - args: with args, terminator
@@ -588,10 +596,11 @@
                
     def showParam(self, param):
         param = param.strip().lower()
-        if param in self.settable:
-            val = getattr(self, param)
-            self.stdout.write('%s: %s\n' % (param, str(getattr(self, param))))
-
+        for p in self.settable:
+            if p.startswith(param):
+                val = getattr(self, p)
+                self.stdout.write('%s: %s\n' % (p, str(getattr(self, p))))
+                
     def do_quit(self, arg):
         return self._STOP_AND_EXIT
     do_exit = do_quit
@@ -606,22 +615,25 @@
                 self.showParam(param)
     
     def do_set(self, arg):
-        'Sets a parameter'        
+        '''Sets a cmd2 parameter.  Accepts abbreviated parameter names so long as there is no ambiguity.
+           Call without arguments for a list of settable parameters with their values.'''
         try:
             paramName, val = arg.split(None, 1)
             paramName = paramName.strip().lower()
-            if paramName not in self.settable:
-                raise NotSettableError
-            currentVal = getattr(self, paramName)
-            if (val[0] == val[-1]) and val[0] in ("'", '"'):
-                val = val[1:-1]
-            else:                
-                val = cast(currentVal, val)
-            setattr(self, paramName, val)
-            self.stdout.write('%s - was: %s\nnow: %s\n' % (paramName, currentVal, val))
+            hits = [paramName in p for p in self.settable]
+            if hits.count(True) == 1:
+                paramName = self.settable[hits.index(True)]
+                currentVal = getattr(self, paramName)
+                if (val[0] == val[-1]) and val[0] in ("'", '"'):
+                    val = val[1:-1]
+                else:                
+                    val = cast(currentVal, val)
+                setattr(self, paramName, val)
+                self.stdout.write('%s - was: %s\nnow: %s\n' % (paramName, currentVal, val))
+            else:
+                self.do_show(paramName)
         except (ValueError, AttributeError, NotSettableError), e:
             self.do_show(arg)
-    do_set.__doc__ = '%s\nOne of: %s' % (do_set.__doc__, ', '.join(settable))
                 
     def do_pause(self, arg):
         'Displays the specified text then waits for the user to press RETURN.'