# HG changeset patch # User catherine@Elli.myhome.westell.com # Date 1233164222 18000 # Node ID 183dd2fffec51fb3bbfcddcf63a5af61deb9025a # Parent bee79220382cf11cfd4f57d6ca47c5e3c2dcf245 newline terminators ok diff -r bee79220382c -r 183dd2fffec5 cmd2.py --- a/cmd2.py Wed Jan 28 09:08:33 2009 -0500 +++ b/cmd2.py Wed Jan 28 12:37:02 2009 -0500 @@ -43,6 +43,15 @@ """ raise +def remainingArgs(oldArgs, newArgList): + ''' + >>> remainingArgs('-f bar bar cow', ['bar', 'cow']) + 'bar cow' + ''' + pattern = '\s+'.join(newArgList) + '\s*$' + matchObj = re.search(pattern, oldArgs) + return oldArgs[matchObj.start():] + def options(option_list): def option_setup(func): optionParser = OptionParser() @@ -51,8 +60,8 @@ optionParser.set_usage("%s [options] arg" % func.__name__.strip('do_')) def newFunc(instance, arg): try: - opts, newArgs = optionParser.parse_args(arg.split()) - newArgs = (newArgs and arg[arg.find(newArgs[0]):]) or '' + opts, newArgList = optionParser.parse_args(arg.split()) + newArgs = remainingArgs(arg, newArgList) except (optparse.OptionValueError, optparse.BadOptionError, optparse.OptionError, optparse.AmbiguousOptionError, optparse.OptionConflictError), e: @@ -61,7 +70,13 @@ return if hasattr(opts, '_exit'): return None - arg = arg.parser('%s %s%s%s' % (arg.parsed.command, newArgs, arg.parsed.terminator, arg.parsed.suffix)) + terminator = arg.parsed.terminator + try: + if arg.parsed.terminator[0] == '\n': + terminator = arg.parsed.terminator[0] + except IndexError: + pass + arg = arg.parser('%s %s%s%s' % (arg.parsed.command, newArgs, terminator, arg.parsed.suffix)) result = func(instance, arg, opts) return result newFunc.__doc__ = '%s\n%s' % (func.__doc__, optionParser.format_help()) diff -r bee79220382c -r 183dd2fffec5 example/exampleSession.txt --- a/example/exampleSession.txt Wed Jan 28 09:08:33 2009 -0500 +++ b/example/exampleSession.txt Wed Jan 28 12:37:02 2009 -0500 @@ -1,3 +1,4 @@ +(Cmd) say put this in a file > myfile.txt (Cmd) say < myfile.txt put this in a file (Cmd) # comments do nothing